From ce43424ebe5adfe996de8fce8adad12d61808868 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Wed, 12 Feb 2020 16:32:20 -0800 Subject: [PATCH 01/26] Add BLE files with BLE TX/15.4 RX application --- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 0 -> 13720 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 861 ++++++++++++++++++ .../ble_tx_154_rx/ble_tx_154_rx.c | 266 ++++++ .../ble_tx_154_rx/ble_tx_154_rx.uvoptx | 440 +++++++++ .../ble_tx_154_rx/ble_tx_154_rx.uvprojx | 549 +++++++++++ scm_v3c/ble.c | 355 ++++++++ scm_v3c/ble.h | 58 ++ scm_v3c/optical.c | 124 ++- scm_v3c/optical.h | 8 +- scm_v3c/radio.c | 10 +- scm_v3c/rftimer.c | 2 +- scm_v3c/scm3c_hw_interface.c | 16 +- scm_v3c/scm3c_hw_interface.h | 1 + scm_v3c/scum_defs.h | 5 +- 14 files changed, 2658 insertions(+), 37 deletions(-) create mode 100644 scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin create mode 100644 scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex create mode 100644 scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c create mode 100644 scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvoptx create mode 100644 scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvprojx create mode 100644 scm_v3c/ble.c create mode 100644 scm_v3c/ble.h diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin new file mode 100644 index 0000000000000000000000000000000000000000..84994f7ffbd885fd64f08a7171e33cf4c7e458f0 GIT binary patch literal 13720 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 + +#include "scm3c_hw_interface.h" +#include "memory_map.h" +#include "ble.h" +#include "rftimer.h" +#include "radio.h" +#include "optical.h" + +//=========================== defines ========================================= + +#define CRC_VALUE (*((unsigned int *) 0x0000FFFC)) +#define CODE_LENGTH (*((unsigned int *) 0x0000FFF8)) + +#define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes +#define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet + +#define BLE_LENGTH_PACKET 31 ///< maxium length is 31 bytes + +#define TIMER_PERIOD 2500 ///< 500 = 1ms@500kHz +#define BLE_TX_PERIOD 50 + +#define BLE_CALIBRATE_LC false +#define BLE_SWEEP_FINE true + +//=========================== variables ======================================= + +typedef struct { + uint8_t packet[LENGTH_PACKET]; + uint8_t packet_len; + int8_t rxpk_rssi; + uint8_t rxpk_lqi; + + volatile bool rxpk_crc; + // a flag to mark when to change configure + volatile bool changeConfig; + // a flag to avoid change configure during receiving frame + volatile bool rxFrameStarted; + + volatile uint32_t IF_estimate; + volatile uint32_t LQI_chip_errors; + volatile uint32_t cdr_tau_value; + + uint8_t rx_coarse; + uint8_t rx_mid; + uint8_t rx_fine; + + uint8_t tx_coarse; + uint8_t tx_mid; + uint8_t tx_fine; + + uint8_t ble_packet[BLE_LENGTH_PACKET]; + uint8_t ble_packet_len; + + uint8_t rx_iteration; +} app_vars_t; + +app_vars_t app_vars; + +//=========================== prototypes ====================================== + +void cb_startFrame_rx(uint32_t timestamp); +void cb_endFrame_rx(uint32_t timestamp); +void cb_timer(void); + +//=========================== main ============================================ + +int main(void) { + + uint32_t calc_crc; + + uint8_t i; + uint8_t j; + uint8_t offset; + int t; + int rx_fine; + + memset(&app_vars, 0, sizeof(app_vars_t)); + + printf("Initializing..."); + + // Set up mote configuration + // This function handles all the analog scan chain setup + initialize_mote(); + ble_init_tx(); + + radio_setStartFrameRxCb(cb_startFrame_rx); + radio_setEndFrameRxCb(cb_endFrame_rx); + rftimer_set_callback(cb_timer); + + // Disable interrupts for the radio and rftimer + radio_disable_interrupts(); + rftimer_disable_interrupts(); + + // Check CRC to ensure there were no errors during optical programming + printf("\r\n-------------------\r\n"); + printf("Validating program integrity..."); + + calc_crc = crc32c(0x0000,CODE_LENGTH); + + if (calc_crc == CRC_VALUE){ + printf("CRC OK\r\n"); + } else { + printf("\r\nProgramming Error - CRC DOES NOT MATCH - Halting Execution\r\n"); + while(1); + } + + // Debug output + // printf("\r\nCode length is %u bytes",code_length); + // printf("\r\nCRC calculated by SCM is: 0x%X",calc_crc); + + //printf("done\r\n"); + + // After bootloading the next thing that happens is frequency calibration using optical + printf("Calibrating frequencies...\r\n"); + + // Initial frequency calibration will tune the frequencies for HCLK, the RX/TX chip clocks, and the LO + + // For the LO, calibration for RX channel 11, so turn on AUX, IF, and LO LDOs + // by calling radio rxEnable + radio_rxEnable(); + +#if BLE_CALIBRATE_LC + optical_enableLCCalibration(); + + // Turn on LO, DIV, PA + ANALOG_CFG_REG__10 = 0x68; + + // Turn off polyphase and disable mixer + ANALOG_CFG_REG__16 = 0x6; + + // For TX, LC target freq = 2.402G - 0.25M = 2.40175 GHz. + optical_setLCTarget(250020); +#endif + + // Enable optical SFD interrupt for optical calibration + optical_enable(); + + // Wait for optical cal to finish + while(!optical_getCalibrationFinished()); + + printf("Cal complete\r\n"); + + // Enable interrupts for the radio FSM + radio_enable_interrupts(); + + // Configure coarse, mid, and fine codes for RX. + app_vars.rx_coarse = 23; + app_vars.rx_mid = 10; + app_vars.rx_fine = 15; + + // Configure coarse, mid, and fine codes for TX. +#if BLE_CALIBRATE_LC + app_vars.tx_coarse = optical_getLCCoarse(); + app_vars.tx_mid = optical_getLCMid(); + app_vars.tx_fine = optical_getLCFine(); +#else + // CHANGE THESE VALUES AFTER LC CALIBRATION. + app_vars.tx_coarse = 23; + app_vars.tx_mid = 11; + app_vars.tx_fine = 15; +#endif + + ble_gen_test_packet(); + + while (1) { + for (rx_fine = 12; rx_fine < 20; ++rx_fine) { + printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, rx_fine); + while (app_vars.rxFrameStarted); + radio_rfOff(); + LC_FREQCHANGE(app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + radio_rxEnable(); + radio_rxNow(); + rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); + app_vars.changeConfig = false; + while (!app_vars.changeConfig); + } + } +} + +//=========================== public ========================================== + +//=========================== private ========================================= + +void cb_startFrame_rx(uint32_t timestamp){ + app_vars.rxFrameStarted = true; +} + +void cb_endFrame_rx(uint32_t timestamp){ + + uint8_t i; + + radio_getReceivedFrame( + &(app_vars.packet[0]), + &app_vars.packet_len, + sizeof(app_vars.packet), + &app_vars.rxpk_rssi, + &app_vars.rxpk_lqi + ); + + radio_rfOff(); + + if ( + app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) + ) { + // Only record IF estimate, LQI, and CDR tau for valid packets + app_vars.IF_estimate = radio_getIFestimate(); + app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + + printf( + "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", + app_vars.packet[4], + app_vars.packet[0], + app_vars.packet[1], + app_vars.packet[2], + app_vars.packet[3], + app_vars.rx_coarse, + app_vars.rx_mid, + app_vars.rx_fine + ); + + app_vars.ble_packet_len = 4; + memcpy(&app_vars.ble_packet[0], &app_vars.packet[0], 4); + + app_vars.packet_len = 0; + memset(&app_vars.packet[0], 0, LENGTH_PACKET); + } + + radio_rxEnable(); + radio_rxNow(); + + app_vars.rxFrameStarted = false; +} + +void cb_timer(void) { + int tx_fine, t; + app_vars.changeConfig = true; + + app_vars.rx_iteration = (app_vars.rx_iteration + 1) % BLE_TX_PERIOD; + + if (app_vars.rx_iteration == 0) { +#if BLE_SWEEP_FINE + for (tx_fine = 0; tx_fine < 32; ++tx_fine) { + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); + } +#else + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); +#endif + } +} diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvoptx b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvoptx new file mode 100644 index 00000000..1df2630f --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvoptx @@ -0,0 +1,440 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ble_tx_154_rx + 0x4 + ARM-ADS + + 10000000 + + 0 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + app + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ble_tx_154_rx.c + ble_tx_154_rx.c + 0 + 0 + + + + + drv + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + ..\..\cm0dsasm.s + cm0dsasm.s + 0 + 0 + + + 2 + 3 + 5 + 0 + 0 + 0 + ..\..\Memory_Map.h + Memory_Map.h + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\retarget.c + retarget.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\optical.c + optical.c + 0 + 0 + + + 2 + 6 + 5 + 0 + 0 + 0 + ..\..\optical.h + optical.h + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\radio.c + radio.c + 0 + 0 + + + 2 + 8 + 5 + 0 + 0 + 0 + ..\..\radio.h + radio.h + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\adc.c + adc.c + 0 + 0 + + + 2 + 10 + 5 + 0 + 0 + 0 + ..\..\adc.h + adc.h + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\gpio.c + gpio.c + 0 + 0 + + + 2 + 12 + 5 + 0 + 0 + 0 + ..\..\gpio.h + gpio.h + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ..\..\uart.c + uart.c + 0 + 0 + + + 2 + 14 + 5 + 0 + 0 + 0 + ..\..\uart.h + uart.h + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ..\..\rftimer.c + rftimer.c + 0 + 0 + + + 2 + 16 + 5 + 0 + 0 + 0 + ..\..\rftimer.h + rftimer.h + 0 + 0 + + + 2 + 17 + 5 + 0 + 0 + 0 + ..\..\scum_defs.h + scum_defs.h + 0 + 0 + + + 2 + 18 + 5 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.h + scm3c_hw_interface.h + 0 + 0 + + + 2 + 19 + 1 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.c + scm3c_hw_interface.c + 0 + 0 + + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + + + +
diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvprojx b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvprojx new file mode 100644 index 00000000..1ac6357f --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.uvprojx @@ -0,0 +1,549 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_tx_154_rx + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.0 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + ble_tx_154_rx + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin .\Objects\ble_tx_154_rx.axf -o .\Objects\ble_tx_154_rx.bin + fromelf -cvf .\Objects\ble_tx_154_rx.axf -o .\Objects\disasm.txt + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 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 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ../../ + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + freq_sweep_rx.sct + + + + + + + + + + + app + + + ble_tx_154_rx.c + 1 + .\ble_tx_154_rx.c + + + + + drv + + + cm0dsasm.s + 2 + ..\..\cm0dsasm.s + + + Memory_Map.h + 5 + ..\..\Memory_Map.h + + + retarget.c + 1 + ..\..\retarget.c + + + optical.c + 1 + ..\..\optical.c + + + optical.h + 5 + ..\..\optical.h + + + radio.c + 1 + ..\..\radio.c + + + radio.h + 5 + ..\..\radio.h + + + adc.c + 1 + ..\..\adc.c + + + adc.h + 5 + ..\..\adc.h + + + gpio.c + 1 + ..\..\gpio.c + + + gpio.h + 5 + ..\..\gpio.h + + + uart.c + 1 + ..\..\uart.c + + + uart.h + 5 + ..\..\uart.h + + + rftimer.c + 1 + ..\..\rftimer.c + + + rftimer.h + 5 + ..\..\rftimer.h + + + scum_defs.h + 5 + ..\..\scum_defs.h + + + scm3c_hw_interface.h + 5 + ..\..\scm3c_hw_interface.h + + + scm3c_hw_interface.c + 1 + ..\..\scm3c_hw_interface.c + + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + + + + + + + + + + + + + RTE\CMSIS\RTX_Conf_CM.c + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + RTE\Drivers\NAND_MemBus_Config.h + + + + + + RTE\Drivers\OneNAND_Config.h + + + + + + RTE\File_System\FS_Config.c + + + + + + RTE\File_System\FS_Config_RAM.h + + + + + + + +
diff --git a/scm_v3c/ble.c b/scm_v3c/ble.c new file mode 100644 index 00000000..ecc93e00 --- /dev/null +++ b/scm_v3c/ble.c @@ -0,0 +1,355 @@ +#include +#include +#include +#include + +#include "memory_map.h" +#include "scm3c_hw_interface.h" +#include "ble.h" +#include "radio.h" + +//=========================== definition ====================================== + +//=========================== variables ======================================= + +typedef struct { + uint8_t packet[64]; + uint8_t AdvA[ADVA_LENGTH]; + uint8_t channel; + + // BLE packet data. + char name[NAME_LENGTH]; + uint16_t lc_freq_codes; + uint32_t count_2M; + uint32_t count_32k; + double temp; +} ble_vars_t; + +ble_vars_t ble_vars; + +//=========================== prototypes ====================================== + +void load_tx_arb_fifo(void); +void transmit_tx_arb_fifo(void); + +//=========================== public ========================================== + +void ble_init(void) { + // Clear variables. + memset(&ble_vars, 0, sizeof(ble_vars)); + + // Set default advertiser address. + ble_vars.AdvA[0] = 0x00; + ble_vars.AdvA[1] = 0x02; + ble_vars.AdvA[2] = 0x72; + ble_vars.AdvA[3] = 0x32; + ble_vars.AdvA[4] = 0x80; + ble_vars.AdvA[5] = 0xC6; + + // Set default channel. + ble_vars.channel = 37; + + // Set default name. + ble_vars.name[0] = 'S'; + ble_vars.name[1] = 'C'; + ble_vars.name[2] = 'U'; + ble_vars.name[3] = 'M'; + ble_vars.name[4] = '3'; +} + +void ble_gen_packet(void) { + uint8_t i = 0, j = 0; + + int k; + uint8_t common; + uint8_t crc3 = 0xAA; + uint8_t crc2 = 0xAA; + uint8_t crc1 = 0xAA; + + uint8_t pdu_crc[PDU_LENGTH + CRC_LENGTH]; + + uint8_t lfsr = (ble_vars.channel & 0x3F) | (1 << 6); // [1 channel[6]] + + memset(ble_vars.packet, 0, 64 * sizeof(uint8_t)); + memset(pdu_crc, 0, (PDU_LENGTH + CRC_LENGTH) * sizeof(uint8_t)); + + ble_vars.packet[i++] = BPREAMBLE; + + ble_vars.packet[i++] = BACCESS_ADDRESS1; + ble_vars.packet[i++] = BACCESS_ADDRESS2; + ble_vars.packet[i++] = BACCESS_ADDRESS3; + ble_vars.packet[i++] = BACCESS_ADDRESS4; + + pdu_crc[j++] = PDU_HEADER1; + pdu_crc[j++] = PDU_HEADER2; + + for (k = ADVA_LENGTH - 1; k >= 0; --k) { + pdu_crc[j++] = flipChar(ble_vars.AdvA[k]); + } + + pdu_crc[j++] = NAME_HEADER; + pdu_crc[j++] = NAME_GAP_CODE; + + for (k = 0; k < NAME_LENGTH; ++k) { + pdu_crc[j++] = flipChar(ble_vars.name[k]); + } + + for (j = 0; j < PDU_LENGTH; ++j) { + for (k = 7; k >= 0; --k) { + common = (crc1 & 1) ^ ((pdu_crc[j] & (1 << k)) >> k); + crc1 = (crc1 >> 1) | ((crc2 & 1) << 7); + crc2 = ((crc2 >> 1) | ((crc3 & 1) << 7)) ^ (common << 6) ^ (common << 5); + crc3 = ((crc3 >> 1) | (common << 7)) ^ (common << 6) ^ (common << 4) ^ (common << 3) ^ (common << 1); + } + } + + crc1 = flipChar(crc1); + crc2 = flipChar(crc2); + crc3 = flipChar(crc3); + + pdu_crc[j++] = crc1; + pdu_crc[j++] = crc2; + pdu_crc[j++] = crc3; + + for (j = 0; j < PDU_LENGTH + CRC_LENGTH; ++j) { + for (k = 7; k >= 0; --k) { + pdu_crc[j] = (pdu_crc[j] & ~(1 << k)) | ((pdu_crc[j] & (1 << k)) ^ ((lfsr & 1) << k)); + lfsr = ((lfsr >> 1) | ((lfsr & 1) << 6)) ^ ((lfsr & 1) << 2); + } + } + + for (j = 0; j < PDU_LENGTH + CRC_LENGTH; ++j) { + ble_vars.packet[i++] = pdu_crc[j]; + } +} + +void ble_gen_test_packet(void) { + uint8_t i = 0; + + memset(ble_vars.packet, 0, sizeof(ble_vars.packet) * sizeof(uint8_t)); + + ble_vars.packet[i++] = 0x1D; + ble_vars.packet[i++] = 0x55; + ble_vars.packet[i++] = 0xAD; + ble_vars.packet[i++] = 0xF6; + ble_vars.packet[i++] = 0x45; + ble_vars.packet[i++] = 0xC7; + ble_vars.packet[i++] = 0xC5; + ble_vars.packet[i++] = 0x0E; + ble_vars.packet[i++] = 0x26; + ble_vars.packet[i++] = 0x13; + ble_vars.packet[i++] = 0xC2; + ble_vars.packet[i++] = 0xAC; + ble_vars.packet[i++] = 0x98; + ble_vars.packet[i++] = 0x37; + ble_vars.packet[i++] = 0xB8; + ble_vars.packet[i++] = 0x30; + ble_vars.packet[i++] = 0xA1; + ble_vars.packet[i++] = 0xC9; + ble_vars.packet[i++] = 0xE4; + ble_vars.packet[i++] = 0x93; + ble_vars.packet[i++] = 0x75; + ble_vars.packet[i++] = 0xB7; + ble_vars.packet[i++] = 0x41; + ble_vars.packet[i++] = 0x6C; + ble_vars.packet[i++] = 0xD1; + ble_vars.packet[i++] = 0x2D; + ble_vars.packet[i++] = 0xB8; +} + +void ble_set_AdvA(uint8_t *AdvA) { + ble_vars.AdvA[0] = AdvA[0]; + ble_vars.AdvA[1] = AdvA[1]; + ble_vars.AdvA[2] = AdvA[2]; + ble_vars.AdvA[3] = AdvA[3]; + ble_vars.AdvA[4] = AdvA[4]; + ble_vars.AdvA[5] = AdvA[5]; +} + +void ble_set_channel(uint8_t channel) { + ble_vars.channel = channel; +} + +void ble_init_tx(void) { + // Set up BLE modulation source. + // ---- + // mod_logic<3:0> = ASC<996:999> + // The two LSBs change the mux from cortex mod (00) source to pad (11). + // They can also be used to set the modulation to 0 (10) or 1 (01). + // The other bits are used for inverting the modulation bitstream and can be cleared. + // The goal is to remove the 15.4 DAC from the modulation path. + /* + clear_asc_bit(996); + set_asc_bit(997); + clear_asc_bit(998); + clear_asc_bit(999); + */ + set_asc_bit(996); + clear_asc_bit(997); + clear_asc_bit(998); + clear_asc_bit(999); + + clear_asc_bit(1000); + clear_asc_bit(1001); + clear_asc_bit(1002); + clear_asc_bit(1003); + + // Make sure the BLE modulation mux is set. + // Bit 1013 sets the BLE mod dac to cortex control. + // The BLE tone spacing cannot be set, it is a fixed DAC. + set_asc_bit(1013); + // ---- + + // Set the bypass scan bits of the BLE FIFO and GFSK modules. + set_asc_bit(1041); + set_asc_bit(1042); + + // Ensure cortex control of LO. + clear_asc_bit(964); + + // Ensure cortex control of divider. + clear_asc_bit(1081); + + // Need to set analog_cfg<183> to 0 to select BLE for chips out. + ANALOG_CFG_REG__11 = 0x0000; + + // Set current in LC tank. + set_LC_current(127); + + // Set LDO voltages for PA and LO. + // set_PA_supply(63); + // set_LO_supply(127,0); + + // Program analog scan chain. + analog_scan_chain_write(); + analog_scan_chain_load(); +} + +// Must set IF clock frequency AFTER calling this function. +void ble_init_rx(void) { + radio_init_rx_ZCC(); + + // Set clock mux to internal RC oscillator. + clear_asc_bit(424); + set_asc_bit(425); + + // Need to turn on ADC clock generation to get /4 output for clock calibration. + set_asc_bit(422); + + // Set gain for I and Q. + set_IF_gain_ASC(63,63); + + // Set gm for stg3 ADC drivers. + set_IF_stg3gm_ASC(7, 7); //(I, Q) + + // Set comparator trims. + //set_IF_comparator_trim_I(0, 7); //(p,n) + //set_IF_comparator_trim_Q(15, 0); //(p,n) + + // Set clock divider value for zcc. + // The IF clock divided by this value must equal 1 MHz for BLE 1M PHY. + set_IF_ZCC_clkdiv(76); + + // Disable feedback. + clear_asc_bit(123); + + // Mixer and polyphase control settings can be driven from either ASC or memory mapped I/O. + // Mixers and polyphase should both be enabled for RX and both disabled for TX. + // -- + // For polyphase (1=enabled), + // mux select signal ASC<746>=0 gives control to ASC<971>. + // mux select signal ASC<746>=1 gives control to analog_cfg<256> (bit 0 of ANALOG_CFG_REG__16). + // -- + // For mixers (0=enabled), both I and Q should be enabled for matched filter mode. + // mux select signals ASC<744>=0 and ASC<745>=0 give control to ASC<298> and ASC<307>. + // mux select signals ASC<744>=1 and ASC<745>=1 give control to analog_cfg<257> analog_cfg<258> (bits 1 and 2 in ANALOG_CFG_REG__16). + + // Set mixer and polyphase control signals to memory mapped I/O. + set_asc_bit(744); + set_asc_bit(745); + set_asc_bit(746); + + // Enable both polyphase and mixers via memory mapped IO (...001 = 0x1). + // To disable both you would invert these values (...110 = 0x6). + ANALOG_CFG_REG__16 = 0x1; + + // Program analog scan chain. + analog_scan_chain_write(); + analog_scan_chain_load(); +} + +void ble_transmit(void) { + int t; + + load_tx_arb_fifo(); + + // Turn on LO and PA. + radio_txEnable(); + + // Turn on LO, PA, and DIV. + ANALOG_CFG_REG__10 = 0x0068; + + // Send the packet. + transmit_tx_arb_fifo(); + + // Wait for transmission to finish. + // Don't know if there is some way to know when this has finished or just busy wait (?). + for (t = 0; t < 20000; ++t); + + radio_rfOff(); +} + +//=========================== private ========================================= + +void load_tx_arb_fifo(void) { + // Initialize variables. + int i; // used to loop through the bytes + int j; // used to loop through the 8 bits of each individual byte + + uint8_t current_byte; // temporary variable used to get through each byte at a time + uint8_t current_bit; // temporary variable to put the current bit into the GPIO + uint32_t fifo_ctrl_reg = 0x00000000; // local storage for analog CFG register + + // Prepare FIFO for loading. + fifo_ctrl_reg |= 0x00000001; // raise LSB - data in valid + fifo_ctrl_reg &= 0xFFFFFFFB; // lower 3rd bit - data out ready + fifo_ctrl_reg &= 0xFFFFFFDF; // lower clock select bit to clock in from Cortex + + ANALOG_CFG_REG__11 = fifo_ctrl_reg; // load in the configuration settings + + // Load packet into FIFO. + for (i = 0; i < 64; ++i) { + current_byte = ble_vars.packet[i]; // put a byte into the temporary storage + + for (j = 7; j >= 0; --j) { + // current_bit = ((current_byte << (j - 1)) & 0x80) >> 7; + current_bit = (current_byte >> j) & 0x1; + + if (current_bit == 0) { + fifo_ctrl_reg &= 0xFFFFFFFD; + ANALOG_CFG_REG__11 = fifo_ctrl_reg; + } + if (current_bit == 1) { + fifo_ctrl_reg |= 0x00000002; + ANALOG_CFG_REG__11 = fifo_ctrl_reg; + } + + fifo_ctrl_reg |= 0x00000008; + ANALOG_CFG_REG__11 = fifo_ctrl_reg; + fifo_ctrl_reg &= 0xFFFFFFF7; + ANALOG_CFG_REG__11 = fifo_ctrl_reg; // toggle the clock! + } + } +} + +void transmit_tx_arb_fifo(void) { + uint32_t fifo_ctrl_reg = 0x00000000; // local storage for analog CFG register + + // Release data from FIFO + fifo_ctrl_reg |= 0x00000010; // enable div-by-2 + fifo_ctrl_reg &= 0xFFFFFFFE; // lower data in valid (set FIFO to output mode) + fifo_ctrl_reg |= 0x00000004; // raise data out ready (set FIFO to output mode) + fifo_ctrl_reg |= 0x00000020; // set choose clk to 1 + + ANALOG_CFG_REG__11 = fifo_ctrl_reg; +} diff --git a/scm_v3c/ble.h b/scm_v3c/ble.h new file mode 100644 index 00000000..38b50edb --- /dev/null +++ b/scm_v3c/ble.h @@ -0,0 +1,58 @@ +#ifndef __BLE_H +#define __BLE_H + +#include + +//=========================== define ========================================== + +// BLE packet assembly globals. +#define BPREAMBLE 0x55 +// Split BACCESS_ADDRESS into bytes to avoid big-/little-endianness issue. +#define BACCESS_ADDRESS1 0x6B +#define BACCESS_ADDRESS2 0x7D +#define BACCESS_ADDRESS3 0x91 +#define BACCESS_ADDRESS4 0x71 + +#define PDU_HEADER1 0x40 +#define PDU_HEADER2 0xA4 // PDU is 37 bytes long (6 bytes advertiser address + 31 bytes data). + +// Short name. +#define NAME_LENGTH 5 +#define NAME_HEADER 0x60 // Name is 6 bytes long (1 byte GAP code + 5 bytes data). +#define NAME_GAP_CODE 0x10 + +// LC frequency codes (coarse+mid+fine). +#define LC_FREQCODES_LENGTH 2 +#define LC_FREQCODES_HEADER 0xC0 // LC freq codes are 3 bytes long (1 byte GAP code + 2 bytes data/15 bits). +#define LC_FREQCODES_GAP_CODE 0x03 // Custom GAP code for LC freq codes (0xC0 LSB first). + +// Counters (2M and 32kHz). +#define COUNTERS_LENGTH 8 +#define COUNTERS_HEADER 0x90 // Counters are 9 bytes long (1 byte GAP code + 4 bytes 2M counter + 4 bytes 32k counter). +#define COUNTERS_GAP_CODE 0x43 // Custom GAP code for counters (0xC2 LSB first). + +// Temperature. +#define TEMP_LENGTH 2 +#define TEMP_HEADER 0xC0 // Temperature is 3 bytes long (1 byte GAP code + 2 bytes data). +#define TEMP_GAP_CODE 0x83 // Custom GAP code for temperature (0xC1 LSB first). + +#define ADVA_LENGTH 6 // Advertiser address is 6 bytes long. +#define PDU_LENGTH 39 // 2 byte PDU header + 37 bytes PDU. +#define CRC_LENGTH 3 // CRC is 3 bytes long. + +//=========================== typedef ========================================= + +//=========================== variables ======================================= + +//=========================== prototypes ====================================== + +void ble_init(void); +void ble_init_tx(void); +void ble_init_rx(void); +void ble_gen_packet(void); +void ble_gen_test_packet(void); +void ble_set_AdvA(uint8_t *AdvA); +void ble_set_channel(uint8_t channel); +void ble_transmit(void); + +#endif diff --git a/scm_v3c/optical.c b/scm_v3c/optical.c index 93ad387e..72c9cfd5 100644 --- a/scm_v3c/optical.c +++ b/scm_v3c/optical.c @@ -9,12 +9,26 @@ //=========================== defines ========================================= +#define LC_CAL_COARSE_MIN 23 +#define LC_CAL_COARSE_MAX 25 +#define LC_CAL_MID_MIN 0 +#define LC_CAL_MID_MAX 31 +#define LC_CAL_FINE_MIN 15 +#define LC_CAL_FINE_MAX 15 + //=========================== variables ======================================= typedef struct { uint8_t optical_cal_iteration; - uint8_t optical_cal_finished; - + bool optical_cal_finished; + + bool optical_LC_cal_enable; + bool optical_LC_cal_finished; + uint8_t cal_LC_coarse; + uint8_t cal_LC_mid; + uint8_t cal_LC_fine; + uint32_t cal_LC_diff; + uint32_t num_32k_ticks_in_100ms; uint32_t num_2MRC_ticks_in_100ms; uint32_t num_IFclk_ticks_in_100ms; @@ -23,7 +37,9 @@ typedef struct { // reference to calibrate uint32_t LC_target; - uint32_t LC_code; + uint8_t LC_coarse; + uint8_t LC_mid; + uint8_t LC_fine; } optical_vars_t; optical_vars_t optical_vars; @@ -35,18 +51,46 @@ optical_vars_t optical_vars; void optical_init(void) { memset(&optical_vars, 0, sizeof(optical_vars_t)); - - // Target radio LO freq = 2.4025G + // Divide ratio is currently 480*2 // Calibration counts for 100ms - optical_vars.LC_target = REFERENCE_LC_TARGET; - optical_vars.LC_code = DEFUALT_INIT_LC_CODE; + optical_vars.LC_target = REFERENCE_LC_TARGET; + optical_vars.LC_coarse = DEFAULT_INIT_LC_COARSE; + optical_vars.LC_mid = DEFAULT_INIT_LC_MID; + optical_vars.LC_fine = DEFAULT_INIT_LC_FINE; } -uint8_t optical_getCalibrationFinshed(void) { +void optical_enableLCCalibration(void) { + optical_vars.optical_LC_cal_enable = true; + optical_vars.optical_LC_cal_finished = false; + + optical_vars.cal_LC_coarse = LC_CAL_COARSE_MIN; + optical_vars.cal_LC_mid = LC_CAL_MID_MIN; + optical_vars.cal_LC_fine = LC_CAL_FINE_MIN; + optical_vars.cal_LC_diff = 0xFFFFFFFF; + LC_FREQCHANGE(optical_vars.cal_LC_coarse, optical_vars.cal_LC_mid, optical_vars.cal_LC_fine); +} + +bool optical_getCalibrationFinished(void) { return optical_vars.optical_cal_finished; } +void optical_setLCTarget(uint32_t LC_target) { + optical_vars.LC_target = LC_target; +} + +uint8_t optical_getLCCoarse(void) { + return optical_vars.LC_coarse & 0x1F; +} + +uint8_t optical_getLCMid(void) { + return optical_vars.LC_mid & 0x1F; +} + +uint8_t optical_getLCFine(void) { + return optical_vars.LC_fine & 0x1F; +} + void optical_enable(void){ ISER = 0x0800; } @@ -129,13 +173,13 @@ void optical_sfd_isr(){ rdata_lsb = *(unsigned int*)(APB_ANALOG_CFG_BASE + 0x300000); rdata_msb = *(unsigned int*)(APB_ANALOG_CFG_BASE + 0x340000); count_IF = rdata_lsb + (rdata_msb << 16); - + // Reset all counters ANALOG_CFG_REG__0 = 0x0000; - + // Enable all counters ANALOG_CFG_REG__0 = 0x3FFF; - + // Don't make updates on the first two executions of this ISR if(optical_vars.optical_cal_iteration > 2){ @@ -147,20 +191,50 @@ void optical_sfd_isr(){ if(count_HFclock > 2003000) { HF_CLOCK_fine++; } - + set_sys_clk_secondary_freq(HF_CLOCK_coarse, HF_CLOCK_fine); scm3c_hw_interface_set_HF_CLOCK_coarse(HF_CLOCK_coarse); scm3c_hw_interface_set_HF_CLOCK_fine(HF_CLOCK_fine); - + // Do correction on LC - if(count_LC > (optical_vars.LC_target + 0)) { - optical_vars.LC_code -= 1; - } - if(count_LC < (optical_vars.LC_target - 0)) { - optical_vars.LC_code += 1; + if (optical_vars.optical_LC_cal_enable && !optical_vars.optical_LC_cal_finished) { + if ((count_LC <= optical_vars.LC_target) && (optical_vars.LC_target - count_LC < optical_vars.cal_LC_diff)) { + optical_vars.cal_LC_diff = optical_vars.LC_target - count_LC; + optical_vars.LC_coarse = optical_vars.cal_LC_coarse; + optical_vars.LC_mid = optical_vars.cal_LC_mid; + optical_vars.LC_fine = optical_vars.cal_LC_fine; + } else if ((count_LC > optical_vars.LC_target) && (count_LC - optical_vars.LC_target < optical_vars.cal_LC_diff)) { + optical_vars.cal_LC_diff = count_LC - optical_vars.LC_target; + optical_vars.LC_coarse = optical_vars.cal_LC_coarse; + optical_vars.LC_mid = optical_vars.cal_LC_mid; + optical_vars.LC_fine = optical_vars.cal_LC_fine; + } + + printf("count_LC: %u, LC_target: %u, LC_diff: %u\n", count_LC, optical_vars.LC_target, optical_vars.cal_LC_diff); + + ++optical_vars.cal_LC_fine; + if (optical_vars.cal_LC_fine > LC_CAL_FINE_MAX) { + optical_vars.cal_LC_fine = LC_CAL_FINE_MIN; + ++optical_vars.cal_LC_mid; + if (optical_vars.cal_LC_mid > LC_CAL_MID_MAX) { + optical_vars.cal_LC_mid = LC_CAL_MID_MIN; + ++optical_vars.cal_LC_coarse; + if (optical_vars.cal_LC_coarse > LC_CAL_COARSE_MAX) { + optical_vars.optical_LC_cal_finished = true; + // Turn off divider. + divProgram(480,0,0); + printf("coarse: %u, mid: %u, fine: %u\n", optical_vars.LC_coarse, optical_vars.LC_mid, optical_vars.LC_fine); + } + } + } + + if (!optical_vars.optical_LC_cal_finished) { + LC_FREQCHANGE(optical_vars.cal_LC_coarse, optical_vars.cal_LC_mid, optical_vars.cal_LC_fine); + } else { + LC_FREQCHANGE(optical_vars.LC_coarse, optical_vars.LC_mid, optical_vars.LC_fine); + } } - LC_monotonic(optical_vars.LC_code); - + // Do correction on 2M RC // Coarse step ~1100 counts, fine ~150 counts, superfine ~25 // Too fast @@ -208,17 +282,17 @@ void optical_sfd_isr(){ scm3c_hw_interface_set_IF_fine(IF_fine); analog_scan_chain_write(); - analog_scan_chain_load(); + analog_scan_chain_load(); } // Debugging output - printf("HF=%d-%d 2M=%d-%d,%d,%d LC=%d-%d IF=%d-%d\r\n",count_HFclock,HF_CLOCK_fine,count_2M,RC2M_coarse,RC2M_fine,RC2M_superfine,count_LC,optical_vars.LC_code,count_IF,IF_fine); + printf("HF=%d-%d 2M=%d-%d,%d,%d LC=%d IF=%d-%d\r\n",count_HFclock,HF_CLOCK_fine,count_2M,RC2M_coarse,RC2M_fine,RC2M_superfine,count_LC,count_IF,IF_fine); - if(optical_vars.optical_cal_iteration == 25){ + if(optical_vars.optical_cal_iteration >= 25 && (!optical_vars.optical_LC_cal_enable || optical_vars.optical_LC_cal_finished)){ // Disable this ISR ICER = 0x0800; optical_vars.optical_cal_iteration = 0; - optical_vars.optical_cal_finished = 1; + optical_vars.optical_cal_finished = true; // Store the last count values optical_vars.num_32k_ticks_in_100ms = count_32k; @@ -246,4 +320,4 @@ void optical_sfd_isr(){ // Halt all counters ANALOG_CFG_REG__0 = 0x0000; } -} \ No newline at end of file +} diff --git a/scm_v3c/optical.h b/scm_v3c/optical.h index ffd1de37..b166cc18 100644 --- a/scm_v3c/optical.h +++ b/scm_v3c/optical.h @@ -1,6 +1,7 @@ #ifndef __OPTICAL_H #define __OPTICAL_H +#include #include //=========================== define ========================================== @@ -13,7 +14,12 @@ //==== admin void optical_init(void); -uint8_t optical_getCalibrationFinshed(void); +void optical_enableLCCalibration(void); +bool optical_getCalibrationFinished(void); +void optical_setLCTarget(uint32_t LC_target); +uint8_t optical_getLCCoarse(void); +uint8_t optical_getLCMid(void); +uint8_t optical_getLCFine(void); void optical_enable(void); #endif \ No newline at end of file diff --git a/scm_v3c/radio.c b/scm_v3c/radio.c index 4e33da9d..99685717 100644 --- a/scm_v3c/radio.c +++ b/scm_v3c/radio.c @@ -174,12 +174,12 @@ void radio_loadPacket(uint8_t* packet, uint16_t len){ // Turn on the radio for transmit // This should be done at least ~50 us before txNow() void radio_txEnable(){ - - // Turn off polyphase and disable mixer - ANALOG_CFG_REG__16 = 0x6; - + // Turn on LO, PA, and AUX LDOs ANALOG_CFG_REG__10 = 0x0028; + + // Turn off polyphase and disable mixer + ANALOG_CFG_REG__16 = 0x6; } // Begin modulating the radio output for TX @@ -206,7 +206,7 @@ void radio_rxEnable(){ ANALOG_CFG_REG__16 = 0x1; // Where packet will be stored in memory - DMA_REG__RF_RX_ADDR = &(radio_vars.radio_rx_buffer[0]);; + DMA_REG__RF_RX_ADDR = &(radio_vars.radio_rx_buffer[0]); // Reset radio FSM RFCONTROLLER_REG__CONTROL = RF_RESET; diff --git a/scm_v3c/rftimer.c b/scm_v3c/rftimer.c index 1bcf739f..1f494847 100644 --- a/scm_v3c/rftimer.c +++ b/scm_v3c/rftimer.c @@ -7,7 +7,7 @@ // ========================== definition ====================================== -#define MINIMUM_COMPAREVALE_ADVANCE 5 +#define MINIMUM_COMPAREVALUE_ADVANCE 5 // ========================== variable ======================================== diff --git a/scm_v3c/scm3c_hw_interface.c b/scm_v3c/scm3c_hw_interface.c index 08bece61..3a6594ba 100644 --- a/scm_v3c/scm3c_hw_interface.c +++ b/scm_v3c/scm3c_hw_interface.c @@ -3,6 +3,7 @@ #include "memory_map.h" #include "scm3c_hw_interface.h" +#include "ble.h" #include "radio.h" #include "optical.h" #include "rftimer.h" @@ -845,7 +846,7 @@ void radio_init_rx_MF(){ // Enable both polyphase and mixers via memory mapped IO (...001 = 0x1) // To disable both you would invert these values (...110 = 0x6) ANALOG_CFG_REG__16 = 0x1; - + } // Must set IF clock frequency AFTER calling this function @@ -982,7 +983,7 @@ void radio_init_tx(){ void radio_init_divider(unsigned int div_value){ // Set divider LDO value to max - set_DIV_supply(40,0); + set_DIV_supply(63,0); // Set prescaler to div-by-2 prescaler(4); @@ -1138,6 +1139,7 @@ void initialize_mote(){ optical_init(); radio_init(); rftimer_init(); + ble_init(); //-------------------------------------------------------- // SCM3C Analog Scan Chain Initialization @@ -1227,7 +1229,7 @@ void initialize_mote(){ set_asc_bit(1114); // Set initial LO frequency - LC_monotonic(DEFUALT_INIT_LC_CODE); + LC_FREQCHANGE(DEFAULT_INIT_LC_COARSE, DEFAULT_INIT_LC_MID, DEFAULT_INIT_LC_FINE); // Init divider settings radio_init_divider(2000); @@ -1473,6 +1475,14 @@ void clear_asc_bit(unsigned int position){ //scm3c_hw_interface_vars.ASC[position/32] &= ~(1 << (position%32)); } +void dump_asc(void){ + + unsigned int i; + for (i = 0; i < ASC_LEN; ++i){ + printf("ASC[%u] = 0x%x\n", i, scm3c_hw_interface_vars.ASC[i]); + } +} + //==== from bucket_o_functions.h diff --git a/scm_v3c/scm3c_hw_interface.h b/scm_v3c/scm3c_hw_interface.h index 8d217704..e774fe98 100644 --- a/scm_v3c/scm3c_hw_interface.h +++ b/scm_v3c/scm3c_hw_interface.h @@ -88,6 +88,7 @@ unsigned int flip_lsb8(unsigned int in); void update_PN31_byte(unsigned int* current_lfsr); void set_asc_bit(unsigned int position); void clear_asc_bit(unsigned int position); +void dump_asc(void); //==== from bucket_o_functions.h diff --git a/scm_v3c/scum_defs.h b/scm_v3c/scum_defs.h index f1489006..5483ce36 100644 --- a/scm_v3c/scum_defs.h +++ b/scm_v3c/scum_defs.h @@ -7,8 +7,9 @@ //=========================== define ========================================== -// LC_code used to the initial LC frequency, before optical calibration -#define DEFUALT_INIT_LC_CODE 698 +#define DEFAULT_INIT_LC_COARSE 23 +#define DEFAULT_INIT_LC_MID 12 +#define DEFAULT_INIT_LC_FINE 15 #define REFERENCE_LC_TARGET 250260 //=========================== typedef ========================================= From fc17706228dc57b0ce00aeca27a27a9512d7eac2 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Wed, 12 Feb 2020 21:11:39 -0800 Subject: [PATCH 02/26] Allow BLE packet customization --- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 13720 -> 15828 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 1818 +++++++++-------- .../ble_tx_154_rx/ble_tx_154_rx.c | 32 +- .../ble_tx_154_rx/ble_tx_154_rx.uvoptx | 2 +- scm_v3c/ble.c | 105 +- scm_v3c/ble.h | 21 +- 6 files changed, 1109 insertions(+), 869 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin index 84994f7ffbd885fd64f08a7171e33cf4c7e458f0..a4ac2ed45193010a70f805030b25be28f15d54d4 100644 GIT binary patch delta 4738 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 F{{g+E0 1 - 0 + 7 0 1 diff --git a/scm_v3c/ble.c b/scm_v3c/ble.c index ecc93e00..136b4f25 100644 --- a/scm_v3c/ble.c +++ b/scm_v3c/ble.c @@ -17,12 +17,21 @@ typedef struct { uint8_t AdvA[ADVA_LENGTH]; uint8_t channel; + // BLE packet contents enable. + // The total data length cannot exceed 31 bytes. + bool name_tx_en; + bool lc_freq_codes_tx_en; + bool counters_tx_en; + bool temp_tx_en; + bool data_tx_en; + // BLE packet data. char name[NAME_LENGTH]; uint16_t lc_freq_codes; uint32_t count_2M; uint32_t count_32k; double temp; + uint8_t data[CUSTOM_DATA_LENGTH]; } ble_vars_t; ble_vars_t ble_vars; @@ -50,6 +59,7 @@ void ble_init(void) { ble_vars.channel = 37; // Set default name. + ble_vars.name_tx_en = true; ble_vars.name[0] = 'S'; ble_vars.name[1] = 'C'; ble_vars.name[2] = 'U'; @@ -87,11 +97,53 @@ void ble_gen_packet(void) { pdu_crc[j++] = flipChar(ble_vars.AdvA[k]); } - pdu_crc[j++] = NAME_HEADER; - pdu_crc[j++] = NAME_GAP_CODE; + if (ble_vars.name_tx_en) { + pdu_crc[j++] = NAME_HEADER; + pdu_crc[j++] = NAME_GAP_CODE; + + for (k = 0; k < NAME_LENGTH; ++k) { + pdu_crc[j++] = flipChar(ble_vars.name[k]); + } + } + + if (ble_vars.lc_freq_codes_tx_en) { + pdu_crc[j++] = LC_FREQCODES_HEADER; + pdu_crc[j++] = LC_FREQCODES_GAP_CODE; + + pdu_crc[j++] = flipChar((ble_vars.lc_freq_codes >> 8) & 0xFF); // LC freq codes MSB + pdu_crc[j++] = flipChar(ble_vars.lc_freq_codes & 0xFF); // LC freq codes LSB + } + + if (ble_vars.counters_tx_en) { + pdu_crc[j++] = COUNTERS_HEADER; + pdu_crc[j++] = COUNTERS_GAP_CODE; + + pdu_crc[j++] = flipChar((ble_vars.count_2M >> 24) & 0xFF); // count_2M MSB + pdu_crc[j++] = flipChar((ble_vars.count_2M >> 16) & 0xFF); + pdu_crc[j++] = flipChar((ble_vars.count_2M >> 8) & 0xFF); + pdu_crc[j++] = flipChar(ble_vars.count_2M & 0xFF); // count_2M LSB + + pdu_crc[j++] = flipChar((ble_vars.count_32k >> 24) & 0xFF); // count_32k MSB + pdu_crc[j++] = flipChar((ble_vars.count_32k >> 16) & 0xFF); + pdu_crc[j++] = flipChar((ble_vars.count_32k >> 8) & 0xFF); + pdu_crc[j++] = flipChar(ble_vars.count_32k & 0xFF); // count_32k LSB + } + + if (ble_vars.temp_tx_en) { + double temp_kelvin = ble_vars.temp + 273.15; // Temperature in Kelvin + int temp_payload = 100 * temp_kelvin + 1; // Floating point error + + pdu_crc[j++] = flipChar((temp_payload >> 8) & 0xFF); // Temperature MSB + pdu_crc[j++] = flipChar(temp_payload & 0xFF); // Temperature LSB + } + + if (ble_vars.data_tx_en) { + pdu_crc[j++] = CUSTOM_DATA_HEADER; + pdu_crc[j++] = CUSTOM_DATA_GAP_CODE; - for (k = 0; k < NAME_LENGTH; ++k) { - pdu_crc[j++] = flipChar(ble_vars.name[k]); + for (k = 0; k < CUSTOM_DATA_LENGTH; ++k) { + pdu_crc[j++] = flipChar(ble_vars.data[k]); + } } for (j = 0; j < PDU_LENGTH; ++j) { @@ -170,6 +222,51 @@ void ble_set_channel(uint8_t channel) { ble_vars.channel = channel; } + +void ble_set_name_tx_en(bool name_tx_en) { + ble_vars.name_tx_en = name_tx_en; +} + +void ble_set_name(char *name) { + memcpy(ble_vars.name, name, NAME_LENGTH); +} + +void ble_set_lc_freq_codes_tx_en(bool lc_freq_codes_tx_en) { + ble_vars.lc_freq_codes_tx_en = lc_freq_codes_tx_en; +} + +void ble_set_lc_freq_codes(uint16_t lc_freq_codes) { + ble_vars.lc_freq_codes = lc_freq_codes; +} + +void ble_set_counters_tx_en(bool counters_tx_en) { + ble_vars.counters_tx_en = counters_tx_en; +} + +void ble_set_count_2M(uint32_t count_2M) { + ble_vars.count_2M = count_2M; +} + +void ble_set_count_32k(uint32_t count_32k) { + ble_vars.count_32k = count_32k; +} + +void ble_set_temp_tx_en(bool temp_tx_en) { + ble_vars.temp_tx_en = temp_tx_en; +} + +void ble_set_temp(double temp) { + ble_vars.temp = temp; +} + +void ble_set_data_tx_en(bool data_tx_en) { + ble_vars.data_tx_en = data_tx_en; +} + +void ble_set_data(uint8_t *data) { + memcpy(ble_vars.data, data, CUSTOM_DATA_LENGTH); +} + void ble_init_tx(void) { // Set up BLE modulation source. // ---- diff --git a/scm_v3c/ble.h b/scm_v3c/ble.h index 38b50edb..5af08021 100644 --- a/scm_v3c/ble.h +++ b/scm_v3c/ble.h @@ -1,6 +1,7 @@ #ifndef __BLE_H #define __BLE_H +#include #include //=========================== define ========================================== @@ -19,7 +20,7 @@ // Short name. #define NAME_LENGTH 5 #define NAME_HEADER 0x60 // Name is 6 bytes long (1 byte GAP code + 5 bytes data). -#define NAME_GAP_CODE 0x10 +#define NAME_GAP_CODE 0x10 // LC frequency codes (coarse+mid+fine). #define LC_FREQCODES_LENGTH 2 @@ -36,10 +37,17 @@ #define TEMP_HEADER 0xC0 // Temperature is 3 bytes long (1 byte GAP code + 2 bytes data). #define TEMP_GAP_CODE 0x83 // Custom GAP code for temperature (0xC1 LSB first). +// Custom data. +#define CUSTOM_DATA_LENGTH 4 +#define CUSTOM_DATA_HEADER 0xA0 // Custom data is 5 bytes long (1 byte GAP code + 4 bytes data). +#define CUSTOM_DATA_GAP_CODE 0x83 // Custom GAP code for custom data (0xC1 LSB first) - same as temperature. + #define ADVA_LENGTH 6 // Advertiser address is 6 bytes long. #define PDU_LENGTH 39 // 2 byte PDU header + 37 bytes PDU. #define CRC_LENGTH 3 // CRC is 3 bytes long. +#define MAX_DATA_LENGTH 31 // Maximum data length is 31 bytes. + //=========================== typedef ========================================= //=========================== variables ======================================= @@ -53,6 +61,17 @@ void ble_gen_packet(void); void ble_gen_test_packet(void); void ble_set_AdvA(uint8_t *AdvA); void ble_set_channel(uint8_t channel); +void ble_set_name_tx_en(bool name_tx_en); +void ble_set_name(char *name); +void ble_set_lc_freq_codes_tx_en(bool lc_freq_codes_tx_en); +void ble_set_lc_freq_codes(uint16_t lc_freq_codes); +void ble_set_counters_tx_en(bool counters_tx_en); +void ble_set_count_2M(uint32_t count_2M); +void ble_set_count_32k(uint32_t count_32k); +void ble_set_temp_tx_en(bool temp_tx_en); +void ble_set_temp(double temp); +void ble_set_data_tx_en(bool data_tx_en); +void ble_set_data(uint8_t *data); void ble_transmit(void); #endif From 9f3fb4c919ccd0aea46b4f947f89bcfc9700b44d Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Thu, 13 Feb 2020 14:02:46 -0800 Subject: [PATCH 03/26] Add BLE TX application --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 0 -> 15500 bytes .../applications/ble_tx/Objects/ble_tx.hex | 972 ++++++++ scm_v3c/applications/ble_tx/ble_tx.c | 157 ++ scm_v3c/applications/ble_tx/ble_tx.uvoptx | 440 ++++ scm_v3c/applications/ble_tx/ble_tx.uvprojx | 549 +++++ .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15828 -> 15840 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 1954 ++++++++--------- .../ble_tx_154_rx/ble_tx_154_rx.c | 13 +- 8 files changed, 3103 insertions(+), 982 deletions(-) create mode 100644 scm_v3c/applications/ble_tx/Objects/ble_tx.bin create mode 100644 scm_v3c/applications/ble_tx/Objects/ble_tx.hex create mode 100644 scm_v3c/applications/ble_tx/ble_tx.c create mode 100644 scm_v3c/applications/ble_tx/ble_tx.uvoptx create mode 100644 scm_v3c/applications/ble_tx/ble_tx.uvprojx diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin new file mode 100644 index 0000000000000000000000000000000000000000..ec8f59b800ab42f222229fce36422f2ce5866127 GIT binary patch literal 15500 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 + +#include "scm3c_hw_interface.h" +#include "memory_map.h" +#include "ble.h" +#include "rftimer.h" +#include "radio.h" +#include "optical.h" + +//=========================== defines ========================================= + +#define CRC_VALUE (*((unsigned int *) 0x0000FFFC)) +#define CODE_LENGTH (*((unsigned int *) 0x0000FFF8)) + +#define TIMER_PERIOD 50000 ///< 500 = 1ms@500kHz + +#define BLE_CALIBRATE_LC false +#define BLE_SWEEP_FINE true + +//=========================== variables ======================================= + +typedef struct { + uint8_t tx_coarse; + uint8_t tx_mid; + uint8_t tx_fine; + + bool txNext; +} app_vars_t; + +app_vars_t app_vars; + +//=========================== prototypes ====================================== + +void cb_timer(void); + +//=========================== main ============================================ + +int main(void) { + + uint32_t calc_crc; + + memset(&app_vars, 0, sizeof(app_vars_t)); + + printf("Initializing..."); + + // Set up mote configuration + // This function handles all the analog scan chain setup + initialize_mote(); + ble_init_tx(); + + rftimer_set_callback(cb_timer); + + // Disable interrupts for the radio and rftimer + radio_disable_interrupts(); + rftimer_disable_interrupts(); + + // Check CRC to ensure there were no errors during optical programming + printf("\r\n-------------------\r\n"); + printf("Validating program integrity..."); + + calc_crc = crc32c(0x0000,CODE_LENGTH); + + if (calc_crc == CRC_VALUE){ + printf("CRC OK\r\n"); + } else { + printf("\r\nProgramming Error - CRC DOES NOT MATCH - Halting Execution\r\n"); + while(1); + } + + // Debug output + // printf("\r\nCode length is %u bytes",code_length); + // printf("\r\nCRC calculated by SCM is: 0x%X",calc_crc); + + //printf("done\r\n"); + + // After bootloading the next thing that happens is frequency calibration using optical + printf("Calibrating frequencies...\r\n"); + + // Initial frequency calibration will tune the frequencies for HCLK, the RX/TX chip clocks, and the LO + +#if BLE_CALIBRATE_LC + optical_enableLCCalibration(); + + // Turn on LO, DIV, PA + ANALOG_CFG_REG__10 = 0x68; + + // Turn off polyphase and disable mixer + ANALOG_CFG_REG__16 = 0x6; + + // For TX, LC target freq = 2.402G - 0.25M = 2.40175 GHz. + optical_setLCTarget(250020); +#endif + + // Enable optical SFD interrupt for optical calibration + optical_enable(); + + // Wait for optical cal to finish + while(!optical_getCalibrationFinished()); + + printf("Cal complete\r\n"); + + // Disable static divider to save power + divProgram(480, 0, 0); + + // Configure coarse, mid, and fine codes for TX. +#if BLE_CALIBRATE_LC + app_vars.tx_coarse = optical_getLCCoarse(); + app_vars.tx_mid = optical_getLCMid(); + app_vars.tx_fine = optical_getLCFine(); +#else + // CHANGE THESE VALUES AFTER LC CALIBRATION. + app_vars.tx_coarse = 23; + app_vars.tx_mid = 12; + app_vars.tx_fine = 15; +#endif + + ble_gen_test_packet(); + + while (1) { + rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); + app_vars.txNext = false; + while (!app_vars.txNext); + } +} + +//=========================== public ========================================== + +//=========================== private ========================================= + +void cb_timer(void) { + int tx_fine, t; + app_vars.txNext = true; + +#if BLE_SWEEP_FINE + for (tx_fine = 0; tx_fine < 32; ++tx_fine) { + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); + } +#else + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); +#endif +} diff --git a/scm_v3c/applications/ble_tx/ble_tx.uvoptx b/scm_v3c/applications/ble_tx/ble_tx.uvoptx new file mode 100644 index 00000000..2600d9aa --- /dev/null +++ b/scm_v3c/applications/ble_tx/ble_tx.uvoptx @@ -0,0 +1,440 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ble_tx + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + app + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ble_tx.c + ble_tx.c + 0 + 0 + + + + + drv + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + ..\..\cm0dsasm.s + cm0dsasm.s + 0 + 0 + + + 2 + 3 + 5 + 0 + 0 + 0 + ..\..\Memory_Map.h + Memory_Map.h + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\retarget.c + retarget.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\optical.c + optical.c + 0 + 0 + + + 2 + 6 + 5 + 0 + 0 + 0 + ..\..\optical.h + optical.h + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\radio.c + radio.c + 0 + 0 + + + 2 + 8 + 5 + 0 + 0 + 0 + ..\..\radio.h + radio.h + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\adc.c + adc.c + 0 + 0 + + + 2 + 10 + 5 + 0 + 0 + 0 + ..\..\adc.h + adc.h + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\gpio.c + gpio.c + 0 + 0 + + + 2 + 12 + 5 + 0 + 0 + 0 + ..\..\gpio.h + gpio.h + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ..\..\uart.c + uart.c + 0 + 0 + + + 2 + 14 + 5 + 0 + 0 + 0 + ..\..\uart.h + uart.h + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ..\..\rftimer.c + rftimer.c + 0 + 0 + + + 2 + 16 + 5 + 0 + 0 + 0 + ..\..\rftimer.h + rftimer.h + 0 + 0 + + + 2 + 17 + 5 + 0 + 0 + 0 + ..\..\scum_defs.h + scum_defs.h + 0 + 0 + + + 2 + 18 + 5 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.h + scm3c_hw_interface.h + 0 + 0 + + + 2 + 19 + 1 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.c + scm3c_hw_interface.c + 0 + 0 + + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + + + + diff --git a/scm_v3c/applications/ble_tx/ble_tx.uvprojx b/scm_v3c/applications/ble_tx/ble_tx.uvprojx new file mode 100644 index 00000000..38764fd1 --- /dev/null +++ b/scm_v3c/applications/ble_tx/ble_tx.uvprojx @@ -0,0 +1,549 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_tx + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.0 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + ble_tx + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin .\Objects\ble_tx.axf -o .\Objects\ble_tx.bin + fromelf -cvf .\Objects\ble_tx.axf -o .\Objects\disasm.txt + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 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 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ../../ + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + freq_sweep_rx.sct + + + + + + + + + + + app + + + ble_tx.c + 1 + .\ble_tx.c + + + + + drv + + + cm0dsasm.s + 2 + ..\..\cm0dsasm.s + + + Memory_Map.h + 5 + ..\..\Memory_Map.h + + + retarget.c + 1 + ..\..\retarget.c + + + optical.c + 1 + ..\..\optical.c + + + optical.h + 5 + ..\..\optical.h + + + radio.c + 1 + ..\..\radio.c + + + radio.h + 5 + ..\..\radio.h + + + adc.c + 1 + ..\..\adc.c + + + adc.h + 5 + ..\..\adc.h + + + gpio.c + 1 + ..\..\gpio.c + + + gpio.h + 5 + ..\..\gpio.h + + + uart.c + 1 + ..\..\uart.c + + + uart.h + 5 + ..\..\uart.h + + + rftimer.c + 1 + ..\..\rftimer.c + + + rftimer.h + 5 + ..\..\rftimer.h + + + scum_defs.h + 5 + ..\..\scum_defs.h + + + scm3c_hw_interface.h + 5 + ..\..\scm3c_hw_interface.h + + + scm3c_hw_interface.c + 1 + ..\..\scm3c_hw_interface.c + + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + + + + + + + + + + + + + RTE\CMSIS\RTX_Conf_CM.c + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + RTE\Drivers\NAND_MemBus_Config.h + + + + + + RTE\Drivers\OneNAND_Config.h + + + + + + RTE\File_System\FS_Config.c + + + + + + RTE\File_System\FS_Config_RAM.h + + + + + + + +
diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin index a4ac2ed45193010a70f805030b25be28f15d54d4..0f142b49a110eb2e06ed675c7cce6ca28c70d533 100644 GIT binary patch delta 702 zcmXw1T}V@57=FKVj$&rDX*sN^=S+o3QB7|aDK=N9GZV>wLnH|)MXXuOj>-Nmin?<1 zT$I#>6h+XDaFn`e=qRY5Vk58G&APJa!p|t&(zCBOsRy3-dA`5*efhp`WhypAK8#qJhYnfV%1yof;_C8u(~UPwr~YR!cL%TTR?f^f+9MXgQfPmB+zdL*bgTl zNWU5bp4)?f+V6QgSRjY|9)Dj;vA_3B=y*yc8aKm7g-DkYa)wlhbfCIbP9>9l*v2Aj z!!buc<%r19_c@SSutfZNP#Sdd^jQYzEEayU1=2}{jOWjrV#Mb16pnjOKaiU6Bu|60 znRZMRWgKn&&CwUR4h3lKR{Ot5Xg?;IHVD0(X~TVf)`{^3JEw$4K_ql{R*-v?<Ee8^W9K#U{RIVF_p=3--;#MV#+rV8fTG5WgHH^j8jOmtm0( zD8yGNxqQV^*k_UAz9PMZFDcqpm=$eLJ)&b6UsBNP_snu+LH}T`;>crdy=0mU=;6Ir zI8vjnm%506u}o{VsHH#gr*tFg5ql8N%i}^pqyE`ay`QK$b2tde(;f9AJBUZS-|)^H SY25yC;#ri}$h78bJpTtBj1w3D delta 676 zcmXw1Ur19?82`?>Q*0~RW_huOyLTEaib8!^G&3Dt?-cxRL_r!BSrSfcI+OjQKO_}- zy$=!eAVDPcpmp=9h7KYuh#dG5zKo=-w}UU+a(A~csSkeN?{~iMobUTM=cFfACyK!i z!Yh+vJE{nlV{c6WmLh^`c{wo0G^!J2R`I1|jj=T~$w!`sfWg z86eVRM0V7O9OHANa(pxv0e5){s`jQwnr)GluuGyWn+wP^k_=Z$Lo<|Z8gKy8*Bm4A z?Z&M&%9f3b4&m^|S^&G=nKwz7M$}o~3A+yCwx}T?hA( z6^OEL`dRU+ycBVqt%{r`aCvZiyXV3lWu0bBbxILymc3A((1I_JwGOjQ8Le zb4ClUDf?U?0%acxAU0u(py`R|#giP1 zs@Ya7bkCqn`c2vELYoY%GT-{o6V`)8CUwFFvMso8%xFh{-8e1B2SFgLBxjPkyA!rxl zL0(J-Et-=n-MPz}6I`=?p?Uyc&#cw&eoV=%_SIHN$xBr)eMtJX2YZGnIi%L} Date: Sat, 15 Feb 2020 16:43:52 -0800 Subject: [PATCH 04/26] Add delay for DIV to turn on --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15500 -> 15524 bytes .../applications/ble_tx/Objects/ble_tx.hex | 742 +++++++++--------- scm_v3c/applications/ble_tx/ble_tx.c | 2 +- scm_v3c/ble.c | 9 +- scm_v3c/scm3c_hw_interface.c | 53 +- 5 files changed, 406 insertions(+), 400 deletions(-) diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin index ec8f59b800ab42f222229fce36422f2ce5866127..a74ff3a6b12bf4e49592dc21657c4608e5b9a909 100644 GIT binary patch delta 2086 zcmZ9Ndr%Wc9LIMr!CX*kB1J%hxdeeQpeCZNN@t9mTrLO|Eo$wx^334i0@`t&YTuPBA4us!*M&(Y8*@KRC8!EYs=L*TG5d`b)faoZigt_w)Ph z?r*=@WG{OfK51w5@S-2aXI8n zkXuS3Nn3GBVDTgSFfJm4;}77?qZXgY*EM5UTkz7r6;R2G7##+pyXusQnS~gmkX+!-!%c-K@ul~}G4q#C~8t|o^ z(tG66HAym$)-mo8FTI-P!s{LG-fEgd>+X3EvNU@evUhkMS~Ij>XmmBi(3)XZc>Qf} zC(QbT)MnIWUh~qG*Z5dp%cxTN{ju3pj!2DQn!O6S1O~NSAtM>NReiiF4a*mJw?&oi z$e1|~qr)K~_$_!j9{1AqKQBFTFJD3S2zWWdyPeIeyTMI2xakHr-I|-P<8C@g)0ATT zG3lE!*?JIaixgccz|kji{>&zJCEl^9td|f81BO zyp?YRf2DFG^9I!L!zYTUvA#z|w)vok$UbY~j2EAr4YiSDYNXWLSEsj|*^-h-t(ohq zqwKA$C(ey7<63OLVlcBT!AvH;OR|_8>?CE(WLs`Y<4kkqP(EUIy9hjtcoOStIQ9rdgQe6|thd1)_doEP)=z|;GNR#q1u z-9CU2p=~}Q*p5D?ySAu5c0#%i_Q%p2wV7Oh-B|WUZS3c(=a4OS3O7|f^t}q!E}<%Q z1eV!ddc1+`%-)HEWPDB=t|VXP*ydJ7lbzu%)Z*Z%14vvMP2wD!4yYo!0J+n`>ESL6 zW3kMlDCI!?sOLenkR&+%!eMgPQDuB@G~Z_Y0`7m{h1`oc>xZbJbxaFl)_DzWV?IFQ zOagGGR$y^n8&3L}N8(vI!*1hzmY;}}U+BN!O{~baGhCJBQr9`) zWQ|V)pV9am;KLes1Mk=PB=F-J2Z2v&+y(5^_$cr}jSmC&Y1|3?tDW)3H~tI)q78Ha zZ_&6N_=LtE0WZ+_1KLBigI95#$)zcawG8CyrUd6jX_sGxjjiAl)GrY;ENJM^`&j)=^Ud~Sg-7Wte zFIz7!Q&>GOs zL08N3Z8WDy#}q?cH$_XKj63=|^u_Y?ahv7xWBlkG1zrxb`1_zdyu@a~wyNZUEplNC z_;<9?tebWtJtzY$55@(L5JU{la*)m$=HkpUMUv X7xtOUpFpvPsetYrv`jL;d~Ad?kQ z2bpf8drka-CMb)_#HiFx$E;N69O#l+&0I467)ut7VLwhcJveA@PwUONUGl!)&-1+R z`@G-2m-qTv{hs>Pi*ajm5!&Xx%*`EAn84QQREQGq0@VR&#Kd7HfLJDw=1&VSekPz1 ze;YIMiXwigs`TL>2}0M(*)IsZjUW2;xz6p5R+Tc_|zux3y+`&i6?B0OK#ny>Z3H*<&jN*0!TQuO8P|!RltROgDs$ z#7-~6e~@?SA>2SJ^r!JPl3-}YO{C3GjIa6b8~j-Rv%J)dPf+3jIXkIR`QDhE!T9yCs}o{8|BPra-?Lq3|aN_T$jF)TSphNdjT zUSdzo$2Furk;8?+Q^@T^JI*3;Nt`Ke4DENAP-~5eoi#MzGF{BOd;6z$bO4LPqdr&C zMQ#2_(fari0adY%VJE$g=7ZH%M_&caqpC;FBOJ{=gzR5}0IdaDA2hlGVrVTeD_H%| z*$K1mlgiZE^gB+v?2ZuaD_KQK9vz=aWr@@Xrny^?i(^r1h>WC8FYgl+X;{7{I82K4 zw~X0uV01X(_Fn}rzL=M@|MPMw=A{d=r@+f8!C`Az*8^^Pz)cUh=~3N$8FO=#?3lU? zA13`%Q|#?fTcqeRHypiz_oVOOUc);J+iKg2(j84j9hK>PTkUwRqml`DEKOXArhz1; zmDpFy+ri^XxiRLkM1Egr1h2(%BfAaidEnQDl*Q2ZD##p-PLcy@x!F}O&4qoCby}#< z*k7(F*{Fr31SvZ?4XH(49g2vg#vd|!9 zO%G+L71E!nz>?i;iYxhP9i3$o)R`Pxb#hQ+T^pLDu40~975{Yp6_{;^&8A_VlXjxU zg;9S`JbkM3a#U<|*C3f-c4-quMImnU>3R4^I55vNm!^aJ;Xg;l__aJTM-Sq@qJ{q3 z2v+Z;A|3UuwAi({nlxuN<4!U$s|}ZulUe2krQrlyup6~ndFlWXi^K7}mDd0X;U&nC z6ig0wV;GBO7KbS-8bG~Iq8t)u{S%)fkF4eT9b+@i`V&a>_|{IpfiwETI`6nv#8x?V zZQ~9iF*AZJ8w;@)wIZ=6tnpHycYVuewBh*M0us;5sTMQuGTkK7%v{f9r=c{{!t&*& z@47DmC#d`t@D-IW0C%bE2i~u8H}HIwPXk|2xeM5)awqT+m5%}UtK0$ntA+K%Hg1Q2 zr~`+Ax2k*)_`J&dfS0Je7x*oey}%)rKL(zq@^0XN4YdF>0jll;r^9Y==hYRso9aGv zU#Yw9Cbkz09uK5j-gf6VfcAk#Uu+zlQN2)PLt@7W6L<$k=*{l@Eucb^JAZRjA$B{3 z_3r#yXAAT-kZXZlbwSAnW`jF_6U2QGN2_U}+InFlRNDsC82<>{h$2$ATrNbUc8^>J z7cC+klHY`j7LoSL4QvpG_sXveC^aIr%Buwj=pOl1p%Ju2E)^JCL?ZGl!c5RlV?$}E7B%ek;>)h_7Q29qOhGXXPvCD>pusm0XPo2NnUKG z`G|BOqKj!=xQLBN`Qi7VFOuJg8Cxa4D2(Mqq!sdPVH9*Ze8udrks{^57B<)d{vORV z=b#-(3(7*Xl9Sn~dULV044KmhQ%NX0#he5Yo}md*8CGsGFb$dz)yz2F&slkf#M_cn zbm5JxAy(a|plN8(Wuk?h@Ru5v=8{622T$|eu-P#_>kHe@($5>i$V%NrY>;yYSRTGd mNOPTBS-1talli&X_z|hh?KkEuLeYmUh3+b}J!HwEihlsUA2YZB diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.hex b/scm_v3c/applications/ble_tx/Objects/ble_tx.hex index acc92318..188de81a 100644 --- a/scm_v3c/applications/ble_tx/Objects/ble_tx.hex +++ b/scm_v3c/applications/ble_tx/Objects/ble_tx.hex @@ -10,32 +10,32 @@ :1000800000F002F800F050F80CA030C8083824182E :100090002D18A246671EAB4654465D46AC4201D1C0 :1000A00000F042F87E460F3E0FCCB64601263342A2 -:1000B00000D0FB1AA246AB46334318475C3B000016 -:1000C0007C3B0000103A02D378C878C1FAD85207B6 +:1000B00000D0FB1AA246AB4633431847743B0000FE +:1000C000943B0000103A02D378C878C1FAD852079E :1000D00001D330C830C101D504680C6070470000FE :1000E0000023002400250026103A01D378C1FBD854 :1000F000520700D330C100D50B60704710B564299A -:1001000002D102F0EBFF10BD752902D102F0E6FF2B -:1001100010BD782902D103F017F810BD002010BDE2 -:100120001FB51FBD10B510BD03F0ECFC1146FFF765 -:10013000F7FF00F044F803F004FD03B4FFF7F2FF0B +:1001000002D102F0F7FF10BD752902D102F0F2FF13 +:1001100010BD782902D103F023F810BD002010BDD6 +:100120001FB51FBD10B510BD03F0F8FC1146FFF759 +:10013000F7FF00F044F803F010FD03B4FFF7F2FFFF :1001400003BC00F0C4F9000070B505460C46164625 :1001500002E00FCC0FC5103E102EFAD2082E02D3AB :1001600003CC03C5083E042E07D301CC01C5361FBE :1001700003E021782970641C6D1C761EF9D270BDD5 :1001800070B501203A49C870002415E0384A51780A :100190001078224602F05DF935484278017823460E -:1001A00034A002F057FF002500E06D1C384885425E -:1001B000FBDB02F02DFF641C202CE7DB70BD04216B -:1001C0002B4803F04AF833A002F044FF02F0FFF995 +:1001A00034A002F063FF002500E06D1C3848854252 +:1001B000FBDB02F034FF641C202CE7DB70BD042164 +:1001C0002B4803F056F833A002F050FF02F0FFF97D :1001D00002F06BFE334801F014F800F048FD01F026 -:1001E00027F831A002F036FF35A002F033FF3C487B +:1001E00027F831A002F042FF35A002F03FFF3C4863 :1001F000816B002001F0C7F804463948C06BA0426B -:1002000003D138A002F026FF04E039A002F022FF5B -:1002100000BFFEE746A002F01DFF00F0A6F900BFF8 -:1002200000F08BF90028FBD049A002F013FF002258 -:100230001146FF20E13001F0B0FE17200C49087094 -:100240000C2048700F20887002F04CFD0EE000F08A +:1002000003D138A002F032FF04E039A002F02EFF43 +:1002100000BFFEE746A002F029FF00F0A6F900BFEC +:1002200000F08BF90028FBD049A002F01FFF00224C +:100230001146FF20E13001F0B1FE17200C49087093 +:100240000B2048700F20887002F04CFD0EE000F08B :10025000EBFF43494518284600F0DEFF0020044923 :10026000C87000BF0248C0780028FBD0EFE700004C :10027000000000205472616E736D697474696E675A @@ -76,9 +76,9 @@ :1004A0005124240623781846FFF7EEFF184610BDA6 :1004B00010B50446FFF7F3FF10BD0146002070475A :1004C00010B5044604492046FFF7E2FF10BD03A023 -:1004D00002F0C0FD00BFFEE7040000200D0A5445F5 +:1004D00002F0CCFD00BFFEE7040000200D0A5445E9 :1004E000535420444F4E450D0A00000010B52821FA -:1004F000E44802F0B4FEE448E24908621721E1480A +:1004F000E44802F0C0FEE448E24908621721E148FE :10050000203001710C2141710F21817110BD10B596 :100510000120DC4988700020C87017200871002075 :1005200048710F2088710020C04388600B469A797B @@ -109,13 +109,13 @@ :1006B00074498968884210D27248006A201A7149C8 :1006C0008860084601792030017120384179203056 :1006D000417120388179203081716A4883682146D0 -:1006E000026A77A002F0B6FC66488079401C654932 +:1006E000026A77A002F0C2FC66488079401C654926 :1006F0008871084680790F2825DD0F20887108460B :100700004079401C4871084640791F281BDD0020B5 :10071000487108460079401C08710846007919287C :1007200011DD00E075E00120C87000221146FF20B5 -:10073000E13001F032FC534820308379427901796D -:100740006AA002F087FC4F48C078002806D14D4BC4 +:10073000E13001F033FC534820308379427901796C +:100740006AA002F093FC4F48C078002806D14D4BB8 :100750009A795979187901F07CFE06E0494B2033EB :100760009A795979187901F074FE6848854203D95D :100770000A98401C0A900BE06548854203D9099805 @@ -130,11 +130,11 @@ :1008000000F08AFD069800F08BFD01F0F3FD01F089 :10081000EBFD06990D9802970394059104900999B0 :100820000A982B46019100903DA00C9A0E9902F077 -:1008300011FC14480078192822DB1248807800281F +:100830001DFC14480078192822DB12488078002813 :1008400003D01048C07800281AD00120C0020F49F8 :100850008031086000200B490870012048700F9813 :10086000C860084605610D984861084684610E9885 -:10087000C86137A002F0EEFB00202921490608607C +:10087000C86137A002F0FAFB002029214906086070 :1008800011B0F0BD5400002094D1030000E100E05D :1008900000000452000010520000145200001852D0 :1008A00000001C520000285200002C520000305260 @@ -149,7 +149,7 @@ :100930002D25642C25642C25642020204C433D2546 :100940006420202049463D25642D25640D0A0000C1 :10095000646F6E650D0A000010B5FF219931F748EC -:1009600002F07DFCF649F7484165C91F41610F213E +:1009600002F089FCF649F7484165C91F41610F2132 :10097000803081824020F44908601F208905486149 :100980000820086210BDED4908607047EB494860D7 :100990007047EA4988607047E849C860704710208E @@ -160,7 +160,7 @@ :1009E00002D0022C0AD104E0D649087CFFF7E6FFCA :1009F00005E0D449087CFFF7D6FF00E000BF00BF48 :100A000070BD70B505460C4622462946CB481030CD -:100A100002F0C6FBC94810300121890788600846EA +:100A100002F0D2FBC94810300121890788600846DE :100A2000C4600120086070BD2820C8490860062005 :100A3000C7490860704702204107086070471820C6 :100A4000C24908600120C2490860BE48703841218F @@ -168,12 +168,12 @@ :100A6000BC4908600520C002086004200107086036 :100A70007047F8B507460C4615461E463120C04360 :100A80003070AE488030007C20702078A84205DCB1 -:100A90002278AC496F39384602F082FBF8BD01205C +:100A90002278AC496F39384602F08EFBF8BD012050 :100AA0004003AC4908600020A84908607047F7B5CA :100AB00084B000BF00F010FC019000F011FC009029 :100AC0009E488030007C02909E488030C08A401C46 :100AD00081B29C488030C1820025029AD1009E4B91 -:100AE000069A5A43104602F0C6FB0390092407E019 +:100AE000069A5A43104602F0D2FB0390092407E00D :100AF00060009A49095A601C4000984A1152641ECD :100B0000002CF5DA039800B294490880002407E02D :100B100060009249085E9249095D48434519641C8A @@ -200,14 +200,14 @@ :100C600008601C2089054861082008627047402000 :100C700035498031086070473248407C704710B574 :100C800001F00FFB10BD39480068704738480088F4 -:100C900000B27047F1B5A2B0402112A802F0DFFA0D -:100CA000442101A802F0DBFA264922984861002479 +:100C900000B27047F1B5A2B0402112A802F0EBFA01 +:100CA000442101A802F0E7FA26492298486100246D :100CB00078E0A20023491431885801F07BFD002020 :100CC0002921490608602B480860012700E07F1CA5 :100CD0007D20C0018742FAD37F2029214906086080 :100CE0001A4805682448066830044019A10012AA71 :100CF0005050611C4900124AFE328918129A514321 -:100D000008460F49FE3102F0ACFA611C890001AAC5 +:100D000008460F49FE3102F0B8FA611C890001AAB9 :100D10005050002C3BDDA00012A90958A00010582B :100D2000143881422AD2A100064814304058401C91 :100D3000A20004491431885029E000002402002058 @@ -219,15 +219,15 @@ :100D900008D1A100B94840582830611C8A00B749E1 :100DA0008850641C102C84DB002400E0641C102C90 :100DB000FCDB129823B0F0BDF0B5B3B005460E468B -:100DC0000024402121A802F04AFA442110A802F090 -:100DD00046FA2022AA4908A8FFF7B6F92022A84916 +:100DC0000024402121A802F056FA442110A802F084 +:100DD00052FA2022AA4908A8FFF7B6F92022A8490A :100DE00020316846FFF7B0F9A448143845654FE054 :100DF000A200A2494031885801F0DCFC00202921E2 :100E0000490608609F4808600120319002E031984F :100E1000401C31907D21C90131988842F7DB7F2049 :100E20002921490608609848076898480068329068 :100E300032980004C019A10021AA505062006B46EC -:100E4000995A620008AB9A5A7243104602F009FAA6 +:100E4000995A620008AB9A5A7243104602F015FA9A :100E5000A10010AA5050A00021A90958A0001058C4 :100E6000401F814209D2A100844840304058401CB4 :100E7000A2008249403188500AE0A1007F484030FA @@ -253,7 +253,7 @@ :100FB0003D490860084600683C4908603A480068B6 :100FC000202188433849086008460068374908608E :100FD000334800680A281ED1012406E0A000314AE7 -:100FE000115833A002F036F8641C0A2CF6D3FF2007 +:100FE000115833A002F042F8641C0A2CF6D3FF20FB :100FF00001303149086040002F49803908600020E5 :1010000027490860002400E0641C2C488442FBD37C :101010002B482C49C86070BD10B5234A1268602364 @@ -263,16 +263,16 @@ :101050001A6052001C4B1A600F4A10680F4A116840 :101060000A0412180E4B1B689B000E4CE2500C4AEF :101070001268521C0A4B1A6010BD00003803002091 -:101080005C3B0000FF3F00000000285200002C5293 +:10108000743B0000FF3F00000000285200002C527B :10109000CB0300002402002000004452000048520C :1010A0000C0000207C0000201800002000000C52E2 :1010B00025580D0A0000000080E100E01027000024 :1010C0000400FA0500ED00E080E200E010B502A0A7 -:1010D00001F0C0FF10BD000061646320696E74659B +:1010D00001F0CCFF10BD000061646320696E74658F :1010E0007272757074207472696767657265640DD9 -:1010F0000A00000010B509A001F0ACFF10BD10B54A -:1011000010A001F0A7FF10BD10B518A001F0A2FFBC -:1011100010BD10B51FA001F09DFF10BD457874658E +:1010F0000A00000010B509A001F0B8FF10BD10B53E +:1011000010A001F0B3FF10BD10B518A001F0AEFFA4 +:1011100010BD10B51FA001F0A9FF10BD4578746582 :10112000726E616C20496E746572727570742047BE :1011300050494F33207472696767657265640D0AA0 :101140000000000045787465726E616C20496E7411 @@ -283,7 +283,7 @@ :101190000000000045787465726E616C20496E74C1 :1011A000657272757074204750494F3130207472E7 :1011B000696767657265640D0A00000010B502A0DA -:1011C00001F048FF10BD0000756172742072782034 +:1011C00001F054FF10BD0000756172742072782028 :1011D000696E746572727570742074726967676580 :1011E0007265640D0A0000001E4800210160416024 :1011F0008160C160481E212149068860072008607F @@ -294,7 +294,7 @@ :10124000704710B50948046BE007C00F002806D0AE :1012500004480068002802D0024908688047034813 :10126000446310BDBC03002000E100E040000042E8 -:1012700010B5CC21FE4801F0F2FF1121FC4880306E +:1012700010B5CC21FE4801F0FEFF1121FC48803062 :10128000C16203210163152141630F218163C163A1 :10129000F849016416214164122181641422F6493F :1012A0001830FEF751FF10BDF1488030C06A70471A @@ -358,38 +358,38 @@ :10164000EBFEFF20FB30FFF7D8FEFF20FC30FFF75A :10165000E3FEFF20FD30FFF7D0FEFF20FE30FFF756 :10166000DBFEFF20FF30FFF7D7FE094812E0000045 -:10167000CC030020006A18009C3B000055555555CE -:10168000333333330F0F0F0FB71DC104B03B0000CE +:10167000CC030020006A1800B43B000055555555B6 +:10168000333333330F0F0F0FB71DC104C83B0000B6 :10169000FF010000FFF7C0FE01204002FFF7BCFE83 :1016A000F848FFF7AAFEF748401CFFF7A6FEF548EA :1016B000801CFFF7B1FE81208000FFF7ADFE002007 :1016C000F1490860F148FFF7A7FE00BDF3B581B00E :1016D0000F4600200090019EB800019E82193146FD -:1016E000EBA001F0B7FCF6A001F0B4FC00240CE084 +:1016E000EBA001F0C3FCF6A001F0C0FC00240CE06C :1016F000002507E0A00030580121A9408843A1003F :1017000070506D1C202DF5DB641CBC42F0D300240E :101710001DE0002518E0A00030580121A940084034 :10172000002809D0A00033582A462146EAA001F03B -:1017300091FC0098401C0090A00030580121A94065 +:101730009DFC0098401C0090A00030580121A94059 :101740000843A10070506D1C202DE4DB641CBC42DA :10175000DFD300241FE000251AE0A000305801214B :10176000A94008400121A940884209D0A00033586F -:101770002A462146E4A001F06DFC0098401C009030 +:101770002A462146E4A001F079FC0098401C009024 :10178000A00030580121A9408843A10070506D1C71 :10179000202DE2DB641CBC42DDD37C1E1DE01F2536 :1017A00018E0A00030580121A9400840002809D0C5 -:1017B000A00033582A462146DFA001F04BFC0098D8 +:1017B000A00033582A462146DFA001F057FC0098CC :1017C000401C0090A00030580121A9400843A1000E :1017D00070506D1E002DE4DA641E002CDFDA7C1ED2 :1017E0001FE01F251AE0A00030580121A940084041 :1017F0000121A940884209D0A00033582A46214639 -:10180000D9A001F027FC0098401C0090A00030589F +:10180000D9A001F033FC0098401C0090A000305893 :101810000121A9408843A10070506D1E002DE2DA1D :10182000641E002CDDDA002416E0002511E0A00083 :1018300030580121A9400840002809D0A0003358A1 -:101840002A462146D4A001F005FC0098401C0090D7 +:101840002A462146D4A001F011FC0098401C0090CB :101850006D1C202DEBDB641CBC42E6D3DAA00099A2 -:1018600001F0F8FB0098FEBD30B50546002411E0FC +:1018600001F004FC0098FEBD30B50546002411E0EF :1018700028462041C007C00F002805D02046FF3071 :10188000ED30FFF7C9FD04E02046FF30ED30FFF7F3 :10189000B4FD641C062CEBD930BD30B505460024E0 @@ -465,75 +465,75 @@ :101CF000002411E03046E040C007C00F002805D0A6 :101D0000FF211631081BFFF787FB04E0FF21163186 :101D1000081BFFF772FB641C052CEBDD70BDF8B5EA -:101D2000F94C650DF948006A2040F84908620846F8 -:101D3000C06B2840C8630846006AF549A1430843C0 -:101D4000F2490862F3484862F3488862F348C8627F -:101D5000F3480863F3484863F34888630846C06B58 -:101D6000F249A9430843E949C863FF20A930FFF7B6 +:101D2000FA4C650DFA48006A2040F94908620846F5 +:101D3000C06B2840C8630846006AF649A1430843BF +:101D4000F3490862F4484862F4488862F448C8627B +:101D5000F4480863F4484863F44888630846C06B55 +:101D6000F349A9430843EA49C863FF20A930FFF7B4 :101D700044FBFF20AA30FFF74FFB3F210846FFF747 :101D80009EFF07210846FFF75EFE00210846FFF789 :101D900036FF00210846FFF762FF0020FFF72DFB0A :101DA0000120FFF72AFB6020FFF727FBFF20103000 :101DB000FFF723FBFF20EC30FFF71FFB6420FFF74A :101DC0001CFB6520FFF719FB6620FFF716FB61205F -:101DD000FFF722FB0020D6490860D648D6490860A4 +:101DD000FFF722FB0020D7490860D748D7490860A1 :101DE0006720FFF719FB0B260227F002F9010843D1 -:101DF000D249086005200090D14900980860FF2072 +:101DF000D349086005200090D24900980860FF2070 :101E00000E30FFF7FAFAFF200F30FFF7F6FA002046 :101E1000FFF72AFDF020FFF7FFFA5D20C000FFF773 -:101E2000FBFAC848FFF7F8FAC648401CFFF7F4FA77 -:101E30000120C5490860F8BD70B5C44C650DB348B4 -:101E4000006A2040B14908620846C06B2840C86358 -:101E50000846006ABE49A1430843AC490862AD4840 -:101E60004862AD4840308862BA48C862BA480863E0 -:101E7000BA484863BA4888630846C06BB949A94361 -:101E80000843A249C8630020FFF7C6FA0120FFF704 +:101E2000FBFAC948FFF7F8FAC748401CFFF7F4FA75 +:101E30000120C6490860F8BD70B5C54C650DB448B1 +:101E4000006A2040B24908620846C06B2840C86357 +:101E50000846006ABF49A1430843AD490862AE483D +:101E60004862AE4840308862BB48C862BB480863DD +:101E7000BB484863BB4888630846C06BBA49A9435E +:101E80000843A349C8630020FFF7C6FA0120FFF703 :101E9000C3FA0D20FFF792FD2620FFF7A6FD502084 :101EA000FFF7BAFDEE20FFF7B7FAEF20FFF7B4FA1D :101EB000FF200E30FFF7A1FAFF200F30FFF79DFA49 -:101EC0008420FFF7A9FA05269D4806600A21002014 +:101EC0008420FFF7A9FA05269E4806600A21002013 :101ED000FFF795FE0020FFF7C7FCF020FFF79CFA04 -:101EE00001204003A0490860F002086070BD10B5F1 -:101EF0000A467F2383435901844B9B6F9B4C2340AD -:101F0000824CA36723469B6F0B43A36710BD7F22C0 -:101F1000824351037D4A926F7F235B039A437B4B3D -:101F20009A671A46926F0A439A67704710B5F02372 -:101F3000034019090207754B9B6F1B091B01734C6A -:101F4000A36723469B6F0B43A3672346DB6F1B01ED -:101F50001B09E3672346DB6F1343E36710BD00B53E -:101F60007D20C000FFF758FA8148FFF755FA8048F6 -:101F7000401CFFF751FA7E48801CFFF74DFA802085 -:101F80007C4908607F20FFF7D1FF3F20FFF7BFFFAC -:101F900000217F20FFF7ABFF00BD70B50346002492 -:101FA00000200325AD021D402C010F252D031D40EF -:101FB0002D0B28433F252D011D4028439502284322 -:101FC000CD0228431D072D0C2843E5436A4E35609A -:101FD000C5436A4E356070BD002824D14B49C96F96 -:101FE00004221143494AD1671146C96F0222914325 -:101FF000464AD1671146803109680122D207114350 -:10200000424A803211604149C96F49084900803A0B -:10201000D1671146803109680722120711433B4AF4 -:1020200080321160F6E0012822D13849C96F0222BE -:102030001143364AD1671146C96F04229143334A8E -:10204000D167114680310968C20711432F4A803297 -:1020500011602E49C96F8143803AD16711468031A2 -:102060000968072212071143284A80321160D1E023 -:10207000022823D12549C96F04221143234AD1677D -:102080001146C96F02229143204AD167114680311F -:1020900009684A0052081D4980310A608039C96FB9 -:1020A00001221143194AD16711468031096807227C -:1020B00012071143154A80321160ABE003285FD14B -:1020C0001249C96F04221143104AD1671146C96FE2 -:1020D000022291430D4AD167114680310968C20737 -:1020E00011430A4A803211600849C96F4908490002 -:1020F000803AD167114680310968012292079143E5 -:10210000024A8032116085E00000FCFFCC03002011 -:10211000E0FF5040882142003100048881403B119B -:1021200002817E024448ED0300000160032EE0FFBF -:10213000000038520FA0000000003C5200000C527A -:1021400000002452E9020000000040520000FEFF9F -:10215000F0FF000081400C100281180044C87F018C -:10216000010001700008E0FF0000105217F0FFFFAF +:101EE00001204003A1490860F002086070BD10B5F0 +:101EF0000A467F2383435901854B9B6F7F246401EE +:101F0000A343834CA36723469B6F0B43A36710BD7A +:101F10007F22824351037E4A926F7F235B039A4361 +:101F20007B4B9A671A46926F0A439A67704710B5BF +:101F3000F023034019090207754B9B6F1B091B0116 +:101F4000734CA36723469B6F0B43A3672346DB6F4A +:101F50001B011B09E3672346DB6F1343E36710BDD7 +:101F600000B57D20C000FFF757FA8148FFF754FA0B +:101F70007F48401CFFF750FA7D48801CFFF74CFA61 +:101F800080207C4908607F20FFF7D1FF7F20FFF78A +:101F9000BFFF00213F20FFF7AAFF00BD70B5034639 +:101FA000002400200325AD021D402C010F252D0328 +:101FB0001D402D0B28433F252D011D402843950230 +:101FC0002843CD0228431D072D0C2843E5436A4EC4 +:101FD0003560C543694E356070BD002824D14C4939 +:101FE000C96F042211434A4AD1671146C96F0222C0 +:101FF0009143474AD1671146803109680122D207CF +:102000001143434A803211604149C96F4908490070 +:10201000803AD167114680310968072212071143BF +:102020003B4A80321160F5E0012822D13849C96F5E +:1020300002221143364AD1671146C96F04229143E7 +:10204000334AD167114680310968C2071143304ACB +:10205000803211602E49C96F8143803AD1671146A1 +:1020600080310968072212071143294A8032116022 +:10207000D0E0022823D12649C96F04221143244A03 +:10208000D1671146C96F02229143214AD167114697 +:10209000803109684A0052081D4980310A60803940 +:1020A000C96F012211431A4AD1671146803109686C +:1020B000072212071143164A80321160AAE0032852 +:1020C0005ED11349C96F04221143114AD1671146E9 +:1020D000C96F022291430E4AD167114680310968C7 +:1020E000C20711430A4A803211600949C96F490881 +:1020F0004900803AD1671146803109680122920770 +:102100009143034A8032116084E000000000FCFF2C +:10211000CC030020E0FF50408821420031000488B9 +:1021200081403B1102817E024448ED0300000160C2 +:10213000032EE0FF000038520FA0000000003C52C8 +:1021400000000C5200002452E9020000000040523E +:102150000000FEFFF0FF000081400C10028118001B +:1021600044C87F01010001700008E0FF0000105228 :10217000E903000000002C52000014520000185225 :10218000042822D1FE49C96F04221143FC4AD167B9 :102190001146C96F02229143F94AD1671146803135 @@ -544,11 +544,11 @@ :1021E0009143E74AD167114680310968C20711431C :1021F000E34A80321160E249C96F49084900803AD8 :10220000D167114680310968032252079143DC4AA5 -:1022100080321160704710B50A467F23834359010D -:10222000D74B9B6F7F246403A343D54CA3672346FE -:102230009B6F0B43A36710BD10B5044600213F20E0 -:10224000FFF7E9FF0420FFF7C7FE01221146FF2038 -:10225000E130FFF7A2FEFD208000FFF7DDF810BDA2 +:1022100080321160704710B50A467F23834359030B +:10222000D74BDB6F7F246403A343D54CE36723467E +:10223000DB6F0B43E36710BD10B5044600217F2020 +:10224000FFF7E9FF0420FFF7C8FE01221146FF2037 +:10225000E130FFF7A3FEFD208000FFF7DDF810BDA1 :1022600070B503460C467F25292676063560C54D98 :102270002868C54D29680D042D181D60C34D2868B8 :10228000C34D29680D042D182560C24D2868C24D24 @@ -615,7 +615,7 @@ :10265000FEF7E2FE2A20FEF7DFFE97480930FEF77C :10266000DBFE96484630FEF7D7FE2920FEF7D4FE63 :10267000022403E02046FEF7CFFE641C092CF9DBA0 -:10268000FFF74DFBFFF76BFC894A916C506C002201 +:10268000FFF74DFBFFF76CFC894A916C506C002200 :10269000FFF71DFE8648C06B00908548836B1F21A5 :1026A000426B0846FFF72AFF83482138FEF7B4FE45 :1026B0000F220C211720FFF7CCFE7D200001FFF731 @@ -623,7 +623,7 @@ :1026D0002921490608607A480860012700E07F1C2C :1026E00078488742FBDB7F2029214906086076482D :1026F0000468764805682804061908460468744882 -:1027000005682804001900907003009900F0A9FDE5 +:1027000005682804001900907003009900F0B5FDD9 :10271000F8BD18B5664818300069654C183400904B :10272000E368A2686168183CA069FFF7E7FE18BD7E :1027300070B503460C467F25292676063560624D26 @@ -633,13 +633,13 @@ :1027700070BD10B500210BE003689B0F0468E40EE8 :102780006340DA07D20F03685B0013430360491C00 :102790000829F1DB10BD10B5002408E0A000444971 -:1027A00080390A5821464DA000F054FC641C262CA8 +:1027A00080390A5821464DA000F060FC641C262C9C :1027B000F4D310BDF0B585B00546002600271720DC -:1027C00003908C2002902846029900F054FD1330AB -:1027D000C0B200902846029900F04DFD0D462846F3 -:1027E000039900F048FD41004018C019C0B20190A3 -:1027F0002846039900F03FFD022800DB00BF284671 -:10280000039900F038FD8819C4B20F2C00DD641C58 +:1027C00003908C2002902846029900F060FD13309F +:1027D000C0B200902846029900F059FD0D462846E7 +:1027E000039900F054FD41004018C019C0B2019097 +:1027F0002846039900F04BFD022800DB00BF284665 +:10280000039900F044FD8819C4B20F2C00DD641C4C :10281000224601990098FFF71CFE05B0F0BD244840 :102820008038806F012109058843214980398867F4 :1028300070471F488038806F0121090508431C49F3 @@ -654,13 +654,13 @@ :1028C000FF3F000050C300000000185200001C52DF :1028D0000000045200002052000024524153435B88 :1028E00025755D203D20307825780A0010B57021CF -:1028F000F74800F0B4FC0021F54840300170022197 +:1028F000F74800F0C0FC0021F5484030017002218B :102900004170722181703221C17080210171C62114 :102910004171252181710121C1715321017343212D :102920000C304170552181704D21C17033210171EE :1029300010BDF0B597B000270024AA20169015907E :102940001490E348403080798006800E4030089033 -:102950004021DF4800F083FC2C2109A800F07FFC17 +:102950004021DF4800F08FFC2C2109A800F08BFCFF :10296000552239467F1CDA4842546B2239467F1C77 :1029700042547D2239467F1C4254912239467F1CA5 :102980004254712239467F1C425440222146641C25 @@ -689,9 +689,9 @@ :102AF0006CFC2146621CD4B209AA50547449896DF9 :102B0000C8B2FEF762FC2146621CD4B209AA505436 :102B10006F484030807A00282FD06D48416E006E9B -:102B20006C4A6D4B0391029000F0C8FD079106902E -:102B300000206A49079B069A00F026FE0022684B97 -:102B40000191009000F0BAFD0391029000F0E6FDC3 +:102B20006C4A6D4B0391029000F0D4FD0791069022 +:102B300000206A49079B069A00F032FE0022684B8B +:102B40000191009000F0C6FD0391029000F0F2FDAB :102B5000059005990904080EFEF737FC2146621C12 :102B6000D4B209AA50540599C8B2FEF72EFC2146EA :102B7000621CD4B209AA505400BF55484030C07AF4 @@ -717,256 +717,258 @@ :102CB000D9DB002408E009A8025D3846791CCFB2B0 :102CC00003490A54601CC4B22A2CF4DB17B0F0BDCF :102CD00098040020666666666612714000005940DE -:102CE0000000F03F10B500244021D34800F0B7FAAF -:102CF0001D222146641CD048425455222146641CA2 +:102CE0000000F03F10B500244021D94800F0C3FA9D +:102CF0001D222146641CD648425455222146641C9C :102D00004254AD222146641C4254F6222146641CE2 :102D1000425445222146641C4254C7222146641C69 :102D20004254C5222146641C42540E222046611C96 -:102D3000CCB2C1490A5426222046611CCCB2BE49FD -:102D40000A5413222046611CCCB2BB490A54C22249 -:102D50002046611CCCB2B8490A54AC222046611C02 -:102D6000CCB2B5490A5498222046611CCCB2B24973 -:102D70000A5437222046611CCCB2AF490A54B8220B -:102D80002046611CCCB2AC490A5430222046611C5A -:102D9000CCB2A9490A54A1222046611CCCB2A64952 -:102DA0000A54C9222046611CCCB2A3490A54E42229 -:102DB0002046611CCCB2A0490A5493222046611CD3 -:102DC000CCB29D490A5475222046611CCCB29A4966 -:102DD0000A54B7222046611CCCB297490A544122BA -:102DE0002046611CCCB294490A546C222046611CD6 -:102DF000CCB291490A54D1222046611CCCB28E49F2 -:102E00000A542D222046611CCCB28B490A54B822A8 -:102E10002046611CCCB288490A5410BD027886490C +:102D3000CCB2C7490A5426222046611CCCB2C449F1 +:102D40000A5413222046611CCCB2C1490A54C22243 +:102D50002046611CCCB2BE490A54AC222046611CFC +:102D6000CCB2BB490A5498222046611CCCB2B84967 +:102D70000A5437222046611CCCB2B5490A54B82205 +:102D80002046611CCCB2B2490A5430222046611C54 +:102D9000CCB2AF490A54A1222046611CCCB2AC4946 +:102DA0000A54C9222046611CCCB2A9490A54E42223 +:102DB0002046611CCCB2A6490A5493222046611CCD +:102DC000CCB2A3490A5475222046611CCCB2A0495A +:102DD0000A54B7222046611CCCB29D490A544122B4 +:102DE0002046611CCCB29A490A546C222046611CD0 +:102DF000CCB297490A54D1222046611CCCB29449E6 +:102E00000A542D222046611CCCB291490A54B822A2 +:102E10002046611CCCB28E490A5410BD02788C4900 :102E200040310A7042784A7082788A70C278CA70DB -:102E300002790A7142794A7170477F49403188713D -:102E400070477D494031C871704710B5044605226E -:102E5000214679484C3000F0A3F910BD7649403145 -:102E60000872704774494031488270477249403156 -:102E7000487270477049486570476F498865704768 -:102E80006D494031887270476B4A516610667047D1 -:102E900069494031C872704710B504460422214682 -:102EA0006548683000F07CF910BD10B5F92080004D -:102EB000FEF7B2FA6148FEF7A0FA6048401CFEF740 -:102EC0009CFA5E48801CFEF798FA7D20C000FEF751 -:102ED00094FA5A48001DFEF790FA5848401DFEF734 -:102EE0008CFA5648801DFEF788FA54481030FEF7D9 -:102EF00093FA52482C30FEF78FFA50482D30FEF7E7 -:102F00008BFAF1208000FEF778FA4C485430FEF737 -:102F100074FA00204A4908607F20FFF707F8FFF79E -:102F200069FAFFF761FA10BD10B5FEF785FFFF20C3 -:102F3000A930FEF762FAFF20AA30FEF76DFAFF20F3 -:102F4000A730FEF769FA3F210846FEF7B8FE0721D1 -:102F50000846FEF778FD4C20FEF747FD7B20FEF784 -:102F60004CFA5D20C000FEF757FA3448FC38FEF7F3 -:102F700053FA3248FB38FEF74FFA01203149086016 -:102F8000FFF738FAFFF730FA10BD00201021084390 -:102F900040084000042108432021084328490860D4 -:102FA000704770B500200125284304260546B54327 -:102FB000284620260546B5432846214D2860002195 -:102FC00023E01D4D6C5C07221CE025461541EB07F4 -:102FD000DB0F002B05D102260546B5432846184DC8 -:102FE0002860012B03D102252843154D28600825B0 -:102FF0002843134D286008260546B5432846104D42 -:103000002860521E002AE0DA491C4029D9DB70BD35 -:1030100010B5FFF7C6FFFDF707FD68200A490860F5 -:10302000FFF7B3FF002400E0641C08488442FBDB88 -:10303000FDF735FD10BD000098040020E5030000F9 -:1030400000002C520000405200002852204E000088 -:10305000704700000FB4054910B503AA029800F0AC -:1030600011FD10BC08BC04B018470000040000208B -:10307000F8B50E460446002020622046E1688847E5 -:10308000002829D0252802D06268A16820E0E168E4 -:1030900020460027884705001ED0284641381928B9 -:1030A00002D80127FF0220353246204627602946F4 -:1030B000FDF724F8002808D0012804D0F61DF608F2 -:1030C000F6000836D9E7361DD7E762682846A168BA -:1030D0009047206A401CCFE7206AF8BDF7B500256D -:1030E00075291068009914A611D0C046C046002862 -:1030F00002DA404211A608E0009909688A0701D562 -:103100000FA602E0490704D50EA6012501E0C0463E -:10311000C046009F0024243704E000F0C7FC303193 -:103120003955641C0028F8D12B46324621460098B8 -:1031300000F04FFCFEBD0000000000002D0000006C -:103140002B0000002000000070B504460D4621460B -:103150001068C046C0462188090502D50F4A7A4446 -:1031600002E00E4A7A440E3223460021243305E061 -:1031700006070009360F965D5E54491C0028F7D1FA -:1031800020780023000705D5702D03D0002901D039 -:1031900002231132204600F01CFC70BD8E0A000094 -:1031A000F8B5042A2CD3830712D00B78491C03707E -:1031B000401C521E83070BD00B78491C0370401C27 -:1031C000521E830704D00B78491C0370401C521E0A -:1031D0008B079B0F05D0C91ADF002023DE1B08C90F -:1031E0000AE0FCF7B1FFF8BD1D4608C9FD401C46CA -:1031F000B4402C4310C0121F042AF5D2F308C91A98 -:10320000521EF0D40B78491C0370401C521EEAD4A5 -:103210000B78491C0370401C012AE4D40978017022 -:10322000F8BD01E004C0091F0429FBD28B0701D5BA -:103230000280801CC90700D00270704700290BD0A3 -:10324000C30702D00270401C491E022904D3830721 -:1032500002D50280801C891EE3E70022EEE70022EF -:10326000DFE7002203098B422CD3030A8B4211D3E0 -:1032700000239C464EE003460B433CD40022430807 -:103280008B4231D303098B421CD3030A8B4201D3F7 -:1032900094463FE0C3098B4201D3CB01C01A52418F -:1032A00083098B4201D38B01C01A524143098B42DF -:1032B00001D34B01C01A524103098B4201D30B01C8 -:1032C000C01A5241C3088B4201D3CB00C01A5241ED -:1032D00083088B4201D38B00C01A524143088B42B2 -:1032E00001D34B00C01A5241411A00D2014652414B -:1032F000104670475DE0CA0F00D04942031000D36A -:103300004042534000229C4603098B422DD3030ABE -:103310008B4212D3FC22890112BA030A8B420CD3CE -:10332000890192118B4208D3890192118B4204D3F7 -:1033300089013AD0921100E08909C3098B4201D377 -:10334000CB01C01A524183098B4201D38B01C01AB1 -:10335000524143098B4201D34B01C01A5241030928 -:103360008B4201D30B01C01A5241C3088B4201D3D7 -:10337000CB00C01A524183088B4201D38B00C01A84 -:103380005241D9D243088B4201D34B00C01A52415B -:10339000411A00D20146634652415B10104601D3E8 -:1033A0004042002B00D54942704763465B1000D372 -:1033B000404201B50020C046C04602BD704770477C -:1033C00070470000F0B50C46871A9C410D46861ADE -:1033D0009D4103D2C01BA141D21963410D0D1F0DA8 -:1033E000C94EEC1BAE435CD07F057F0D0026002F3D -:1033F00051D02D05AC46A943DD020123ED0A1B0582 -:103400001D4320231B1B24D41746E7403818714165 -:103410002F46E740CC199D402818314661410C0DDC -:1034200027D161449A4013D50023401C59415200D2 -:103430000ED14008400001224B005205D34207D371 -:1034400005204007C14201D5B04900E0B0493046EF -:10345000F0BD6B00002A00D001229A181F23203CE7 -:103460001B1B01D5002302E0E540281871410C0D1B -:10347000D7D0012424050919C407CD0740084908FD -:10348000E40F28436144002CD5D00024401C614146 -:103490009A40D0D1CDE76A05520DD9D1C90FC907DD -:1034A000D5E79C4D4E00002801D0012400E0002407 -:1034B00034195F00002A01D0012600E00026BE1961 -:1034C000954FAC420CD8AE420AD8B44206D0012582 -:1034D0006D05EC42BCD010461946F0BD9942FCD0B7 -:1034E00000203946F0BDF0B51FB40C460F46811AD6 -:1034F0009F412546861A9D4106D20125ED076F4062 -:10350000401ABC4152187B41210D1E0D8D1BAC464B -:103510007D4D8D437ED075056D0D7CD00D05AE467D -:10352000AC431B031B0B794D52429D412023664641 -:103530009B1B14D31746F74038180026009074419F -:1035400060462F460741E41900989D4028186641BF -:1035500016D4714671189A4025D5012320E093189E -:103560002A466A415200002B00D0521C1E23203EE6 -:103570009B1B002B61DD3541EE1728186641E8D50D -:10358000001876415B1C9A4000D3401C4B05F31891 -:103590001524E34010D3002B52D071467118D30F7D -:1035A000C01802D3491C05B0F0BD0123DB079A42C5 -:1035B000F9D140084000F6E701225205B21801D1C6 -:1035C000002853D00123CC0ADB029943891E002A2C -:1035D00008D1020C03D0020C0004103902E00246AC -:1035E000002020390023550B05D112020823550B6A -:1035F00001D152010D23550C01D112011B1DD50C17 -:1036000001D192009B1C150D01D152005B1C20259D -:10361000EE1A01E02CE022E00546F5401543984003 -:10362000CA1AE10769181305C918002ABBDA032072 -:1036300040070818C10FC9070FE071466118B2E7CB -:10364000F10740080843711071444A000CD001236F -:103650005B059A42A7D2C90FC9070020A3E7490515 -:10366000490D26D1002001E00028F4D100219AE77D -:10367000284D6600002801D0012100E000217118CA -:103680005F00002A01D0012600E00026BE19224F6B -:10369000A94210D8AE420ED8B14208D001256D051E -:1036A000E94206D01946A802414010467BE79C42F9 -:1036B00001D0214677E70020394674E710B50C4663 -:1036C0005C4005D50124E4076340FFF70CFF10BD03 -:1036D000FFF778FE10BD30B40C465C4004D50124E1 -:1036E000E407634030BC6DE630BCFCE670B50124F5 -:1036F000E40761400D465D4002D4FFF763FE70BDF4 -:103700006340FFF7F0FE70BDFF0700000000F0FF10 -:103710000000F07F0000E0FF0000F87F30B50346B6 -:10372000CA02400D1043164D164C0A1502D0204314 -:10373000002A06DBAA1A002A12DDD040FF2A0BDC81 -:1037400030BD5205520D01D140004008AA1A07D4DD -:10375000D0404042FF2A01DD002030BD0028FCDDC2 -:103760004A00002B01D0012000E0002010180122A7 -:103770005205D042F0D8C817C043604030BD0000A9 -:103780001E04000000000080F0B58B4C0F09254698 -:1037900089B0BD437BD01D092646AE43FAD00E4604 -:1037A0005E402740F60F3E43254071D02401214260 -:1037B000FBD0FF24AD19A4042D1B039501252D0575 -:1037C000DB02DB0AC9022B43C90A29431E01090196 -:1037D000040F130F050121431701880B8203914346 -:1037E0002D098C46A90B1E438A039543B30B9A03FC -:1037F00096433F09BA0B9403A74302962E467E4395 -:103800000497B6464E19D7190C46019654430597AE -:103810007E43371B7646BF1B3601B646BE0B3619B4 -:1038200000967646BC043719009C01D3641C0094B2 -:103830006400002F01D001263443029E049F75438B -:1038400066467E430496760034196E00341900945F -:10385000029C019E1C196643751BAE460694654684 -:103860004519059C05956C43594375460891691A9D -:103870000191049E01465143A41B0491611A009CCE -:103880000791E10605D061090122114302E072E0CF -:103890006EE06109089D00272C0A2D066918049D19 -:1038A0007C412A0A2D066918019D6241AC0DAD02CA -:1038B0006D185441079A910D920255196141029A6F -:1038C000644658435443069B059A5A43121A131BE5 -:1038D0009A0E9B015B187A41010B0005C3185141F8 -:1038E000220A200644195A419A4200D2491C01205A -:1038F0004002814203D315230226F64302E014233B -:103900000326F6432020C51AA9401746AF40DA40E7 -:103910000A4320460399D840091473181905511811 -:10392000039A3843D2075140AC4009D00122944059 -:1039300006D30022401C5141002C01D14008400018 -:103940001E4A934212D3012203989206904207DB4B -:103950000520400709181A480143C012414004E0FD -:10396000032040070818C10FC907002009B0F0BDA7 -:103970000020F107FAE705180C464C4111486D424A -:10398000A04115D394181A465A410E4864429041FA -:103990000ED301204A004005824209D35A008242D8 -:1039A00006D35940C90F084AC90700201143DDE773 -:1039B00000200649DAE700000000FF07FE070000CC -:1039C000FFFFFF7F0000E0FF0000F07F0000F87FB6 -:1039D0007047FFB504460D4681B024300090216841 -:1039E000880604D51022E0699143216000E001209F -:1039F000A84201DD471B00E000270498A1697A195D -:103A00001018081AA0612078C00602D42046C046CB -:103A1000C046002608E003986268A168805D904770 -:103A2000206A401C761C206204988642F3DB2078D2 -:103A3000C0060AD52046C046C04606E06268A168B6 -:103A400030209047206A401C206238467F1E0028A4 -:103A5000F4DC07E000986268A168405D9047206A46 -:103A6000401C206228466D1E0028F3DC2046C0461C -:103A7000C0462078000602D5022005B0F0BD012026 -:103A8000FBE70000084B70B50D467B4400F027F8BB -:103A900004462846FCF711FD002802D00020C04350 -:103AA00070BD204670BD000003CAFFFF01468008BC -:103AB000081A02091018020A1018020C1018C0087F -:103AC000820012185200891A01E0401C0A390A29A2 -:103AD000FBD2704701694A1C02610878704700B543 -:103AE0008FB002910021059105490193794403911A -:103AF000114604906846FFF7BBFA0FB000BD000006 -:103B0000E5FFFFFF754600F025F8AE460500694663 -:103B10005346C008C000854618B020B5FCF7A0FC8D -:103B200060BC00274908B6460026C0C5C0C5C0C550 -:103B3000C0C5C0C5C0C5C0C5C0C5403D49008D4653 -:103B4000704710B50446C046C0462046FCF7F5FA5B -:103B500010BD0000004870470805002022038803BC -:103B6000A1030D01B503B20171014202C701CA03ED -:103B70008B0029014B026D0075019F002103850315 -:103B80009C030B01AC03AD016C013902BF01B7030B -:103B9000880022013C026A006A019A001F000000AE -:103BA0001F0000001D0000000200000002000000D5 -:103BB0006B046D046F0471047404760478047A0451 -:103BC0005B045D045F0461046404660468046A04C1 -:103BD0006C046E0470047204730475047704790431 -:103BE0005C045E04600462046304650467046904A1 -:103BF0003031323334353637383941424344454623 -:103C0000403058003031323334353637383961621C -:103C10006364656640307800383C00000000002096 -:103C200054000000C40000008C3C00005400002040 -:103C30001C110000E0000000000000000000005126 -:103C40000000005100000000000000000000000023 -:103C50000000000004102540576057402510040064 -:103C6000F4010000F4010000F4010000F401000080 -:103C7000F4010000F4010000F4010000F401000070 -:0C3C8000F4010000F4010000000000004E +:102E300002790A7142794A71704785494031887137 +:102E4000704783494031C871704710B50446052268 +:102E500021467F484C3000F0AFF910BD7C4940312D +:102E6000087270477A49403148827047784940314A +:102E7000487270477649486570477549886570475C +:102E80007349403188727047714A516610667047C5 +:102E90006F494031C872704710B50446042221467C +:102EA0006B48683000F088F910BD10B5F92080003B +:102EB000FEF7B2FA6748FEF7A0FA6648401CFEF734 +:102EC0009CFA6448801CFEF798FA7D20C000FEF74B +:102ED00094FA6048001DFEF790FA5E48401DFEF728 +:102EE0008CFA5C48801DFEF788FA5A481030FEF7CD +:102EF00093FA58482C30FEF78FFA56482D30FEF7DB +:102F00008BFAF1208000FEF778FA52485430FEF731 +:102F100074FA0020504908607F20FFF708F87F20EE +:102F2000FEF7F6FF00213F20FEF7E1FFFFF762FA10 +:102F3000FFF75AFA10BD10B5FEF77EFFFF20A9304B +:102F4000FEF75BFAFF20AA30FEF766FAFF20A730F3 +:102F5000FEF762FA3F210846FEF7B1FE0721084658 +:102F6000FEF771FD4C20FEF740FD7B20FEF745FA91 +:102F70005D20C000FEF750FA3648FC38FEF74CFAE8 +:102F80003448FB38FEF748FA012034490860FFF75F +:102F900031FAFFF729FA10BD00201021084340083C +:102FA000400004210843202108432B490860704752 +:102FB00070B500200125284304260546B543284660 +:102FC00020260546B5432846234D2860002123E0EE +:102FD0001F4D6C5C07221CE025461541EB07DB0FFB +:102FE000002B05D102260546B54328461A4D286018 +:102FF000012B03D102252843174D286008252843BB +:10300000154D286008260546B5432846124D286010 +:10301000521E002AE0DA491C4029D9DB70BD10B5E8 +:10302000FFF7C6FFFDF700FD68200D49086000248A +:1030300000E0641C322CFCDBFFF7AEFF002400E054 +:10304000641C08488442FBDBFDF729FD10BD00002D +:1030500098040020E503000000002C5200004052BC +:1030600000002852204E0000704700000FB40549B0 +:1030700010B503AA029800F011FD10BC08BC04B002 +:103080001847000004000020F8B50E460446002052 +:1030900020622046E1688847002829D0252802D0F0 +:1030A0006268A16820E0E1682046002788470500A3 +:1030B0001ED028464138192802D80127FF022035A2 +:1030C0003246204627602946FDF718F8002808D028 +:1030D000012804D0F61DF608F6000836D9E7361D9B +:1030E000D7E762682846A1689047206A401CCFE76E +:1030F000206AF8BDF7B5002575291068009914A657 +:1031000011D0C046C046002802DA404211A608E0AD +:10311000009909688A0701D50FA602E0490704D57E +:103120000EA6012501E0C046C046009F00242437BA +:1031300004E000F0C7FC30313955641C0028F8D198 +:103140002B4632462146009800F04FFCFEBD0000A1 +:10315000000000002D0000002B00000020000000F7 +:1031600070B504460D4621461068C046C046218809 +:10317000090502D50F4A7A4402E00E4A7A440E321B +:1031800023460021243305E006070009360F965D2B +:103190005E54491C0028F7D120780023000705D58C +:1031A000702D03D0002901D002231132204600F0F7 +:1031B0001CFC70BD8E0A0000F8B5042A2CD38307CE +:1031C00012D00B78491C0370401C521E83070BD091 +:1031D0000B78491C0370401C521E830704D00B78E7 +:1031E000491C0370401C521E8B079B0F05D0C91A47 +:1031F000DF002023DE1B08C90AE0FCF7A5FFF8BDAD +:103200001D4608C9FD401C46B4402C4310C0121F87 +:10321000042AF5D2F308C91A521EF0D40B78491CBF +:103220000370401C521EEAD40B78491C0370401CEA +:10323000012AE4D409780170F8BD01E004C0091F37 +:103240000429FBD28B0701D50280801CC90700D05E +:103250000270704700290BD0C30702D00270401CD7 +:10326000491E022904D3830702D50280801C891ECF +:10327000E3E70022EEE70022DFE7002203098B42AA +:103280002CD3030A8B4211D300239C464EE0034605 +:103290000B433CD4002243088B4231D303098B42B9 +:1032A0001CD3030A8B4201D394463FE0C3098B42EF +:1032B00001D3CB01C01A524183098B4201D38B0148 +:1032C000C01A524143098B4201D34B01C01A5241EB +:1032D00003098B4201D30B01C01A5241C3088B4230 +:1032E00001D3CB00C01A524183088B4201D38B001B +:1032F000C01A524143088B4201D34B00C01A5241BD +:10330000411A00D201465241104670475DE0CA0F93 +:1033100000D04942031000D34042534000229C4653 +:1033200003098B422DD3030A8B4212D3FC2289015D +:1033300012BA030A8B420CD3890192118B4208D333 +:10334000890192118B4204D389013AD0921100E095 +:103350008909C3098B4201D3CB01C01A52418309A9 +:103360008B4201D38B01C01A524143098B4201D3D6 +:103370004B01C01A524103098B4201D30B01C01A01 +:103380005241C3088B4201D3CB00C01A524183087B +:103390008B4201D38B00C01A5241D9D243088B42D1 +:1033A00001D34B00C01A5241411A00D20146634674 +:1033B00052415B10104601D34042002B00D54942D8 +:1033C000704763465B1000D3404201B50020C04601 +:1033D000C04602BD7047704770470000F0B50C460C +:1033E000871A9C410D46861A9D4103D2C01BA141FC +:1033F000D21963410D0D1F0DC94EEC1BAE435CD0BD +:103400007F057F0D0026002F51D02D05AC46A94326 +:10341000DD020123ED0A1B051D4320231B1B24D4C1 +:103420001746E740381871412F46E740CC199D40B8 +:103430002818314661410C0D27D161449A4013D5BB +:103440000023401C594152000ED140084000012287 +:103450004B005205D34207D305204007C14201D596 +:10346000B04900E0B0493046F0BD6B00002A00D002 +:1034700001229A181F23203C1B1B01D5002302E0C8 +:10348000E540281871410C0DD7D0012424050919F5 +:10349000C407CD0740084908E40F28436144002CC5 +:1034A000D5D00024401C61419A40D0D1CDE76A05B7 +:1034B000520DD9D1C90FC907D5E79C4D4E00002840 +:1034C00001D0012400E0002434195F00002A01D05B +:1034D000012600E00026BE19954FAC420CD8AE4242 +:1034E0000AD8B44206D001256D05EC42BCD0104686 +:1034F0001946F0BD9942FCD000203946F0BDF0B528 +:103500001FB40C460F46811A9F412546861A9D41DD +:1035100006D20125ED076F40401ABC4152187B418D +:10352000210D1E0D8D1BAC467D4D8D437ED0750546 +:103530006D0D7CD00D05AE46AC431B031B0B794DC6 +:1035400052429D41202366469B1B14D31746F740E9 +:10355000381800260090744160462F460741E41950 +:1035600000989D402818664116D4714671189A40FB +:1035700025D5012320E093182A466A415200002BEA +:1035800000D0521C1E23203E9B1B002B61DD3541C9 +:10359000EE1728186641E8D5001876415B1C9A4062 +:1035A00000D3401C4B05F3181524E34010D3002B27 +:1035B00052D071467118D30FC01802D3491C05B000 +:1035C000F0BD0123DB079A42F9D140084000F6E73D +:1035D00001225205B21801D1002853D00123CC0A90 +:1035E000DB029943891E002A08D1020C03D0020C89 +:1035F0000004103902E00246002020390023550B58 +:1036000005D112020823550B01D152010D23550C8F +:1036100001D112011B1DD50C01D192009B1C150D6F +:1036200001D152005B1C2025EE1A01E02CE022E0C3 +:103630000546F54015439840CA1AE1076918130575 +:10364000C918002ABBDA032040070818C10FC907B0 +:103650000FE071466118B2E7F107400808437110A6 +:1036600071444A000CD001235B059A42A7D2C90FCE +:10367000C9070020A3E74905490D26D1002001E034 +:103680000028F4D100219AE7284D6600002801D0D7 +:10369000012100E0002171185F00002A01D00126FD +:1036A00000E00026BE19224FA94210D8AE420ED823 +:1036B000B14208D001256D05E94206D01946A8029D +:1036C000414010467BE79C4201D0214677E700202D +:1036D000394674E710B50C465C4005D50124E40773 +:1036E0006340FFF70CFF10BDFFF778FE10BD30B44C +:1036F0000C465C4004D50124E407634030BC6DE611 +:1037000030BCFCE670B50124E40761400D465D4025 +:1037100002D4FFF763FE70BD6340FFF7F0FE70BD9B +:10372000FF0700000000F0FF0000F07F0000E0FF56 +:103730000000F87F30B50346CA02400D1043164D15 +:10374000164C0A1502D02043002A06DBAA1A002ACA +:1037500012DDD040FF2A0BDC30BD5205520D01D1E5 +:1037600040004008AA1A07D4D0404042FF2A01DD99 +:10377000002030BD0028FCDD4A00002B01D00120D4 +:1037800000E00020101801225205D042F0D8C817DE +:10379000C043604030BD00001E04000000000080F7 +:1037A000F0B58B4C0F09254689B0BD437BD01D0970 +:1037B0002646AE43FAD00E465E402740F60F3E4303 +:1037C000254071D024012142FBD0FF24AD19A4046F +:1037D0002D1B039501252D05DB02DB0AC9022B43B6 +:1037E000C90A29431E010901040F130F05012143D2 +:1037F0001701880B820391432D098C46A90B1E43A8 +:103800008A039543B30B9A0396433F09BA0B94037B +:10381000A74302962E467E430497B6464E19D71903 +:103820000C460196544305977E43371B7646BF1BD3 +:103830003601B646BE0B361900967646BC043719DB +:10384000009C01D3641C00946400002F01D0012669 +:103850003443029E049F754366467E430496760079 +:1038600034196E0034190094029C019E1C196643A1 +:10387000751BAE46069465464519059C05956C4337 +:10388000594375460891691A0191049E01465143B6 +:10389000A41B0491611A009C0791E10605D06109FF +:1038A0000122114302E072E06EE06109089D0027E9 +:1038B0002C0A2D066918049D7C412A0A2D066918D8 +:1038C000019D6241AC0DAD026D185441079A910DF6 +:1038D000920255196141029A644658435443069B2B +:1038E000059A5A43121A131B9A0E9B015B187A41D0 +:1038F000010B0005C3185141220A200644195A4100 +:103900009A4200D2491C01204002814203D3152370 +:103910000226F64302E014230326F6432020C51AAC +:10392000A9401746AF40DA400A4320460399D840E1 +:103930000914731819055118039A3843D2075140D6 +:10394000AC4009D00122944006D30022401C5141D2 +:10395000002C01D1400840001E4A934212D301229C +:1039600003989206904207DB0520400709181A4881 +:103970000143C012414004E0032040070818C10F72 +:10398000C907002009B0F0BD0020F107FAE70518CB +:103990000C464C4111486D42A04115D394181A466B +:1039A0005A410E48644290410ED301204A0040051E +:1039B000824209D35A00824206D35940C90F084AAD +:1039C000C90700201143DDE700200649DAE70000BF +:1039D0000000FF07FE070000FFFFFF7F0000E0FF81 +:1039E0000000F07F0000F87F7047FFB504460D46E9 +:1039F00081B0243000902168880604D51022E06947 +:103A00009143216000E00120A84201DD471B00E056 +:103A100000270498A1697A191018081AA061207863 +:103A2000C00602D42046C046C046002608E00398DF +:103A30006268A168805D9047206A401C761C206205 +:103A400004988642F3DB2078C0060AD52046C0469B +:103A5000C04606E06268A16830209047206A401C9A +:103A6000206238467F1E0028F4DC07E00098626878 +:103A7000A168405D9047206A401C206228466D1E68 +:103A80000028F3DC2046C046C0462078000602D558 +:103A9000022005B0F0BD0120FBE70000084B70B527 +:103AA0000D467B4400F027F804462846FCF705FD48 +:103AB000002802D00020C04370BD204670BD000029 +:103AC000EBC9FFFF01468008081A02091018020A14 +:103AD0001018020C1018C008820012185200891A1F +:103AE00001E0401C0A390A29FBD2704701694A1CCF +:103AF00002610878704700B58FB0029100210591EE +:103B00000549019379440391114604906846FFF7F3 +:103B1000BBFA0FB000BD0000E5FFFFFF754600F0E7 +:103B200025F8AE46050069465346C008C0008546E4 +:103B300018B020B5FCF794FC60BC00274908B646D5 +:103B40000026C0C5C0C5C0C5C0C5C0C5C0C5C0C5AC +:103B5000C0C5403D49008D46704710B50446C0467B +:103B6000C0462046FCF7E9FA10BD00000048704747 +:103B70000805002022038803A1030D01B503B2014B +:103B800071014202C701CA038B0029014B026D007B +:103B900075019F00210385039C030B01AC03AD015C +:103BA0006C013902BF01B703880022013C026A00A0 +:103BB0006A019A001F0000001F0000001D000000A5 +:103BC00002000000020000006B046D046F04710429 +:103BD0007404760478047A045B045D045F04610471 +:103BE0006404660468046A046C046E04700472045D +:103BF00073047504770479045C045E046004620451 +:103C00006304650467046904303132333435363770 +:103C10003839414243444546403058003031323310 +:103C20003435363738396162636465664030780010 +:103C3000503C00000000002054000000C4000000C0 +:103C4000A43C0000540000201C110000E000000013 +:103C500000000000000000510000005100000000C2 +:103C600000000000000000000000000004102540DB +:103C70005760574025100400F4010000F4010000D3 +:103C8000F4010000F4010000F4010000F401000060 +:103C9000F4010000F4010000F4010000F401000050 +:043CA0000000000020 :0400000500000000F7 :00000001FF diff --git a/scm_v3c/applications/ble_tx/ble_tx.c b/scm_v3c/applications/ble_tx/ble_tx.c index 6fa09115..47c11c00 100644 --- a/scm_v3c/applications/ble_tx/ble_tx.c +++ b/scm_v3c/applications/ble_tx/ble_tx.c @@ -114,7 +114,7 @@ int main(void) { #else // CHANGE THESE VALUES AFTER LC CALIBRATION. app_vars.tx_coarse = 23; - app_vars.tx_mid = 12; + app_vars.tx_mid = 11; app_vars.tx_fine = 15; #endif diff --git a/scm_v3c/ble.c b/scm_v3c/ble.c index 136b4f25..09f904a4 100644 --- a/scm_v3c/ble.c +++ b/scm_v3c/ble.c @@ -314,8 +314,8 @@ void ble_init_tx(void) { set_LC_current(127); // Set LDO voltages for PA and LO. - // set_PA_supply(63); - // set_LO_supply(127,0); + set_PA_supply(127); + set_LO_supply(63,0); // Program analog scan chain. analog_scan_chain_write(); @@ -370,7 +370,7 @@ void ble_init_rx(void) { // To disable both you would invert these values (...110 = 0x6). ANALOG_CFG_REG__16 = 0x1; - // Program analog scan chain. + // Program analog scan chain. analog_scan_chain_write(); analog_scan_chain_load(); } @@ -386,6 +386,9 @@ void ble_transmit(void) { // Turn on LO, PA, and DIV. ANALOG_CFG_REG__10 = 0x0068; + // Wait for DIV to turn on. + for (t = 0; t < 50; ++t); + // Send the packet. transmit_tx_arb_fifo(); diff --git a/scm_v3c/scm3c_hw_interface.c b/scm_v3c/scm3c_hw_interface.c index 3a6594ba..d103ab04 100644 --- a/scm_v3c/scm3c_hw_interface.c +++ b/scm_v3c/scm3c_hw_interface.c @@ -975,15 +975,15 @@ void radio_init_tx(){ set_LC_current(127); // Set LDO voltages for PA and LO - set_PA_supply(63); - set_LO_supply(127,0); + set_PA_supply(127); + set_LO_supply(63,0); } void radio_init_divider(unsigned int div_value){ // Set divider LDO value to max - set_DIV_supply(63,0); + set_DIV_supply(127,0); // Set prescaler to div-by-2 prescaler(4); @@ -1140,7 +1140,7 @@ void initialize_mote(){ radio_init(); rftimer_init(); ble_init(); - + //-------------------------------------------------------- // SCM3C Analog Scan Chain Initialization //-------------------------------------------------------- @@ -1151,20 +1151,20 @@ void initialize_mote(){ // set_VDDD_LDO_voltage(0); // set_AUX_LDO_voltage(0); // set_ALWAYSON_LDO_voltage(0); - + // Select banks for GPIO inputs GPI_control(0,0,0,0); - + // Select banks for GPIO outputs GPO_control(6,6,6,0); - + // Set all GPIOs as outputs GPI_enables(0x0000); GPO_enables(0xFFFF); // Set HCLK source as HF_CLOCK set_asc_bit(1147); - + // Set initial coarse/fine on HF_CLOCK //coarse 0:4 = 860 861 875b 876b 877b //fine 0:4 870 871 872 873 874b @@ -1172,13 +1172,13 @@ void initialize_mote(){ scm3c_hw_interface_vars.HF_CLOCK_coarse, scm3c_hw_interface_vars.HF_CLOCK_fine ); - + // Set RFTimer source as HF_CLOCK set_asc_bit(1151); // Disable LF_CLOCK set_asc_bit(553); - + // HF_CLOCK will be trimmed to 20MHz, so set RFTimer div value to 40 to get 500kHz (inverted, so 1101 0111) set_asc_bit(49); set_asc_bit(48); @@ -1188,27 +1188,27 @@ void initialize_mote(){ set_asc_bit(44); set_asc_bit(43); set_asc_bit(42); - + // Set 2M RC as source for chip CLK set_asc_bit(1156); - + // Enable 32k for cal set_asc_bit(623); - + // Enable passthrough on chip CLK divider set_asc_bit(41); - + // Init counter setup - set all to analog_cfg control // scm3c_hw_interface_vars.ASC[0] is leftmost //scm3c_hw_interface_vars.ASC[0] |= 0x6F800000; for(t=2; t<9; t++) set_asc_bit(t); - + // Init RX radio_init_rx_MF(); - + // Init TX radio_init_tx(); - + // Set initial IF ADC clock frequency set_IF_clock_frequency( scm3c_hw_interface_vars.IF_coarse, @@ -1227,18 +1227,17 @@ void initialize_mote(){ // Turn on RC 2M for cal set_asc_bit(1114); - + // Set initial LO frequency LC_FREQCHANGE(DEFAULT_INIT_LC_COARSE, DEFAULT_INIT_LC_MID, DEFAULT_INIT_LC_FINE); - + // Init divider settings radio_init_divider(2000); - + // Program analog scan chain analog_scan_chain_write(); analog_scan_chain_load(); //-------------------------------------------------------- - } unsigned int estimate_temperature_2M_32k(){ @@ -1607,27 +1606,29 @@ void enable_1mhz_ble_ASC() { void disable_1mhz_ble_ASC() { scm3c_hw_interface_vars.ASC[32] |= 0x00060000; } + void set_PA_supply(unsigned int code) { // 7-bit setting (between 0 and 127) // MSB is a "panic" bit that engages the high-voltage settings unsigned int code_ASC = ((~code)&0x0000007F) << 13; scm3c_hw_interface_vars.ASC[30] &= 0xFFF01FFF; scm3c_hw_interface_vars.ASC[30] |= code_ASC; - } + void set_LO_supply(unsigned int code, unsigned char panic) { // 7-bit setting (between 0 and 127) // MSB is a "panic" bit that engages the high-voltage settings unsigned int code_ASC = ((~code)&0x0000007F) << 5; - scm3c_hw_interface_vars.ASC[30] &= 0xFFFFF017; + scm3c_hw_interface_vars.ASC[30] &= 0xFFFFF01F; scm3c_hw_interface_vars.ASC[30] |= code_ASC; } + void set_DIV_supply(unsigned int code, unsigned char panic) { // 7-bit setting (between 0 and 127) // MSB is a "panic" bit that engages the high-voltage settings - unsigned int code_ASC = ((~code)&0x0000007F) << 5; - scm3c_hw_interface_vars.ASC[30] &= 0xFFF01FFF; - scm3c_hw_interface_vars.ASC[30] |= code_ASC; + unsigned int code_ASC = ((~code)&0x0000007F) << 13; + scm3c_hw_interface_vars.ASC[31] &= 0xFFF01FFF; + scm3c_hw_interface_vars.ASC[31] |= code_ASC; } void prescaler(int code) { From dfeb12a77fb1ea8349dfe8d39dfa60eb5e0defc9 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sat, 15 Feb 2020 17:59:56 -0800 Subject: [PATCH 05/26] Fix BLE packet generation code --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15524 -> 15524 bytes .../applications/ble_tx/Objects/ble_tx.hex | 144 +++++++++--------- scm_v3c/applications/ble_tx/ble_tx.c | 2 +- scm_v3c/ble.c | 14 +- 4 files changed, 78 insertions(+), 82 deletions(-) diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin index a74ff3a6b12bf4e49592dc21657c4608e5b9a909..98d6968c506a23791de88bc91b02b718d5b1db8b 100644 GIT binary patch delta 830 zcmYk)Ur19?90%~@+~)3}v8)x71-ln!`PgW?@+)Oi^TLXQ^02s1N={@KCF6qZUISC)iXj@Flzfo z&bzvrK9hvYdawZf`3Q2h75fA}*k{|!a0|!6X2BjjXZw`lQpPZH7{9NRA1>?3EcBvl z$Z0R;ncilmcL@hN@qI(9BA2Rsu-~?w;TBJY7a_fSLyJ_i?|P- zYsBvzZ`I<0)h%!-BwZ@+UzTzRk)pS4*H^gtT=@Xp)PU^^k-h%tCN_rK>219Q@1b4? zzoT9Qr>V2xS?X2r5$X&$OT7g4QK!KP>J<1R^=t4i!5*#uQZM0!(83GwRqE&9H`Mds vZt5BEF!f__i8>BGMEwB#e?wDXbI!b~4eH_Olj<)k<#)`vJ9y=2$DrvS%#BK4 delta 829 zcmYk)|4S2L90%~nTbsKAZY$5m;{+@Hlb)I!Itzx zn&gc~${9hcQ8Na~i6n?M&01yP1`_lIGU^W)Q5@xV^f~v0_tU-Z{rT{D?w;pKb7^kY zPf=Z!xh^W*NQ*vH%9RoG8~?Gf*6%*IE6&9=alPB6<=xCzs7{of44pxxo8@jxyEkU~ zgwNaCYu0eeUVr2j^yfHaYbf+u%-*x6_X0hm3mOzgR^8?z{${T~H4nXL7}?B)oT9F> zFy3C%sz7Hv!7S@;WyiF8C9zm$ynUt(fqrs2_!!a~S0yp8$R6NM2Xi6GvSF=W60?fR zBxE!trzu4`A*Z|K^tK`$h4hUeiQ|gwIy<^Ob3~EFaM59m4MU|mBc!NZf>fT-r^qhK zy9j@Jv=H`n45Go1KO9gcC?1tIDzym>kIVyX?On|@Djk!Mr9V)UKu~*KsrLM=sCjj= zx>DQD)ViQLDKFHr69v(WZj76(bb#$|_4P=i0WUXQ+q1s4pEpiP;@XyxuY+eEpK)F} zgbr&r=?v9#+{>BP1r@6c%G>U6{`!1iwzP!5I2(3> 8) & 0xFF); // Temperature MSB pdu_crc[j++] = flipChar(temp_payload & 0xFF); // Temperature LSB } @@ -170,9 +173,7 @@ void ble_gen_packet(void) { } } - for (j = 0; j < PDU_LENGTH + CRC_LENGTH; ++j) { - ble_vars.packet[i++] = pdu_crc[j]; - } + memcpy(&ble_vars.packet[i], pdu_crc, PDU_LENGTH + CRC_LENGTH); } void ble_gen_test_packet(void) { @@ -210,12 +211,7 @@ void ble_gen_test_packet(void) { } void ble_set_AdvA(uint8_t *AdvA) { - ble_vars.AdvA[0] = AdvA[0]; - ble_vars.AdvA[1] = AdvA[1]; - ble_vars.AdvA[2] = AdvA[2]; - ble_vars.AdvA[3] = AdvA[3]; - ble_vars.AdvA[4] = AdvA[4]; - ble_vars.AdvA[5] = AdvA[5]; + memcpy(ble_vars.AdvA, AdvA, ADVA_LENGTH); } void ble_set_channel(uint8_t channel) { From 0e225465c365650bc99c093b02a86cc0a55aedb5 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sat, 15 Feb 2020 18:18:54 -0800 Subject: [PATCH 06/26] Modify BLE TX and 15.4 RX application code --- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15840 -> 15864 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 880 +++++++++--------- .../ble_tx_154_rx/ble_tx_154_rx.c | 6 +- 3 files changed, 444 insertions(+), 442 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin index 0f142b49a110eb2e06ed675c7cce6ca28c70d533..ee68f1db9f268e6129ee638cfd2e54bd4db4a7be 100644 GIT binary patch delta 2893 zcmZ9O4Nw%<9l+n)JKzrdxPu@dD7y#BAz(n0RI7%A3&$=WEfCaTVsavi6%kMoh@N+d zMyzRa9O$!*p^sZJgA0x_;D!uoO5?;EojEEMmX+`&@& zhHWX9rfwBaO`rwHTc6a-9?YK_r}$fPO%k1Xf4mX$zjaw{sbx(`=J|F*`+VeVUxxU9 z`w)-)8(4ao+djv*#DnxchWKy&uW_ALkaqt%Zp5mwIBcA4ZBevsO|fIecq=B< zd#WzA^JUht%+ZRRX2WhMS`pyn8m2 zw|k*ChV8KB+pujNgcgwHs-CbG3Zc9G_f#B(Z;*^|2D|%9!yjUNmE>wl^-Fy(vvhVx zTYejE+X^v+oYp+R^T=Us0T#)Z+6VYB8Hl`uZ<4yGL--x?II0xi?9ZFw!rBMoOAJ0w z@%M>5a|6CYHq08*t^u76bQL6hwhhPjpPPLQ<9w2tKnJ-*KD{xo;R$f$v@)OMttUb3L$P{ zjxWHc$>I1y+(ta{X1tcfCKTeOz;npXgeFL&Kzt{1%iNrvV( zq}<^&);nyVucc)nVJd1NmBv$(SYy5gx-c3!Z<6xl^bMn|EKG=>!^W3|CnBb=gLPuC z(e+2D<#)ka`u?w$pmH9cfJxd4Aa7&>w3 z8OY638f)OVMOy4B9p);0u=r$yJ+%h+m^(^(YEvvH8=}lTwYovOVZXUtwU5-(n;kz6#02~z z4AJ119<+^lDPxLfp^`T>BrikmF^L6pf5<)^H76K#!K*U9?uk*N^dV8Re(=8vb3_Kc zwIt6F7pV&J0WU(tYN#P2hD$G~?i7y))=br7{&UGUux8`1X5YY?>0D|HVgf7iovem_ zM8e8pm4%-Ek5Y2fcpLdT?GSd6TH{G$|>8MtdIdM|`Ud%Psb#zmlOv%k5uqrW|&?BDA8-3c|$V#*z()%e_5{&14A@NCJS&zoAKs1 zNW3Z}{t{<0=5RmPL`#AvB>V!D)VWs@J`d6Tn*1t*!KcV@MoiW*j;q&Fnpu)?CdA{t zfL0yQ{xU@SHo=)O8Hc#T^#RNN5X*khO=oEd(b`CEW~{vhY$JV=P#t2~5m-{VofTt^ zY~FUXy`iYFSk*;25r5ks(G~7QbUhbwGW>nSFOiU;t{8VAuwD00`#kc8IYXDBBV-xE zPE6OG@%?P^@C?FE1PU;GuL2Dksvx&A7id{-OK`>21ZTDDKbv~S8GBq3hNfbjb3hId zlGU&P z7q75i<02~;Dg_P$$0+!k2)v75)(TjKaOZqYD29 z`0obV9^7C(Fd&Md8@O5F)4(4q{627=!pDHODSQ;zqi`2+mcs7}(0RTmqN9VA1SoEPOL?cJ?T<6Z)N?>jYg>QTb-w=ElMX7>~d>kWCHQ>ewxitrN28T$8i|NkX4k%SuAGxH<54 zm4s7b4ZK|?;kam{-C#Z{T3Iwt5}e}etO?}X;%lq}WT&`})n!Wp5no|5LB1=lVY5IU z5g!KAwu%*OC5(58h%Qs!(wYf7EeTJ9Z)r)mC(A;$C=2VvKrxc=>ONVfdm-diQKm0| z+zj#@$Z9c{(O4wmw^Bq?1=hDrf{(&;>=Z~AK4s6rw6c%` zQ>2rxvt!dTVBA>P=z>3>1xB-aVVK2bHd<&!rj#13h)MA#lf<0FH|D|!XQ(_Bc*X&1 zK*k27;vEfKF&{1Re#Ir3((eZUAZ6jY>=%%K3q2ENLaE4Gle8q$H!ceo<>`@zJplim zeyHb2jva67k6Mz0sY$8-#if@u&xFCRB{haBn;`A0-uNGONS}BB delta 2927 zcmZ9Oe^3)=8pq#vlfVY6CQwu==x+F7P*AXE3#Sf&)MYn-CyKx7ctwkfQY8KkYE1A) z#rEb5zRoGN&Y|2?tvY&OPEU^#JgeAtPSV=mRQ@oX`_Xfpxm&GvVIjNsY{+@J+nM)$ zKJW9q&+~rs?z@{E*cIC4`-9=i9E9$-^w?(|8!&Zk%cg=l@d%JBLVpB8jHzp~e{z?} zZ|c&C$HQh$l_V93rw4T6Wm1Tjd(s9Q`KImOJ;<68L>bAU?GE#vKDULVL}hRbPwnY( zr*oUzC~-hVnJ84Bx}85zGSp9re^P5wnVj$YolyJT%X+Ssx24)Ac`Qwnkgur#iT@f# zqAt9eX9@zIan_kZBt8lw>-0V({v*6nXs*`m3Zd6iO>WA_?3bgO8i1WtOJ(l+2LWU3v}Z70VKAx4H=Wo$7MFsSYt%95blrmhgePwh~=%F+}QBeP{{T^(yLCzOMnQf&ED2d$Wu;#hp8vm)*Z#=j#)bcK25@FJec z+t*mqh#NOR&OvgLevHlJkZ~UVC%I>QjNRl$!X@uB<% zi_cPGKT$`o!WYP@G2KQ7_)OsANcLDaHg=vFdko{(NRhb}Um@R`D>Vs;QzlrW8{x*JT{MF$f zA>|6OPnd^W$e{_PxSj+j*l`(2PASDxfX9(7DY@7{PNk$628Pgag*-_~?!2G!8-3|u z`I^y#Jleq61_XLF%?0YLw%)gC4sCcYoU+sQr{Mj8=b<%2>xD+Y4P$7{Fe^~^R5%B- z9+B=z4e8$qboDp9)~{n!DP?F>7Bxkr1~F~_5_|>*`GTZ!a`viTUX=#q+i>_*>6wg~ zPa!(c<@DbIEu9f9zx_WgpG34=0PjW6a*?;?HLt!7YOaHt>!9X(RL$=rYEF~>$@B0@ z!ZH){+n}~c(bd``m%w?__t}@@{beT_PL!wH_LjG=OXp5BjIy_{Gj(|^d+n7vH)&uh z^Owm@pmDM6jcBZt_wZiOS|NLx-B8a1zb>d2LEo(+RvVosPng*=Hq4&|>mX}JuuQny zptqRqf+M)j%-wCEEG>2}!rpviEw+3aZ?>0^6>K{Gk$BiCo*54BOmp>g$ZE2Cf2!qZ z^WrUuFwYu^1w)iIJ(wA-n;uh_c~RGa7Sd^gH$S1;TX?qt!}=*NVk5PZBel+lbk?_m ziP2gnM{w>7k)vNE+=QhQBGYM@D9{4>uP|&m65nE{BGCgOQe&ynj~7*y^ja>xhW`w^ z>&d9mwcEe`pZzuY^&DcgU3;YJp}(Vm!pNhoN~b$7rswN%9eFtAAU;RdSx?|9qRVCr ztHMcnfez%ea#Sl4E5f5WE2jhE!^OxpA&?U2z!1|sMPbT{`ce1DsDP}@er%NB{d5Ih zYtKpLR3Y;(aBRGd-Z<|VTORGRu@51-Z#aiFo<*W(c(J9B^Q1l?-BSxap9{8pex)Lr z!YsEs^?rx(;{{dqlThx{2cJTXKqIog(pPO^xK*iNbQsSiRGDHJWhR7f2<4G{aX2PF z)sXwN-w*j{C$chqftVbfh2^SKZ*>^YmQ-C3Y}S0?Jvvd5f-&i5KvMH=MYzG-z82KW9c?Jzu;LZG6X3U#4rJd`RpK$G61!5VJvuKN0r<60;O! zsV&1T2x8a6BXj;9Huwy!Bl=#CscLA|)|npTLEVeVB)O#H|A)!j!+Nn9u`o~`uyYdW(S*u-%n`{Uz zhb9)8{3yf5eg((js+w^P+qX_*9fX0=^sNcHqBS7*FJUwZVWy11EvEMfn5Zt5H4%TpZ=2!0$x4 z1vnVxUjpYw`F-I32xzKq z+Y45EmJP5|jeL0?659t&UE3i-Z+4b$1%IV#th z);deq!?+j5S~WdXTf^5vwcSw7 z5K?W~-$uSTRq3`Gmg2*;OhQCTr;0LAs3w)>_rup|SeixJ^F7$rnLaZgQwFtj$*Y&? zm(B12O7$ToV0U&g9Q?Z>-Dl*LIa_fXIXq_u7D)G;yJp{9q+QGc=x#v^k=D6y{Tqr; Bp|$`3 diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex index 465eebeb..584f3eb1 100644 --- a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex +++ b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex @@ -10,47 +10,47 @@ :1000800000F002F800F050F80CA030C8083824182E :100090002D18A246671EAB4654465D46AC4201D1C0 :1000A00000F042F87E460F3E0FCCB64601263342A2 -:1000B00000D0FB1AA246AB4633431847B43C0000BD -:1000C000D43C0000103A02D378C878C1FAD852075D +:1000B00000D0FB1AA246AB4633431847CC3C0000A5 +:1000C000EC3C0000103A02D378C878C1FAD8520745 :1000D00001D330C830C101D504680C6070470000FE :1000E0000023002400250026103A01D378C1FBD854 :1000F000520700D330C100D50B60704710B564299A -:1001000002D103F097F810BD752902D103F092F8DF -:1001100010BD782902D103F0C3F810BD002010BD36 -:100120001FB51FBD10B510BD03F098FD1146FFF7B8 -:10013000F7FF00F0A2F803F0B0FD03B4FFF7F2FF01 +:1001000002D103F0A3F810BD752902D103F09EF8C7 +:1001100010BD782902D103F0CFF810BD002010BD2A +:100120001FB51FBD10B510BD03F0A4FD1146FFF7AC +:10013000F7FF00F0A4F803F0BCFD03B4FFF7F2FFF3 :1001400003BC00F070FA000070B505460C46164678 :1001500002E00FCC0FC5103E102EFAD2082E02D3AB :1001600003CC03C5083E042E07D301CC01C5361FBE :1001700003E021782970641C6D1C761EF9D270BDD5 :1001800070B501217D48C1700146897E481C32212D -:1001900003F01DF979488176807E002819D100246A -:1001A00015E0764A117ED07D224602F0FEF97348B2 -:1001B000027EC17D234672A002F0F8FF002500E018 -:1001C0006D1C76488542FBDB02F0CEFF641C202CC0 -:1001D000E7DB70BD10B586B004466848401C431E7E -:1001E0007F22811E0090813800F0EFFC00F003FDBB -:1001F00062482038C07F162832D100F0E9FD00287F -:100200002ED000F0E8FD5D49886000F0E8FD5B4914 -:10021000C8600846807D497D584A127D574B803B17 -:10022000DB780193029203910490544880388078DF -:1002300000905248803843780278017958A002F043 -:10024000B5FF4E48803802F0D3FE012002F0CCFE0C -:1002500000214A482038C1777F21603803F0ABF88D -:1002600000F099FC00F0A6FC00214448017106B0A2 -:1002700010BD012241490A7170479C213F488038D6 -:1002800003F099F851A002F091FF02F04CFA02F04D -:10029000B8FE524800F029FC514800F029FC5148B2 -:1002A00001F05BF800F08FFD01F06EF84EA002F057 -:1002B0007DFF53A002F07AFF5948816B002001F0C6 -:1002C0000EF904465648C06BA04203D155A002F077 -:1002D0006DFF04E056A002F069FF00BFFEE764A0D6 -:1002E00002F064FF00F057FC00F0EBF900BF00F0F3 -:1002F000D0F90028FBD066A002F058FF002211467A -:10030000FF20E13001F0F5FE00F054FD17211B48FD -:1003100001750A214175122181751721C1750C21C2 -:1003200001760F21417602F089FD26E01348837D96 -:10033000427D017D5AA002F039FF00BF0F480079CD +:1001900003F029F979488176807E00281BD102F08E +:1001A00074FC002415E0754A117ED07D224602F0D1 +:1001B000FCF97248027EC17D234671A003F002F86B +:1001C000002500E06D1C75488542FBDB02F0D3FF83 +:1001D000641C202CE7DB70BD10B586B00446674870 +:1001E000401C431E7F22811E0090813800F0EDFCF0 +:1001F00000F001FD61482038C07F162832D100F0A0 +:10020000E7FD00282ED000F0E6FD5C49886000F094 +:10021000E6FD5A49C8600846807D497D574A127DEF +:10022000564B803BDB780193029203910490534834 +:10023000803880780090514880384378027801797E +:1002400057A002F0BFFF4D48803802F0D1FE0120D8 +:1002500002F0CAFE002149482038C1777F2160386A +:1002600003F0B5F800F097FC00F0A4FC002143482F +:10027000017106B010BD012240490A7170479C21EE +:100280003E48803803F0A3F850A002F09BFF02F034 +:100290004AFA02F0B6FE514800F027FC504800F040 +:1002A00027FC504801F059F800F08DFD01F06CF882 +:1002B0004DA002F087FF52A002F084FF5848816BE6 +:1002C000002001F00CF904465548C06BA04203D150 +:1002D00054A002F077FF04E055A002F073FF00BFC6 +:1002E000FEE763A002F06EFF00F055FC00F0E9F9B4 +:1002F00000BF00F0CEF90028FBD065A002F062FF3D +:1003000000221146FF20E13001F0F4FE00F052FD22 +:1003100017211A4801750A2141751221817517218B +:10032000C1750B2101760F21417626E01348837DAC +:10033000427D017D5AA002F045FF00BF0F480079C1 :100340000028FBD100F057FC0C4B9A7D597D187D9D :1003500002F02BF900F01FFC00F02CFC01F010F86B :1003600055494518284601F003F800210348C1709B @@ -60,8 +60,8 @@ :1003A000706B74207265636569766564206F6E207A :1003B000636825642025642564256425642E2564EE :1003C0002E25642E25640D0A00000000496E697414 -:1003D00069616C697A696E672E2E2E0073020000C7 -:1003E000D5010000810100000D0A2D2D2D2D2D2D90 +:1003D00069616C697A696E672E2E2E0077020000C3 +:1003E000D9010000810100000D0A2D2D2D2D2D2D8C :1003F0002D2D2D2D2D2D2D2D2D2D2D2D2D0D0A009D :1004000056616C69646174696E672070726F67729F :10041000616D20696E746567726974792E2E2E0085 @@ -97,9 +97,9 @@ :1005F000FFF7F6FF10BD10B55124240623781846E6 :10060000FFF7EEFF184610BD10B50446FFF7F3FFE5 :1006100010BD01460020704710B50446044920462D -:10062000FFF7E2FF10BD03A002F0C0FD00BFFEE730 +:10062000FFF7E2FF10BD03A002F0CCFD00BFFEE724 :10063000000000200D0A5445535420444F4E450DF0 -:100640000A00000010B52821E44802F0B4FEE44896 +:100640000A00000010B52821E44802F0C0FEE4488A :10065000E24908621721E148203001710C21417103 :100660000F21817110BD10B50120DC498870002078 :10067000C87017200871002048710F208871002071 @@ -130,13 +130,13 @@ :1008000017D27648006A201A74498968884210D243 :100810007248006A201A71498860084601792030C0 :1008200001712038417920304171203881792030A0 -:1008300081716A4883682146026A77A002F0B6FC9B +:1008300081716A4883682146026A77A002F0C2FC8F :1008400066488079401C65498871084680790F2880 :1008500025DD0F20887108464079401C4871084604 :1008600040791F281BDD0020487108460079401C94 :10087000087108460079192811DD00E075E00120B3 -:10088000C87000221146FF20E13001F032FC5348CD -:1008900020308379427901796AA002F087FC4F48C1 +:10088000C87000221146FF20E13001F033FC5348CC +:1008900020308379427901796AA002F093FC4F48B5 :1008A000C078002806D14D4B9A795979187901F012 :1008B0007CFE06E0494B20339A795979187901F08A :1008C00074FE6848854203D90A98401C0A900BE0E0 @@ -151,11 +151,11 @@ :10095000079801F068FD079800F08AFD069800F0FE :100960008BFD01F0F3FD01F0EBFD06990D98029768 :1009700003940591049009990A982B4601910090DF -:100980003DA00C9A0E9902F011FC14480078192829 +:100980003DA00C9A0E9902F01DFC1448007819281D :1009900022DB12488078002803D01048C078002855 :1009A0001AD00120C0020F498031086000200B4995 :1009B0000870012048700F98C860084605610D98BE -:1009C0004861084684610E98C86137A002F0EEFBCA +:1009C0004861084684610E98C86137A002F0FAFBBE :1009D000002029214906086011B0F0BDEC0000207C :1009E00094D1030000E100E0000004520000105226 :1009F000000014520000185200001C52000028523F @@ -170,7 +170,7 @@ :100A8000202020324D3D25642D25642C25642C2505 :100A9000642020204C433D256420202049463D25EC :100AA000642D25640D0A0000646F6E650D0A000058 -:100AB00010B5FF219931F74802F07DFCF649F7485F +:100AB00010B5FF219931F74802F089FCF649F74853 :100AC0004165C91F41610F21803081824020F44976 :100AD00008601F20890548610820086210BDED49A3 :100AE00008607047EB4948607047EA498860704782 @@ -181,7 +181,7 @@ :100B30000B21DA480174012C02D0022C0AD104E006 :100B4000D649087CFFF7E6FF05E0D449087CFFF7AB :100B5000D6FF00E000BF00BF70BD70B505460C4673 -:100B600022462946CB48103002F0C6FBC948103057 +:100B600022462946CB48103002F0D2FBC94810304B :100B70000121890788600846C4600120086070BDB3 :100B80002820C84908600620C7490860704702202D :100B90004107086070471820C24908600120C24917 @@ -190,12 +190,12 @@ :100BC00008600420010708607047F8B507460C4626 :100BD00015461E463120C0433070AE488030007C40 :100BE00020702078A84205DC2278AC496F3938465D -:100BF00002F082FBF8BD01204003AC4908600020F0 +:100BF00002F08EFBF8BD01204003AC4908600020E4 :100C0000A84908607047F7B584B000BF00F010FC39 :100C1000019000F011FC00909E488030007C029012 :100C20009E488030C08A401C81B29C488030C1827E :100C30000025029AD1009E4B069A5A43104602F0B4 -:100C4000C6FB0390092407E060009A49095A601C1A +:100C4000D2FB0390092407E060009A49095A601C0E :100C50004000984A1152641E002CF5DA039800B245 :100C600094490880002407E060009249085E924998 :100C7000095D48434519641C0A2CF5DD2846E9172F @@ -222,14 +222,14 @@ :100DC000082008627047402035498031086070472C :100DD0003248407C704710B501F00FFB10BD394818 :100DE000006870473848008800B27047F1B5A2B07B -:100DF000402112A802F0DFFA442101A802F0DBFA38 +:100DF000402112A802F0EBFA442101A802F0E7FA20 :100E0000264922984861002478E0A2002349143141 :100E1000885801F07BFD00202921490608602B48F5 :100E20000860012700E07F1C7D20C0018742FAD3C3 :100E30007F202921490608601A4805682448066869 :100E400030044019A10012AA5050611C4900124AF6 :100E5000FE328918129A514308460F49FE3102F0BA -:100E6000ACFA611C890001AA5050002C3BDDA000A7 +:100E6000B8FA611C890001AA5050002C3BDDA0009B :100E700012A90958A0001058143881422AD2A100A2 :100E8000064814304058401CA200044914318850D0 :100E900029E00000BC020020C3020000BC030020C7 @@ -241,7 +241,7 @@ :100EF0002830611C8A00B7498850641C102C84DBA0 :100F0000002400E0641C102CFCDB129823B0F0BD20 :100F1000F0B5B3B005460E460024402121A802F0EA -:100F20004AFA442110A802F046FA2022AA4908A849 +:100F200056FA442110A802F052FA2022AA4908A831 :100F3000FFF70AF92022A84920316846FFF704F993 :100F4000A448143845654FE0A200A24940318858B2 :100F500001F0DCFC00202921490608609F48086058 @@ -249,7 +249,7 @@ :100F700031988842F7DB7F2029214906086098488C :100F8000076898480068329032980004C019A100A0 :100F900021AA505062006B46995A620008AB9A5AD7 -:100FA0007243104602F009FAA10010AA5050A000A6 +:100FA0007243104602F015FAA10010AA5050A0009A :100FB00021A90958A0001058401F814209D2A10060 :100FC000844840304058401CA2008249403188503B :100FD0000AE0A1007F48403040582830611C8A0058 @@ -274,7 +274,7 @@ :101100003F480068202108433D49086008460068C0 :101110003C4908603A480068202188433849086003 :101120000846006837490860334800680A281ED11D -:10113000012406E0A000314A115833A002F036F82D +:10113000012406E0A000314A115833A002F042F821 :10114000641C0A2CF6D3FF200130314908604000AE :101150002F4980390860002027490860002400E0FA :10116000641C2C488442FBD32B482C49C86070BDBA @@ -284,17 +284,17 @@ :1011A000803B1A6052101A4B1A6052001C4B1A6096 :1011B0000F4A10680F4A11680A0412180E4B1B6878 :1011C0009B000E4CE2500C4A1268521C0A4B1A60EB -:1011D00010BD0000D0030020B43C0000FF3F000021 +:1011D00010BD0000D0030020CC3C0000FF3F000009 :1011E0000000285200002C52CB030000BC0200205B :1011F0000000445200004852080000201401002062 :101200001400002000000C5225580D0A00000000B8 :1012100080E100E0102700000400FA0500ED00E086 -:1012200080E200E010B502A001F0C0FF10BD000098 +:1012200080E200E010B502A001F0CCFF10BD00008C :1012300061646320696E7465727275707420747273 :10124000696767657265640D0A00000010B509A042 -:1012500001F0ACFF10BD10B510A001F0A7FF10BD4C -:1012600010B518A001F0A2FF10BD10B51FA001F02D -:101270009DFF10BD45787465726E616C20496E7477 +:1012500001F0B8FF10BD10B510A001F0B3FF10BD34 +:1012600010B518A001F0AEFF10BD10B51FA001F021 +:10127000A9FF10BD45787465726E616C20496E746B :10128000657272757074204750494F3320747269CB :101290006767657265640D0A000000004578746533 :1012A000726E616C20496E7465727275707420473D @@ -304,7 +304,7 @@ :1012E0006767657265640D0A0000000045787465E3 :1012F000726E616C20496E746572727570742047ED :1013000050494F3130207472696767657265640DAA -:101310000A00000010B502A001F048FF10BD000057 +:101310000A00000010B502A001F054FF10BD00004B :101320007561727420727820696E7465727275705E :1013300074207472696767657265640D0A00000045 :101340001E480021016041608160C160481E21216A @@ -316,7 +316,7 @@ :1013A000E007C00F002806D004480068002802D0DB :1013B0000249086880470348446310BD5404002074 :1013C00000E100E04000004210B5CC21FE4801F0F1 -:1013D000F2FF1121FC488030C16203210163152115 +:1013D000FEFF1121FC488030C16203210163152109 :1013E00041630F218163C163F8490164162141649F :1013F000122181641422F6491830FEF7A5FE10BDB3 :10140000F1488030C06A7047EF488030006B704709 @@ -380,37 +380,37 @@ :1017A000D8FEFF20FC30FFF7E3FEFF20FD30FFF7FF :1017B000D0FEFF20FE30FFF7DBFEFF20FF30FFF7FB :1017C000D7FE094812E0000064040020006A1800F7 -:1017D000F43C000055555555333333330F0F0F0F7D -:1017E000B71DC104083D0000FF010000FFF7C0FE67 +:1017D0000C3D000055555555333333330F0F0F0F64 +:1017E000B71DC104203D0000FF010000FFF7C0FE4F :1017F00001204002FFF7BCFEF848FFF7AAFEF748B9 :10180000401CFFF7A6FEF548801CFFF7B1FE8120C3 :101810008000FFF7ADFE0020F1490860F148FFF7B6 :10182000A7FE00BDF3B581B00F4600200090019ED9 -:10183000B800019E82193146EBA001F0B7FCF6A07A -:1018400001F0B4FC00240CE0002507E0A0003058B3 +:10183000B800019E82193146EBA001F0C3FCF6A06E +:1018400001F0C0FC00240CE0002507E0A0003058A7 :101850000121A9408843A10070506D1C202DF5DBAB :10186000641CBC42F0D300241DE0002518E0A00059 :1018700030580121A9400840002809D0A000335861 -:101880002A462146EAA001F091FC0098401C0090F5 +:101880002A462146EAA001F09DFC0098401C0090E9 :10189000A00030580121A9400843A10070506D1CE0 :1018A000202DE4DB641CBC42DFD300241FE00025B4 :1018B0001AE0A00030580121A94008400121A940A8 :1018C000884209D0A00033582A462146E4A001F0FE -:1018D0006DFC0098401C0090A00030580121A940E8 +:1018D00079FC0098401C0090A00030580121A940DC :1018E0008843A10070506D1C202DE2DB641CBC42BB :1018F000DDD37C1E1DE01F2518E0A000305801211B :10190000A9400840002809D0A00033582A462146A3 -:10191000DFA001F04BFC0098401C0090A000305864 +:10191000DFA001F057FC0098401C0090A000305858 :101920000121A9400843A10070506D1E002DE4DA8A :10193000641E002CDFDA7C1E1FE01F251AE0A000C9 :1019400030580121A94008400121A940884209D00E -:10195000A00033582A462146D9A001F027FC009860 +:10195000A00033582A462146D9A001F033FC009854 :10196000401C0090A00030580121A9408843A100EC :1019700070506D1E002DE2DA641E002CDDDA0024AA :1019800016E0002511E0A00030580121A9400840D0 :10199000002809D0A00033582A462146D4A001F0DF -:1019A00005FC0098401C00906D1C202DEBDB641C96 -:1019B000BC42E6D3DAA0009901F0F8FB0098FEBD26 +:1019A00011FC0098401C00906D1C202DEBDB641C8A +:1019B000BC42E6D3DAA0009901F004FC0098FEBD19 :1019C00030B50546002411E028462041C007C00F6D :1019D000002805D02046FF30ED30FFF7C9FD04E0B8 :1019E0002046FF30ED30FFF7B4FD641C062CEBD928 @@ -486,76 +486,76 @@ :101E400088FB641C042CEBDD002411E03046E040EC :101E5000C007C00F002805D0FF211631081BFFF76F :101E600087FB04E0FF211631081BFFF772FB641C9F -:101E7000052CEBDD70BDF8B5F94C650DF948006A2D -:101E80002040F84908620846C06B2840C8630846ED -:101E9000006AF549A1430843F2490862F3484862E1 -:101EA000F3488862F348C862F3480863F34848631C -:101EB000F34888630846C06BF249A9430843E949DF +:101E7000052CEBDD70BDF8B5FA4C650DFA48006A2B +:101E80002040F94908620846C06B2840C8630846EC +:101E9000006AF649A1430843F3490862F4484862DE +:101EA000F4488862F448C862F4480863F448486318 +:101EB000F44888630846C06BF349A9430843EA49DC :101EC000C863FF20A930FFF744FBFF20AA30FFF7CB :101ED0004FFB3F210846FFF79EFF07210846FFF70B :101EE0005EFE00210846FFF736FF00210846FFF797 :101EF00062FF0020FFF72DFB0120FFF72AFB602087 :101F0000FFF727FBFF201030FFF723FBFF20EC300B :101F1000FFF71FFB6420FFF71CFB6520FFF719FB91 -:101F20006620FFF716FB6120FFF722FB0020D64951 -:101F30000860D648D64908606720FFF719FB0B26D2 -:101F40000227F002F9010843D249086005200090F9 -:101F5000D14900980860FF200E30FFF7FAFAFF2001 +:101F20006620FFF716FB6120FFF722FB0020D74950 +:101F30000860D748D74908606720FFF719FB0B26D0 +:101F40000227F002F9010843D349086005200090F8 +:101F5000D24900980860FF200E30FFF7FAFAFF2000 :101F60000F30FFF7F6FA0020FFF72AFDF020FFF709 -:101F7000FFFA5D20C000FFF7FBFAC848FFF7F8FA48 -:101F8000C648401CFFF7F4FA0120C5490860F8BDB7 -:101F900070B5C44C650DB348006A2040B149086271 -:101FA0000846C06B2840C8630846006ABE49A14382 -:101FB0000843AC490862AD484862AD484030886289 -:101FC000BA48C862BA480863BA484863BA488863DE -:101FD0000846C06BB949A9430843A249C863002019 +:101F7000FFFA5D20C000FFF7FBFAC948FFF7F8FA47 +:101F8000C748401CFFF7F4FA0120C6490860F8BDB5 +:101F900070B5C54C650DB448006A2040B24908626E +:101FA0000846C06B2840C8630846006ABF49A14381 +:101FB0000843AD490862AE484862AE484030886286 +:101FC000BB48C862BB480863BB484863BB488863DA +:101FD0000846C06BBA49A9430843A349C863002017 :101FE000FFF7C6FA0120FFF7C3FA0D20FFF792FDB5 :101FF0002620FFF7A6FD5020FFF7BAFDEE20FFF7E1 :10200000B7FAEF20FFF7B4FAFF200E30FFF7A1FA7E :10201000FF200F30FFF79DFA8420FFF7A9FA05266D -:102020009D4806600A210020FFF795FE0020FFF77B -:10203000C7FCF020FFF79CFA01204003A04908608C +:102020009E4806600A210020FFF795FE0020FFF77A +:10203000C7FCF020FFF79CFA01204003A14908608B :10204000F002086070BD10B50A467F238343590132 -:10205000844B9B6F9B4C2340824CA36723469B6F12 -:102060000B43A36710BD7F22824351037D4A926FC9 -:102070007F235B039A437B4B9A671A46926F0A430E -:102080009A67704710B5F023034019090207754B92 -:102090009B6F1B091B01734CA36723469B6F0B436C -:1020A000A3672346DB6F1B011B09E3672346DB6F36 -:1020B0001343E36710BD00B57D20C000FFF758FA59 -:1020C0008148FFF755FA8048401CFFF751FA7E48D7 -:1020D000801CFFF74DFA80207C4908607F20FFF7C5 -:1020E000D1FF3F20FFF7BFFF00217F20FFF7ABFFAD -:1020F00000BD70B50346002400200325AD021D403D -:102100002C010F252D031D402D0B28433F252D01AC -:102110001D40284395022843CD0228431D072D0C5E -:102120002843E5436A4E3560C5436A4E356070BD4D -:10213000002824D14B49C96F04221143494AD16771 -:102140001146C96F02229143464AD1671146803138 -:1021500009680122D2071143424A80321160414985 -:10216000C96F49084900803AD16711468031096832 -:102170000722120711433B4A80321160F6E0012822 -:1021800022D13849C96F02221143364AD16711461C -:10219000C96F04229143334AD167114680310968DF -:1021A000C20711432F4A803211602E49C96F814303 -:1021B000803AD1671146803109680722120711431E -:1021C000284A80321160D1E0022823D12549C96F05 -:1021D00004221143234AD1671146C96F0222914359 -:1021E000204AD1671146803109684A0052081D49CA -:1021F00080310A608039C96F01221143194AD167C1 -:10220000114680310968072212071143154A8032AE -:102210001160ABE003285FD11249C96F042211435A -:10222000104AD1671146C96F022291430D4AD16706 -:10223000114680310968C20711430A4A8032116091 -:102240000849C96F49084900803AD1671146803171 -:102250000968012292079143024A8032116085E0A9 -:102260000000FCFF64040020E0FF50408821420091 -:102270003100048881403B1102817E024448ED0315 -:1022800000000160032EE0FF000038520FA00000A4 -:1022900000003C5200000C5200002452E9020000F1 -:1022A000000040520000FEFFF0FF000081400C10D3 -:1022B0000281180044C87F01010001700008E0FF9E -:1022C0000000105217F0FFFFE903000000002C523D +:10205000854B9B6F7F246401A343834CA367234676 +:102060009B6F0B43A36710BD7F22824351037E4ABF +:10207000926F7F235B039A437B4B9A671A46926F5A +:102080000A439A67704710B5F02303401909020705 +:10209000754B9B6F1B091B01734CA36723469B6FFA +:1020A0000B43A3672346DB6F1B011B09E367234632 +:1020B000DB6F1343E36710BD00B57D20C000FFF761 +:1020C00057FA8148FFF754FA7F48401CFFF750FA4F +:1020D0007D48801CFFF74CFA80207C4908607F20F7 +:1020E000FFF7D1FF7F20FFF7BFFF00213F20FFF761 +:1020F000AAFF00BD70B50346002400200325AD02F1 +:102100001D402C010F252D031D402D0B28433F257D +:102110002D011D40284395022843CD0228431D0769 +:102120002D0C2843E5436A4E3560C543694E356042 +:1021300070BD002824D14C49C96F042211434A4A7A +:10214000D1671146C96F02229143474AD1671146B0 +:10215000803109680122D2071143434A803211605D +:102160004149C96F49084900803AD1671146803119 +:1021700009680722120711433B4A80321160F5E0DB +:10218000012822D13849C96F02221143364AD1674A +:102190001146C96F04229143334AD16711468031F9 +:1021A0000968C2071143304A803211602E49C96F55 +:1021B0008143803AD16711468031096807221207AE +:1021C0001143294A80321160D0E0022823D12649E8 +:1021D000C96F04221143244AD1671146C96F0222F4 +:1021E0009143214AD1671146803109684A0052085B +:1021F0001D4980310A608039C96F012211431A4A92 +:10220000D167114680310968072212071143164A27 +:1022100080321160AAE003285ED11349C96F0422FD +:102220001143114AD1671146C96F022291430E4AE8 +:10223000D167114680310968C20711430A4A8032CA +:1022400011600949C96F49084900803AD1671146B0 +:1022500080310968012292079143034A803211605C +:1022600084E000000000FCFF64040020E0FF504018 +:10227000882142003100048881403B1102817E02A6 +:102280004448ED0300000160032EE0FF00003852D7 +:102290000FA0000000003C5200000C52000024522D +:1022A000E9020000000040520000FEFFF0FF0000C5 +:1022B00081400C100281180044C87F0101000170A8 +:1022C0000008E0FF00001052E903000000002C525B :1022D0000000145200001852042822D1FE49C96F90 :1022E00004221143FC4AD1671146C96F022291436F :1022F000F94AD16711468031096842071143F64A0D @@ -566,10 +566,10 @@ :1023400080310968C2071143E34A80321160E249D3 :10235000C96F49084900803AD16711468031096840 :10236000032252079143DC4A80321160704710B556 -:102370000A467F2383435901D74B9B6F7F24640315 -:10238000A343D54CA36723469B6F0B43A36710BDA4 -:1023900010B5044600213F20FFF7E9FF0420FFF7B6 -:1023A000C7FE01221146FF20E130FFF7A2FEFD200B +:102370000A467F2383435903D74BDB6F7F246403D3 +:10238000A343D54CE3672346DB6F0B43E36710BDE4 +:1023900010B5044600217F20FFF7E9FF0420FFF776 +:1023A000C8FE01221146FF20E130FFF7A3FEFD2009 :1023B0008000FFF7DDF810BD70B503460C467F25A1 :1023C000292676063560C54D2868C54D29680D0457 :1023D0002D181D60C34D2868C34D29680D042D18A4 @@ -636,7 +636,7 @@ :1027A0002C20FEF7E5FE2B20FEF7E2FE2A20FEF7A6 :1027B000DFFE97480930FEF7DBFE96484630FEF70D :1027C000D7FE2920FEF7D4FE022403E02046FEF7C0 -:1027D000CFFE641C092CF9DBFFF74DFBFFF76BFC08 +:1027D000CFFE641C092CF9DBFFF74DFBFFF76CFC07 :1027E000894A916C506C0022FFF71DFE8648C06B31 :1027F00000908548836B1F21426B0846FFF72AFF34 :1028000083482138FEF7B4FE0F220C211720FFF772 @@ -645,7 +645,7 @@ :102830000860012700E07F1C78488742FBDB7F208F :102840002921490608607648046876480568280406 :1028500006190846046874480568280400190090A1 -:102860007003009900F0A9FDF8BD18B5664818304E +:102860007003009900F0B5FDF8BD18B56648183042 :102870000069654C18340090E368A2686168183CF0 :10288000A069FFF7E7FE18BD70B503460C467F252B :10289000292676063560624D2868624D29680D0448 @@ -655,12 +655,12 @@ :1028D00003689B0F0468E40E6340DA07D20F0368B5 :1028E0005B0013430360491C0829F1DB10BD10B5E0 :1028F000002408E0A000444980390A5821464DA030 -:1029000000F054FC641C262CF4D310BDF0B585B047 +:1029000000F060FC641C262CF4D310BDF0B585B03B :10291000054600260027172003908C2002902846A9 -:10292000029900F054FD1330C0B20090284602997D -:1029300000F04DFD0D462846039900F048FD41008A -:102940004018C019C0B201902846039900F03FFD1D -:10295000022800DB00BF2846039900F038FD8819E3 +:10292000029900F060FD1330C0B200902846029971 +:1029300000F059FD0D462846039900F054FD410072 +:102940004018C019C0B201902846039900F04BFD11 +:10295000022800DB00BF2846039900F044FD8819D7 :10296000C4B20F2C00DD641C224601990098FFF7C9 :102970001CFE05B0F0BD24488038806F0121090598 :10298000884321498039886770471F488038806FA5 @@ -675,319 +675,321 @@ :102A10007B04000029020000FF3F000050C30000BB :102A20000000185200001C52000004520000205206 :102A3000000024524153435B25755D203D203078D2 -:102A400025780A0010B57021F74800F0B4FC002189 -:102A5000F5484030017002214170722181703221AD +:102A400025780A0010B57021FA4800F0C0FC00217A +:102A5000F8484030017002214170722181703221AA :102A6000C17080210171C62141712521817101212F :102A7000C1715321017343210C3041705521817084 :102A80004D21C1703321017110BDF0B597B0002701 -:102A90000024AA20169015901490E34840308079C5 -:102AA0008006800E403008904021DF4800F083FC13 -:102AB0002C2109A800F07FFC552239467F1CDA48FA +:102A90000024AA20169015901490E64840308079C2 +:102AA0008006800E403008904021E24800F08FFC04 +:102AB0002C2109A800F08BFC552239467F1CDD48EB :102AC00042546B2239467F1C42547D2239467F1C7A :102AD0004254912239467F1C4254712239467F1C50 :102AE000425440222146641C09A84254A422214693 -:102AF000641C425405250AE0CB494031485DFEF78D +:102AF000641C425405250AE0CE494031485DFEF78A :102B000010FD2146621CD4B209AA50546D1E002D3E -:102B1000F2DAC5484030C07900281AD06022204639 -:102B2000611CCCB209A90A5410222046611CCCB207 -:102B300009A90A5400250AE0BB494C31485DFEF75B +:102B1000F2DAC8484030C07900281AD06022214635 +:102B2000601CC4B209A8425410222046611CCCB2D9 +:102B300009A90A5400250AE0BE494C31485DFEF758 :102B4000F0FC2146621CD4B209AA50546D1C052D1C -:102B5000F2DBB5484030007A002820D0C022204661 -:102B6000611CCCB209A90A5403222146601CC4B2DC -:102B700009A84254AC494031498A0812FEF7D1FCF9 -:102B80002146621CD4B209AA5054A7494031887C1E -:102B9000FEF7C7FC2146621CD4B209AA5054A248D1 +:102B5000F2DBB8484030007A002820D0C02221465D +:102B6000601CC4B209A8425403222046611CCCB2A6 +:102B700009A90A54AF494031498A0812FEF7D1FC2D +:102B80002146621CD4B209AA5054AA494031887C1B +:102B9000FEF7C7FC2146621CD4B209AA5054A548CE :102BA0004030407A00285FD090222046611CCCB291 :102BB00009A90A5443222046611CCCB209A90A542F -:102BC0009949496D080EFEF7ACFC2146621CD4B24F -:102BD00009AA50549449496D0902080EFEF7A1FC58 -:102BE0002146621CD4B209AA50548F49496D090488 +:102BC0009C49496D080EFEF7ACFC2146621CD4B24C +:102BD00009AA50549749496D0902080EFEF7A1FC55 +:102BE0002146621CD4B209AA50549249496D090485 :102BF000080EFEF796FC2146621CD4B209AA505476 -:102C00008949496DC8B2FEF78CFC2146621CD4B2DA -:102C100009AA50548449896D080EFEF782FC2146AA -:102C2000621CD4B209AA50547F49896D0902080E6A -:102C3000FEF777FC2146621CD4B209AA50547A49A7 +:102C00008C49496DC8B2FEF78CFC2146621CD4B2D7 +:102C100009AA50548749896D080EFEF782FC2146A7 +:102C2000621CD4B209AA50548249896D0902080E67 +:102C3000FEF777FC2146621CD4B209AA50547D49A4 :102C4000896D0904080EFEF76CFC2146621CD4B2A3 -:102C500009AA50547449896DC8B2FEF762FC214636 -:102C6000621CD4B209AA50546F484030807A0028C0 -:102C70002FD06D48416E006E6C4A6D4B03910290EF -:102C800000F0C8FD0791069000206A49079B069A4C -:102C900000F026FE0022684B0191009000F0BAFD82 -:102CA0000391029000F0E6FD059005990904080ED5 -:102CB000FEF737FC2146621CD4B209AA505405998C -:102CC000C8B2FEF72EFC2146621CD4B209AA5054A9 -:102CD00000BF55484030C07A00281AD0A0222046B4 -:102CE000611CCCB209A90A5483222046611CCCB2D3 -:102CF00009A90A5400250AE04B496831485DFEF7EE -:102D000010FC2146621CD4B209AA50546D1C042D3B -:102D1000F2DB002431E007252BE009A8005D01214A -:102D2000A940084028411499C907C90F06464E40DA -:102D3000149840101599C907090E08431490159866 -:102D400040101699C9010843B1014840710148403B -:102D5000C0B2159016984010F1010843B1014840E7 -:102D600031014840F100484071004840C0B216901F -:102D70006D1E002DD1DA601CC4B2272CCBDB149859 -:102D8000FEF7CFFB14901598FEF7CBFB1590169825 -:102D9000FEF7C7FB16902146621CD4B209AA14980C -:102DA00050542146621CD4B209AA159850542146A9 -:102DB000621CD4B209AA16985054002423E00725B7 -:102DC0001DE009A8005D0121A940884309A9095D0A -:102DD0000122AA401140089AD207D20FAA405140BE -:102DE000084309A90855089840100899C907490ED1 -:102DF00008430899C907490F484008906D1E002DE7 -:102E0000DFDA601CC4B22A2CD9DB002408E009A850 -:102E1000025D3846791CCFB203490A54601CC4B223 -:102E20002A2CF4DB17B0F0BD30050020666666661C -:102E300066127140000059400000F03F10B50024B8 -:102E40004021D34800F0B7FA1D222146641CD04827 -:102E5000425455222146641C4254AD222146641C32 -:102E60004254F6222146641C425445222146641CE9 -:102E70004254C7222146641C4254C5222146641C88 -:102E800042540E222046611CCCB2C1490A5426226B -:102E90002046611CCCB2BE490A5413222046611C54 -:102EA000CCB2BB490A54C2222046611CCCB2B849FC -:102EB0000A54AC222046611CCCB2B5490A5498226F -:102EC0002046611CCCB2B2490A5437222046611C0C -:102ED000CCB2AF490A54B8222046611CCCB2AC49EE -:102EE0000A5430222046611CCCB2A9490A54A122BE -:102EF0002046611CCCB2A6490A54C9222046611C56 -:102F0000CCB2A3490A54E4222046611CCCB2A049A9 -:102F10000A5493222046611CCCB29D490A54752262 -:102F20002046611CCCB29A490A54B7222046611C43 -:102F3000CCB297490A5441222046611CCCB2944934 -:102F40000A546C222046611CCCB291490A54D12209 -:102F50002046611CCCB28E490A542D222046611CA9 -:102F6000CCB28B490A54B8222046611CCCB28849A5 -:102F70000A5410BD0278864940310A7042784A707E -:102F800082788A70C278CA7002790A7142794A716D -:102F900070477F494031887170477D494031C87121 -:102FA000704710B504460522214679484C3000F0A0 -:102FB000A3F910BD76494031087270477449403119 -:102FC000488270477249403148727047704948657D -:102FD00070476F49886570476D4940318872704706 -:102FE0006B4A51661066704769494031C872704734 -:102FF00010B50446042221466548683000F07CF98B -:1030000010BD10B5F9208000FEF7B2FA6148FEF756 -:10301000A0FA6048401CFEF79CFA5E48801CFEF750 -:1030200098FA7D20C000FEF794FA5A48001DFEF77A -:1030300090FA5848401DFEF78CFA5648801DFEF75E -:1030400088FA54481030FEF793FA52482C30FEF7B5 -:103050008FFA50482D30FEF78BFAF1208000FEF7F2 -:1030600078FA4C485430FEF774FA00204A49086058 -:103070007F20FFF707F8FFF769FAFFF761FA10BD45 -:1030800010B5FEF785FFFF20A930FEF762FAFF209A -:10309000AA30FEF76DFAFF20A730FEF769FA3F214C -:1030A0000846FEF7B8FE07210846FEF778FD4C20DB -:1030B000FEF747FD7B20FEF74CFA5D20C000FEF7CF -:1030C00057FA3448FC38FEF753FA3248FB38FEF71B -:1030D0004FFA012031490860FFF738FAFFF730FA5C -:1030E00010BD00201021084340084000042108437F -:1030F0002021084328490860704770B50020012549 -:10310000284304260546B543284620260546B543F0 -:103110002846214D2860002123E01D4D6C5C0722CC -:103120001CE025461541EB07DB0F002B05D10226DD -:103130000546B5432846184D2860012B03D10225CA -:103140002843154D286008252843134D286008267C -:103150000546B5432846104D2860521E002AE0DA85 -:10316000491C4029D9DB70BD10B5FFF7C6FFFDF73C -:1031700007FD68200A490860FFF7B3FF002400E05C -:10318000641C08488442FBDBFDF735FD10BD0000E0 -:1031900030050020E503000000002C5200004052E2 -:1031A00000002852204E0000704700000FB405496F -:1031B00010B503AA029800F011FD10BC08BC04B0C1 -:1031C0001847000000000020F8B50E460446002015 -:1031D00020622046E1688847002829D0252802D0AF -:1031E0006268A16820E0E168204600278847050062 -:1031F0001ED028464138192802D80127FF02203561 -:103200003246204627602946FCF778FF002808D080 -:10321000012804D0F61DF608F6000836D9E7361D59 -:10322000D7E762682846A1689047206A401CCFE72C -:10323000206AF8BDF7B5002575291068009914A615 -:1032400011D0C046C046002802DA404211A608E06C -:10325000009909688A0701D50FA602E0490704D53D -:103260000EA6012501E0C046C046009F0024243779 -:1032700004E000F0C7FC30313955641C0028F8D157 -:103280002B4632462146009800F04FFCFEBD000060 -:10329000000000002D0000002B00000020000000B6 -:1032A00070B504460D4621461068C046C0462188C8 -:1032B000090502D50F4A7A4402E00E4A7A440E32DA -:1032C00023460021243305E006070009360F965DEA -:1032D0005E54491C0028F7D120780023000705D54B -:1032E000702D03D0002901D002231132204600F0B6 -:1032F0001CFC70BD8E0A0000F8B5042A2CD383078D -:1033000012D00B78491C0370401C521E83070BD04F -:103310000B78491C0370401C521E830704D00B78A5 -:10332000491C0370401C521E8B079B0F05D0C91A05 -:10333000DF002023DE1B08C90AE0FCF705FFF8BD0B -:103340001D4608C9FD401C46B4402C4310C0121F46 -:10335000042AF5D2F308C91A521EF0D40B78491C7E -:103360000370401C521EEAD40B78491C0370401CA9 -:10337000012AE4D409780170F8BD01E004C0091FF6 -:103380000429FBD28B0701D50280801CC90700D01D -:103390000270704700290BD0C30702D00270401C96 -:1033A000491E022904D3830702D50280801C891E8E -:1033B000E3E70022EEE70022DFE7002203098B4269 -:1033C0002CD3030A8B4211D300239C464EE00346C4 -:1033D0000B433CD4002243088B4231D303098B4278 -:1033E0001CD3030A8B4201D394463FE0C3098B42AE -:1033F00001D3CB01C01A524183098B4201D38B0107 -:10340000C01A524143098B4201D34B01C01A5241A9 -:1034100003098B4201D30B01C01A5241C3088B42EE -:1034200001D3CB00C01A524183088B4201D38B00D9 -:10343000C01A524143088B4201D34B00C01A52417B -:10344000411A00D201465241104670475DE0CA0F52 -:1034500000D04942031000D34042534000229C4612 -:1034600003098B422DD3030A8B4212D3FC2289011C -:1034700012BA030A8B420CD3890192118B4208D3F2 -:10348000890192118B4204D389013AD0921100E054 -:103490008909C3098B4201D3CB01C01A5241830968 -:1034A0008B4201D38B01C01A524143098B4201D395 -:1034B0004B01C01A524103098B4201D30B01C01AC0 -:1034C0005241C3088B4201D3CB00C01A524183083A -:1034D0008B4201D38B00C01A5241D9D243088B4290 -:1034E00001D34B00C01A5241411A00D20146634633 -:1034F00052415B10104601D34042002B00D5494297 -:10350000704763465B1000D3404201B50020C046BF -:10351000C04602BD7047704770470000F0B50C46CA -:10352000871A9C410D46861A9D4103D2C01BA141BA -:10353000D21963410D0D1F0DC94EEC1BAE435CD07B -:103540007F057F0D0026002F51D02D05AC46A943E5 -:10355000DD020123ED0A1B051D4320231B1B24D480 -:103560001746E740381871412F46E740CC199D4077 -:103570002818314661410C0D27D161449A4013D57A -:103580000023401C594152000ED140084000012246 -:103590004B005205D34207D305204007C14201D555 -:1035A000B04900E0B0493046F0BD6B00002A00D0C1 -:1035B00001229A181F23203C1B1B01D5002302E087 -:1035C000E540281871410C0DD7D0012424050919B4 -:1035D000C407CD0740084908E40F28436144002C84 -:1035E000D5D00024401C61419A40D0D1CDE76A0576 -:1035F000520DD9D1C90FC907D5E79C4D4E000028FF -:1036000001D0012400E0002434195F00002A01D019 -:10361000012600E00026BE19954FAC420CD8AE4200 -:103620000AD8B44206D001256D05EC42BCD0104644 -:103630001946F0BD9942FCD000203946F0BDF0B5E6 -:103640001FB40C460F46811A9F412546861A9D419C -:1036500006D20125ED076F40401ABC4152187B414C -:10366000210D1E0D8D1BAC467D4D8D437ED0750505 -:103670006D0D7CD00D05AE46AC431B031B0B794D85 -:1036800052429D41202366469B1B14D31746F740A8 -:10369000381800260090744160462F460741E4190F -:1036A00000989D402818664116D4714671189A40BA -:1036B00025D5012320E093182A466A415200002BA9 -:1036C00000D0521C1E23203E9B1B002B61DD354188 -:1036D000EE1728186641E8D5001876415B1C9A4021 -:1036E00000D3401C4B05F3181524E34010D3002BE6 -:1036F00052D071467118D30FC01802D3491C05B0BF -:10370000F0BD0123DB079A42F9D140084000F6E7FB -:1037100001225205B21801D1002853D00123CC0A4E -:10372000DB029943891E002A08D1020C03D0020C47 -:103730000004103902E00246002020390023550B16 -:1037400005D112020823550B01D152010D23550C4E -:1037500001D112011B1DD50C01D192009B1C150D2E -:1037600001D152005B1C2025EE1A01E02CE022E082 -:103770000546F54015439840CA1AE1076918130534 -:10378000C918002ABBDA032040070818C10FC9076F -:103790000FE071466118B2E7F10740080843711065 -:1037A00071444A000CD001235B059A42A7D2C90F8D -:1037B000C9070020A3E74905490D26D1002001E0F3 -:1037C0000028F4D100219AE7284D6600002801D096 -:1037D000012100E0002171185F00002A01D00126BC -:1037E00000E00026BE19224FA94210D8AE420ED8E2 -:1037F000B14208D001256D05E94206D01946A8025C -:10380000414010467BE79C4201D0214677E70020EB -:10381000394674E710B50C465C4005D50124E40731 -:103820006340FFF70CFF10BDFFF778FE10BD30B40A -:103830000C465C4004D50124E407634030BC6DE6CF -:1038400030BCFCE670B50124E40761400D465D40E4 -:1038500002D4FFF763FE70BD6340FFF7F0FE70BD5A -:10386000FF0700000000F0FF0000F07F0000E0FF15 -:103870000000F87F30B50346CA02400D1043164DD4 -:10388000164C0A1502D02043002A06DBAA1A002A89 -:1038900012DDD040FF2A0BDC30BD5205520D01D1A4 -:1038A00040004008AA1A07D4D0404042FF2A01DD58 -:1038B000002030BD0028FCDD4A00002B01D0012093 -:1038C00000E00020101801225205D042F0D8C8179D -:1038D000C043604030BD00001E04000000000080B6 -:1038E000F0B58B4C0F09254689B0BD437BD01D092F -:1038F0002646AE43FAD00E465E402740F60F3E43C2 -:10390000254071D024012142FBD0FF24AD19A4042D -:103910002D1B039501252D05DB02DB0AC9022B4374 -:10392000C90A29431E010901040F130F0501214390 -:103930001701880B820391432D098C46A90B1E4366 -:103940008A039543B30B9A0396433F09BA0B94033A -:10395000A74302962E467E430497B6464E19D719C2 -:103960000C460196544305977E43371B7646BF1B92 -:103970003601B646BE0B361900967646BC0437199A -:10398000009C01D3641C00946400002F01D0012628 -:103990003443029E049F754366467E430496760038 -:1039A00034196E0034190094029C019E1C19664360 -:1039B000751BAE46069465464519059C05956C43F6 -:1039C000594375460891691A0191049E0146514375 -:1039D000A41B0491611A009C0791E10605D06109BE -:1039E0000122114302E072E06EE06109089D0027A8 -:1039F0002C0A2D066918049D7C412A0A2D06691897 -:103A0000019D6241AC0DAD026D185441079A910DB4 -:103A1000920255196141029A644658435443069BE9 -:103A2000059A5A43121A131B9A0E9B015B187A418E -:103A3000010B0005C3185141220A200644195A41BE -:103A40009A4200D2491C01204002814203D315232F -:103A50000226F64302E014230326F6432020C51A6B -:103A6000A9401746AF40DA400A4320460399D840A0 -:103A70000914731819055118039A3843D207514095 -:103A8000AC4009D00122944006D30022401C514191 -:103A9000002C01D1400840001E4A934212D301225B -:103AA00003989206904207DB0520400709181A4840 -:103AB0000143C012414004E0032040070818C10F31 -:103AC000C907002009B0F0BD0020F107FAE705188A -:103AD0000C464C4111486D42A04115D394181A462A -:103AE0005A410E48644290410ED301204A004005DD -:103AF000824209D35A00824206D35940C90F084A6C -:103B0000C90700201143DDE700200649DAE700007D -:103B10000000FF07FE070000FFFFFF7F0000E0FF3F -:103B20000000F07F0000F87F7047FFB504460D46A7 -:103B300081B0243000902168880604D51022E06905 -:103B40009143216000E00120A84201DD471B00E015 -:103B500000270498A1697A191018081AA061207822 -:103B6000C00602D42046C046C046002608E003989E -:103B70006268A168805D9047206A401C761C2062C4 -:103B800004988642F3DB2078C0060AD52046C0465A -:103B9000C04606E06268A16830209047206A401C59 -:103BA000206238467F1E0028F4DC07E00098626837 -:103BB000A168405D9047206A401C206228466D1E27 -:103BC0000028F3DC2046C046C0462078000602D517 -:103BD000022005B0F0BD0120FBE70000084B70B5E6 -:103BE0000D467B4400F027F804462846FCF711FDFB -:103BF000002802D00020C04370BD204670BD0000E8 -:103C000003CAFFFF01468008081A02091018020AB9 -:103C10001018020C1018C008820012185200891ADD -:103C200001E0401C0A390A29FBD2704701694A1C8D -:103C300002610878704700B58FB0029100210591AC -:103C40000549019379440391114604906846FFF7B2 -:103C5000BBFA0FB000BD0000E5FFFFFF754600F0A6 -:103C600025F8AE46050069465346C008C0008546A3 -:103C700018B020B5FCF7A0FC60BC00274908B64688 -:103C80000026C0C5C0C5C0C5C0C5C0C5C0C5C0C56B -:103C9000C0C5403D49008D46704710B50446C0463A -:103CA000C0462046FCF749FA10BD000000487047A6 -:103CB000A005002022038803A1030D01B503B20172 -:103CC00071014202C701CA038B0029014B026D003A -:103CD00075019F00210385039C030B01AC03AD011B -:103CE0006C013902BF01B703880022013C026A005F -:103CF0006A019A001F0000001F0000001D00000064 -:103D000002000000020000006B046D046F047104E7 -:103D10007404760478047A045B045D045F0461042F -:103D20006404660468046A046C046E04700472041B -:103D300073047504770479045C045E04600462040F -:103D4000630465046704690430313233343536372F -:103D500038394142434445464030580030313233CF -:103D600034353637383961626364656640307800CF -:103D7000903D00000000002050000000C400000042 -:103D8000E03D000050000020B0110000E000000005 -:103D90000000005100000051000000000000000081 -:103DA000000000000000000004102540576057404C -:103DB00025100400F4010000F4010000F4010000EB -:103DC000F4010000F4010000F4010000F40100001F -:103DD000F4010000F4010000F40100000000000004 +:102C500009AA50547749896DC8B2FEF762FC214633 +:102C6000621CD4B209AA505472484030807A0028BD +:102C70003BD07048416E006E6F4A704B03910290DA +:102C800000F0D4FD0791069000206D49079B069A3D +:102C900000F032FE00226B4B0191009000F0C6FD67 +:102CA0000391029000F0F2FD0590C0222146601CC5 +:102CB000C4B209A8425483222046611CCCB209A99F +:102CC0000A5405990904080EFEF72BFC2146621CE4 +:102CD000D4B209AA50540599C8B2FEF722FC214685 +:102CE000621CD4B209AA505400BF52484030C07A86 +:102CF00000281AD0A0222046611CCCB209A90A548F +:102D000083222046611CCCB209A90A5400250AE09E +:102D100048496831485DFEF704FC2146621CD4B284 +:102D200009AA50546D1C042DF2DB002431E0072564 +:102D30002BE009A8005D0121A94008402841149911 +:102D4000C907C90F06464E40149840101599C90787 +:102D5000090E08431490159840101699C9010843AC +:102D6000B101484071014840C0B21590169840101A +:102D7000F1010843B101484031014840F1004840A9 +:102D800071004840C0B216906D1E002DD1DA601C53 +:102D9000C4B2272CCBDB1498FEF7C3FB1490159814 +:102DA000FEF7BFFB15901698FEF7BBFB1690214669 +:102DB000621CD4B209AA149850542146621CD4B2A1 +:102DC00009AA159850542146621CD4B209AA169833 +:102DD0005054002423E007251DE009A8005D0121CF +:102DE000A940884309A9095D0122AA401140089A17 +:102DF000D207D20FAA405140084309A908550898A4 +:102E000040100899C907490E08430899C907490F96 +:102E1000484008906D1E002DDFDA601CC4B22A2CD9 +:102E2000D9DB0449C8192A2209A900F071FA17B0A0 +:102E3000F0BD0000300500206666666666127140CF +:102E4000000059400000F03F10B500244021D64852 +:102E500000F0BDFA1D222146641CD348425455227D +:102E60002146641C4254AD222146641C4254F62281 +:102E70002146641C425445222146641C4254C72208 +:102E80002146641C4254C5222146641C42540E2231 +:102E90002046611CCCB2C4490A5426222046611C3B +:102EA000CCB2C1490A5413222046611CCCB2BE499F +:102EB0000A54C2222046611CCCB2BB490A54AC223F +:102EC0002046611CCCB2B8490A5498222046611CA5 +:102ED000CCB2B5490A5437222046611CCCB2B24963 +:102EE0000A54B8222046611CCCB2AF490A543022A1 +:102EF0002046611CCCB2AC490A54A1222046611C78 +:102F0000CCB2A9490A54C9222046611CCCB2A649B8 +:102F10000A54E4222046611CCCB2A3490A549322ED +:102F20002046611CCCB2A0490A5475222046611C7F +:102F3000CCB29D490A54B7222046611CCCB29A49B2 +:102F40000A5441222046611CCCB297490A546C2293 +:102F50002046611CCCB294490A54D1222046611CFF +:102F6000CCB291490A542D222046611CCCB28E4924 +:102F70000A54B8222046611CCCB28B490A5410BDB9 +:102F800010B50446062221468748403000F0C0F9BB +:102F900010BD854940318871704783494031C871FF +:102FA000704710B50446052221467F484C3000F09A +:102FB000AFF910BD7C494031087270477A49403101 +:102FC0004882704778494031487270477649486571 +:102FD00070477549886570477349403188727047FA +:102FE000714A5166106670476F494031C872704728 +:102FF00010B50446042221466B48683000F088F979 +:1030000010BD10B5F9208000FEF7B2FA6748FEF750 +:10301000A0FA6648401CFEF79CFA6448801CFEF744 +:1030200098FA7D20C000FEF794FA6048001DFEF774 +:1030300090FA5E48401DFEF78CFA5C48801DFEF752 +:1030400088FA5A481030FEF793FA58482C30FEF7A9 +:103050008FFA56482D30FEF78BFAF1208000FEF7EC +:1030600078FA52485430FEF774FA0020504908604C +:103070007F20FFF708F87F20FEF7F6FF00213F20B2 +:10308000FEF7E1FFFFF762FAFFF75AFA10BD10B53D +:10309000FEF77EFFFF20A930FEF75BFAFF20AA3083 +:1030A000FEF766FAFF20A730FEF762FA3F210846D6 +:1030B000FEF7B1FE07210846FEF771FD4C20FEF732 +:1030C00040FD7B20FEF745FA5D20C000FEF750FA78 +:1030D0003648FC38FEF74CFA3448FB38FEF748FA1D +:1030E000012034490860FFF731FAFFF729FA10BDD3 +:1030F00000201021084340084000042108432021FB +:1031000008432B490860704770B50020012528430B +:1031100004260546B543284620260546B5432846DD +:10312000234D2860002123E01F4D6C5C07221CE02A +:1031300025461541EB07DB0F002B05D1022605467E +:10314000B54328461A4D2860012B03D10225284398 +:10315000174D286008252843154D28600826054688 +:10316000B5432846124D2860521E002AE0DA491C59 +:103170004029D9DB70BD10B5FFF7C6FFFDF700FD94 +:1031800068200D490860002400E0641C322CFCDB40 +:10319000FFF7AEFF002400E0641C08488442FBDB1C +:1031A000FDF729FD10BD000030050020E5030000FB +:1031B00000002C520000405200002852204E000017 +:1031C000704700000FB4054910B503AA029800F03B +:1031D00011FD10BC08BC04B018470000000000201E +:1031E000F8B50E460446002020622046E168884774 +:1031F000002829D0252802D06268A16820E0E16873 +:1032000020460027884705001ED028464138192847 +:1032100002D80127FF022035324620462760294682 +:10322000FCF76CFF002808D0012804D0F61DF60832 +:10323000F6000836D9E7361DD7E762682846A16848 +:103240009047206A401CCFE7206AF8BDF7B50025FB +:1032500075291068009914A611D0C046C0460028F0 +:1032600002DA404211A608E0009909688A0701D5F0 +:103270000FA602E0490704D50EA6012501E0C046CD +:10328000C046009F0024243704E000F0C7FC303122 +:103290003955641C0028F8D12B4632462146009847 +:1032A00000F04FFCFEBD0000000000002D000000FB +:1032B0002B0000002000000070B504460D4621469A +:1032C0001068C046C0462188090502D50F4A7A44D5 +:1032D00002E00E4A7A440E3223460021243305E0F0 +:1032E00006070009360F965D5E54491C0028F7D189 +:1032F00020780023000705D5702D03D0002901D0C8 +:1033000002231132204600F01CFC70BD8E0A000022 +:10331000F8B5042A2CD3830712D00B78491C03700C +:10332000401C521E83070BD00B78491C0370401CB5 +:10333000521E830704D00B78491C0370401C521E98 +:103340008B079B0F05D0C91ADF002023DE1B08C99D +:103350000AE0FCF7F9FEF8BD1D4608C9FD401C4611 +:10336000B4402C4310C0121F042AF5D2F308C91A26 +:10337000521EF0D40B78491C0370401C521EEAD434 +:103380000B78491C0370401C012AE4D409780170B1 +:10339000F8BD01E004C0091F0429FBD28B0701D549 +:1033A0000280801CC90700D00270704700290BD032 +:1033B000C30702D00270401C491E022904D38307B0 +:1033C00002D50280801C891EE3E70022EEE700227E +:1033D000DFE7002203098B422CD3030A8B4211D36F +:1033E00000239C464EE003460B433CD40022430896 +:1033F0008B4231D303098B421CD3030A8B4201D386 +:1034000094463FE0C3098B4201D3CB01C01A52411D +:1034100083098B4201D38B01C01A524143098B426D +:1034200001D34B01C01A524103098B4201D30B0156 +:10343000C01A5241C3088B4201D3CB00C01A52417B +:1034400083088B4201D38B00C01A524143088B4240 +:1034500001D34B00C01A5241411A00D201465241D9 +:10346000104670475DE0CA0F00D04942031000D3F8 +:103470004042534000229C4603098B422DD3030A4D +:103480008B4212D3FC22890112BA030A8B420CD35D +:10349000890192118B4208D3890192118B4204D386 +:1034A00089013AD0921100E08909C3098B4201D306 +:1034B000CB01C01A524183098B4201D38B01C01A40 +:1034C000524143098B4201D34B01C01A52410309B7 +:1034D0008B4201D30B01C01A5241C3088B4201D366 +:1034E000CB00C01A524183088B4201D38B00C01A13 +:1034F0005241D9D243088B4201D34B00C01A5241EA +:10350000411A00D20146634652415B10104601D376 +:103510004042002B00D54942704763465B1000D300 +:10352000404201B50020C046C04602BD704770470A +:1035300070470000F0B50C46871A9C410D46861A6C +:103540009D4103D2C01BA141D21963410D0D1F0D36 +:10355000C94EEC1BAE435CD07F057F0D0026002FCB +:1035600051D02D05AC46A943DD020123ED0A1B0510 +:103570001D4320231B1B24D41746E74038187141F4 +:103580002F46E740CC199D402818314661410C0D6B +:1035900027D161449A4013D50023401C5941520061 +:1035A0000ED14008400001224B005205D34207D300 +:1035B00005204007C14201D5B04900E0B04930467E +:1035C000F0BD6B00002A00D001229A181F23203C76 +:1035D0001B1B01D5002302E0E540281871410C0DAA +:1035E000D7D0012424050919C407CD07400849088C +:1035F000E40F28436144002CD5D00024401C6141D5 +:103600009A40D0D1CDE76A05520DD9D1C90FC9076B +:10361000D5E79C4D4E00002801D0012400E0002495 +:1036200034195F00002A01D0012600E00026BE19EF +:10363000954FAC420CD8AE420AD8B44206D0012510 +:103640006D05EC42BCD010461946F0BD9942FCD045 +:1036500000203946F0BDF0B51FB40C460F46811A64 +:103660009F412546861A9D4106D20125ED076F40F0 +:10367000401ABC4152187B41210D1E0D8D1BAC46DA +:103680007D4D8D437ED075056D0D7CD00D05AE460C +:10369000AC431B031B0B794D52429D4120236646D0 +:1036A0009B1B14D31746F74038180026009074412E +:1036B00060462F460741E41900989D40281866414E +:1036C00016D4714671189A4025D5012320E093182D +:1036D0002A466A415200002B00D0521C1E23203E75 +:1036E0009B1B002B61DD3541EE1728186641E8D59C +:1036F000001876415B1C9A4000D3401C4B05F31820 +:103700001524E34010D3002B52D071467118D30F0B +:10371000C01802D3491C05B0F0BD0123DB079A4253 +:10372000F9D140084000F6E701225205B21801D154 +:10373000002853D00123CC0ADB029943891E002ABA +:1037400008D1020C03D0020C0004103902E002463A +:10375000002020390023550B05D112020823550BF8 +:1037600001D152010D23550C01D112011B1DD50CA5 +:1037700001D192009B1C150D01D152005B1C20252C +:10378000EE1A01E02CE022E00546F5401543984092 +:10379000CA1AE10769181305C918002ABBDA032001 +:1037A00040070818C10FC9070FE071466118B2E75A +:1037B000F10740080843711071444A000CD00123FE +:1037C0005B059A42A7D2C90FC9070020A3E74905A4 +:1037D000490D26D1002001E00028F4D100219AE70C +:1037E000284D6600002801D0012100E00021711859 +:1037F0005F00002A01D0012600E00026BE19224FFA +:10380000A94210D8AE420ED8B14208D001256D05AC +:10381000E94206D01946A802414010467BE79C4287 +:1038200001D0214677E70020394674E710B50C46F1 +:103830005C4005D50124E4076340FFF70CFF10BD91 +:10384000FFF778FE10BD30B40C465C4004D501246F +:10385000E407634030BC6DE630BCFCE670B5012483 +:10386000E40761400D465D4002D4FFF763FE70BD82 +:103870006340FFF7F0FE70BDFF0700000000F0FF9F +:103880000000F07F0000E0FF0000F87F30B5034645 +:10389000CA02400D1043164D164C0A1502D02043A3 +:1038A000002A06DBAA1A002A12DDD040FF2A0BDC10 +:1038B00030BD5205520D01D140004008AA1A07D46C +:1038C000D0404042FF2A01DD002030BD0028FCDD51 +:1038D0004A00002B01D0012000E000201018012236 +:1038E0005205D042F0D8C817C043604030BD000038 +:1038F0001E04000000000080F0B58B4C0F09254627 +:1039000089B0BD437BD01D092646AE43FAD00E4692 +:103910005E402740F60F3E43254071D024012142EE +:10392000FBD0FF24AD19A4042D1B039501252D0503 +:10393000DB02DB0AC9022B43C90A29431E01090124 +:10394000040F130F050121431701880B82039143D4 +:103950002D098C46A90B1E438A039543B30B9A038A +:1039600096433F09BA0B9403A74302962E467E4323 +:103970000497B6464E19D7190C460196544305973D +:103980007E43371B7646BF1B3601B646BE0B361943 +:1039900000967646BC043719009C01D3641C009441 +:1039A0006400002F01D001263443029E049F75431A +:1039B00066467E430496760034196E0034190094EE +:1039C000029C019E1C196643751BAE460694654613 +:1039D0004519059C05956C43594375460891691A2C +:1039E0000191049E01465143A41B0491611A009C5D +:1039F0000791E10605D061090122114302E072E05E +:103A00006EE06109089D00272C0A2D066918049DA7 +:103A10007C412A0A2D066918019D6241AC0DAD0258 +:103A20006D185441079A910D920255196141029AFD +:103A3000644658435443069B059A5A43121A131B73 +:103A40009A0E9B015B187A41010B0005C318514186 +:103A5000220A200644195A419A4200D2491C0120E8 +:103A60004002814203D315230226F64302E01423C9 +:103A70000326F6432020C51AA9401746AF40DA4076 +:103A80000A4320460399D8400914731819055118A0 +:103A9000039A3843D2075140AC4009D001229440E8 +:103AA00006D30022401C5141002C01D140084000A7 +:103AB0001E4A934212D3012203989206904207DBDA +:103AC0000520400709181A480143C012414004E08C +:103AD000032040070818C10FC907002009B0F0BD36 +:103AE0000020F107FAE705180C464C4111486D42D9 +:103AF000A04115D394181A465A410E486442904189 +:103B00000ED301204A004005824209D35A00824266 +:103B100006D35940C90F084AC90700201143DDE701 +:103B200000200649DAE700000000FF07FE0700005A +:103B3000FFFFFF7F0000E0FF0000F07F0000F87F44 +:103B40007047FFB504460D4681B0243000902168CF +:103B5000880604D51022E0699143216000E001202D +:103B6000A84201DD471B00E000270498A1697A19EB +:103B70001018081AA0612078C00602D42046C0465A +:103B8000C046002608E003986268A168805D9047FF +:103B9000206A401C761C206204988642F3DB207861 +:103BA000C0060AD52046C046C04606E06268A16845 +:103BB00030209047206A401C206238467F1E002833 +:103BC000F4DC07E000986268A168405D9047206AD5 +:103BD000401C206228466D1E0028F3DC2046C046AB +:103BE000C0462078000602D5022005B0F0BD0120B5 +:103BF000FBE70000084B70B50D467B4400F027F84A +:103C000004462846FCF705FD002802D00020C043EA +:103C100070BD204670BD0000EBC9FFFF0146800863 +:103C2000081A02091018020A1018020C1018C0080D +:103C3000820012185200891A01E0401C0A390A2930 +:103C4000FBD2704701694A1C02610878704700B5D1 +:103C50008FB00291002105910549019379440391A8 +:103C6000114604906846FFF7BBFA0FB000BD000094 +:103C7000E5FFFFFF754600F025F8AE4605006946F2 +:103C80005346C008C000854618B020B5FCF794FC28 +:103C900060BC00274908B6460026C0C5C0C5C0C5DF +:103CA000C0C5C0C5C0C5C0C5C0C5403D49008D46E2 +:103CB000704710B50446C046C0462046FCF73DFAA2 +:103CC00010BD000000487047A005002022038803B3 +:103CD000A1030D01B503B20171014202C701CA037C +:103CE0008B0029014B026D0075019F0021038503A4 +:103CF0009C030B01AC03AD016C013902BF01B7039A +:103D0000880022013C026A006A019A001F0000003C +:103D10001F0000001D000000020000000200000063 +:103D20006B046D046F0471047404760478047A04DF +:103D30005B045D045F0461046404660468046A044F +:103D40006C046E04700472047304750477047904BF +:103D50005C045E046004620463046504670469042F +:103D600030313233343536373839414243444546B1 +:103D700040305800303132333435363738396162AB +:103D80006364656640307800A83D000000000020B4 +:103D900050000000C4000000F83D0000500000206A +:103DA000B0110000E00000000000005100000051D0 +:103DB0000000000000000000000000000000000003 +:103DC000041025405760574025100400F4010000FE +:103DD000F4010000F4010000F4010000F40100000F +:103DE000F4010000F4010000F4010000F4010000FF +:083DF000F401000000000000D6 :0400000500000000F7 :00000001FF diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index 25823952..c1f0b3cc 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -158,12 +158,10 @@ int main(void) { #else // CHANGE THESE VALUES AFTER LC CALIBRATION. app_vars.tx_coarse = 23; - app_vars.tx_mid = 12; + app_vars.tx_mid = 11; app_vars.tx_fine = 15; #endif - ble_gen_test_packet(); - while (1) { printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); while (app_vars.rxFrameStarted); @@ -238,6 +236,8 @@ void cb_timer(void) { app_vars.rx_iteration = (app_vars.rx_iteration + 1) % BLE_TX_PERIOD; if (app_vars.rx_iteration == 0) { + ble_gen_packet(); + #if BLE_SWEEP_FINE for (tx_fine = 0; tx_fine < 32; ++tx_fine) { LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, tx_fine); From 6ef0d710bff6eb27b9d247748028f5c30e5834bc Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Mon, 17 Feb 2020 14:38:36 -0800 Subject: [PATCH 07/26] Fix LC and IF calibration --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15524 -> 15512 bytes .../applications/ble_tx/Objects/ble_tx.hex | 1831 ++++++++-------- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15864 -> 15852 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 1855 ++++++++--------- .../ble_tx_154_rx/ble_tx_154_rx.c | 14 +- scm_v3c/ble.c | 1 - scm_v3c/optical.c | 2 - 7 files changed, 1849 insertions(+), 1854 deletions(-) diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin index 98d6968c506a23791de88bc91b02b718d5b1db8b..60cc591a2b3ae25433402f3df989d67576061a32 100644 GIT binary patch delta 1062 zcmZuwU1%It6h3!$yBYU);E zu4uENhOUZa(y_AfL1M9ggksCGEl8GZpcIRWNqnfKL^ltT7r|TmkX_QucyOto2re9^81K zm7LLMn1jDs?LyZ}mcVN@fxm5bF~a>-;PGw3qt#BV^;_MDy;eV)JPDNWrK(fuW#yA| zamPvzRt{RuN-sv)f<<#fQINJ_Lzil>2>jC;$Xm-Q=E4^2$7bnz2jTN(6ZNX1=Aldr z(3~dlQ(OKD@IS0Ub$G9=0ROe{rqDt{%@)w?BPmBpq)2QAeAamA2$EUjYez5?`=9!> zUH`m0jSSCGW_}o9eU;EVV@fSq@o;MX9EAuTxY+l z;?bt)Z;W=3ls7t%3PdMU5>B7c`$lk2+r(M?J3q5nT1)(dPA%~xIw4bbmHk@cF7nt8 zzk@ux!wD@5w^eaeOK1sRoVgBs+Vtwcb<=}5W4aN~nNJ`ZW&;l6b5lfq-fTep!gT2q zv^}c2#L*iJCepFUw>Zgm8gsdl*BK-wUCM(q8xH8#m@9ehKN-J1kD2-1%vAU)>Z`l@ zqwrRYvPx!d$ z$pcqSFJjz0%d%;ZPcKigGRF5;&M-JJ7vKBKBt~e?svjqF@y6BDw)((WbTzj&SH^8m z)9Skz>C-9OBdw0v>Ycjh&~bJq8C8T6@8NPSJU+&40^Uf7M6jQ2elGav=YFkvGn3N`OX|9alG$t<4`|tA};3$!fkx= J#z6nEe*oVek7@t_ delta 1078 zcmZuwUuaup6hGfhnr3a%+!|vWo7pcb#e@xQ?Fy?cn5FB@cVFDbsxMLT6Ddh(#N( zuD43&>Z%ERU)9D%ZGap}AF1`TXp$tmq}_7@KWaiZR9+A4VJD(%%L3nRz7n9j?ky`t zdvGVS@fWLo=sI8u+^h+F!sug!KUxLOHVA*R+KaWQ*^l^~ImD(XfD(SAYL^CBX<{yF zTiSz_XH0u#0OM08EExAB327J``nm=Sz)#m8w6-W?uG54a*et!%L--Y=jk;u~(oC7+ zp;<-XZ>_adfZsQV<&pM~1pIgXu&|x@f+o<+LorK=q(CeN{G9f{<|XH}^ER(f`k(q) ztFBsj+QO3-n)Nrxd>yrj{o}p2H|qV`0jRrabmY(|-M9bw5qA>+h=ow_E)#gkxXb>K zoiDcq?=ad!60YFhgeN$i5OMm1{-${wy3!xw-zl?5Qi(01Q;GeIPDqs;r4}W28+l}t z-$I_*>s+a?N#_v({%n{H3C)1){#?0ld%nAQI>iI2w z+VDWn+VzE=UP3PF4|=aSy$u@>5*C4$hLs|flp?@=t?=v=Iiu|ye46~J9Ui>ZdSD1Q R6PI-q;YWNfX#GP+{|1IempA|b diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.hex b/scm_v3c/applications/ble_tx/Objects/ble_tx.hex index 45eb001f..9ac84a96 100644 --- a/scm_v3c/applications/ble_tx/Objects/ble_tx.hex +++ b/scm_v3c/applications/ble_tx/Objects/ble_tx.hex @@ -10,33 +10,33 @@ :1000800000F002F800F050F80CA030C8083824182E :100090002D18A246671EAB4654465D46AC4201D1C0 :1000A00000F042F87E460F3E0FCCB64601263342A2 -:1000B00000D0FB1AA246AB4633431847743B0000FE -:1000C000943B0000103A02D378C878C1FAD852079E +:1000B00000D0FB1AA246AB4633431847683B00000A +:1000C000883B0000103A02D378C878C1FAD85207AA :1000D00001D330C830C101D504680C6070470000FE :1000E0000023002400250026103A01D378C1FBD854 :1000F000520700D330C100D50B60704710B564299A -:1001000002D102F0F7FF10BD752902D102F0F2FF13 -:1001100010BD782902D103F023F810BD002010BDD6 -:100120001FB51FBD10B510BD03F0F8FC1146FFF759 -:10013000F7FF00F044F803F010FD03B4FFF7F2FFFF +:1001000002D102F0F1FF10BD752902D102F0ECFF1F +:1001100010BD782902D103F01DF810BD002010BDDC +:100120001FB51FBD10B510BD03F0F2FC1146FFF75F +:10013000F7FF00F044F803F00AFD03B4FFF7F2FF05 :1001400003BC00F0C4F9000070B505460C46164625 :1001500002E00FCC0FC5103E102EFAD2082E02D3AB :1001600003CC03C5083E042E07D301CC01C5361FBE :1001700003E021782970641C6D1C761EF9D270BDD5 :1001800070B501203A49C870002415E0384A51780A -:100190001078224602F05DF935484278017823460E -:1001A00034A002F063FF002500E06D1C3848854252 -:1001B000FBDB02F034FF641C202CE7DB70BD042164 -:1001C0002B4803F056F833A002F050FF02F0FFF97D -:1001D00002F06BFE334801F014F800F048FD01F026 -:1001E00027F831A002F042FF35A002F03FFF3C4863 -:1001F000816B002001F0C7F804463948C06BA0426B -:1002000003D138A002F032FF04E039A002F02EFF43 -:1002100000BFFEE746A002F029FF00F0A6F900BFEC -:1002200000F08BF90028FBD049A002F01FFF00224C -:100230001146FF20E13001F0B1FE17200C49087093 -:100240000B2048700F20887002F073FB0EE000F066 -:10025000EBFF43494518284600F0DEFF0020044923 +:100190001078224602F057F9354842780178234614 +:1001A00034A002F05DFF002500E06D1C3848854258 +:1001B000FBDB02F02EFF641C202CE7DB70BD04216A +:1001C0002B4803F050F833A002F04AFF02F0F9F98F +:1001D00002F065FE334801F00EF800F042FD01F038 +:1001E00021F831A002F03CFF35A002F039FF3C4875 +:1001F000816B002001F0C1F804463948C06BA04271 +:1002000003D138A002F02CFF04E039A002F028FF4F +:1002100000BFFEE746A002F023FF00F0A6F900BFF2 +:1002200000F08BF90028FBD049A002F019FF002252 +:100230001146FF20E13001F0ABFE17200C49087099 +:100240000B2048700F20887002F06DFB0EE000F06C +:10025000E5FF43494518284600F0D8FF002004492F :10026000C87000BF0248C0780028FBD0EFE700004C :10027000000000205472616E736D697474696E675A :10028000206F6E2025752025752025750A00000039 @@ -54,18 +54,18 @@ :1003400075656E636965732E2E2E0D0A0000000020 :1003500043616C20636F6D706C6574650D0A0000FD :1003600050C300004149424808604248004701B577 -:10037000012080F3108800F021FF002080F3108816 -:1003800001BD01B5012080F3108800F09FFE002020 +:10037000012080F3108800F01BFF002080F310881C +:1003800001BD01B5012080F3108800F099FE002026 :1003900080F3108801BD01B5012080F3108800F0C2 -:1003A0009FFD002080F3108801BD01B5012080F37E -:1003B000108800F046FF002080F3108801BD01B5D1 -:1003C000012080F3108800F095FE002080F3108853 -:1003D00001BD01B5012080F3108800F090FE0020DF +:1003A00099FD002080F3108801BD01B5012080F384 +:1003B000108800F040FF002080F3108801BD01B5D7 +:1003C000012080F3108800F08FFE002080F3108859 +:1003D00001BD01B5012080F3108800F08AFE0020E5 :1003E00080F3108801BD01B5012080F3108800F072 -:1003F0008BFE002080F3108801BD01B5012080F341 -:10040000108800F086FE002080F3108801BD01B541 -:10041000012080F3108800F0FFFD002080F3108899 -:1004200001BD01B5012080F3108800F0ACFD002073 +:1003F00085FE002080F3108801BD01B5012080F347 +:10040000108800F080FE002080F3108801BD01B547 +:10041000012080F3108800F0F9FD002080F310889F +:1004200001BD01B5012080F3108800F0A6FD002079 :1004300080F3108801BD01B5012080F3108800F021 :1004400099F8002080F3108801BD01B5012080F3E8 :10045000108800F090F8002080F3108801BD0000A3 @@ -76,899 +76,898 @@ :1004A0005124240623781846FFF7EEFF184610BDA6 :1004B00010B50446FFF7F3FF10BD0146002070475A :1004C00010B5044604492046FFF7E2FF10BD03A023 -:1004D00002F0CCFD00BFFEE7040000200D0A5445E9 +:1004D00002F0C6FD00BFFEE7040000200D0A5445EF :1004E000535420444F4E450D0A00000010B52821FA -:1004F000E44802F0C0FEE448E24908621721E148FE +:1004F000E14802F0BAFEE148DF4908621721DE4810 :10050000203001710C2141710F21817110BD10B596 -:100510000120DC4988700020C87017200871002075 +:100510000120D94988700020C87017200871002078 :1005200048710F2088710020C04388600B469A797B -:100530005979187901F08DFF10BDD2484078704785 -:10054000D04908627047CF4820300079C006C00EFD -:100550007047CC4820304079C006C00E7047C9486B -:1005600020308079C006C00E70470120C002C74904 -:10057000086070477047F0B591B000F095FE0C90A0 -:1005800000F096FE0B9000F097FE0A9000F098FEA7 -:10059000099000F099FE074600F09AFE089000F0DE -:1005A0009BFE079000F09CFE06907F2029214906C3 -:1005B0000860B4480078401CB24908702920400601 -:1005C0000668B348006810901098000480190F90D6 -:1005D000B0480668B0480068109010980004801970 -:1005E0000E90AE480668AE4800681090109800045F -:1005F0008519AC480668AC48006810901098000453 -:100600008419AA480668AA48006810901098000447 -:1006100080190D900020292149060860A54808602E -:100620009848007802287DDDA3490E98884202D2BE -:100630000C98401E0C90A1490E98884202D90C9843 -:10064000401C0C900C990B9801F07BFE0B9800F06D -:100650004FFE0C9800F048FE8A48807800287CD035 -:100660008848C078002878D18648006AA04218D30C -:100670008448006A001B83498968884211D28148F6 -:10068000006A001B7F4988600846017920300171AB +:100530005979187901F087FF10BDCF48407870478E +:10054000CD4908627047CC4820300079C006C00E03 +:100550007047C94820304079C006C00E7047C64871 +:1005600020308079C006C00E70470120C002C44907 +:10057000086070477047F0B591B000F08FFE0C90A6 +:1005800000F090FE0B9000F091FE0A9000F092FEB9 +:10059000099000F093FE074600F094FE089000F0EA +:1005A00095FE079000F096FE06907F2029214906CF +:1005B0000860B1480078401CAF4908702920400607 +:1005C0000668B048006810901098000480190F90D9 +:1005D000AD480668AD480068109010980004801976 +:1005E0000E90AB480668AB48006810901098000465 +:1005F0008519A9480668A948006810901098000459 +:100600008419A7480668A74800681090109800044D +:1006100080190D900020292149060860A248086031 +:100620009548007802287DDDA0490E98884202D2C4 +:100630000C98401E0C909E490E98884202D90C9846 +:10064000401C0C900C990B9801F075FE0B9800F073 +:1006500049FE0C9800F042FE8748807800287ED042 +:100660008548C07800287AD18348006AA04218D310 +:100670008148006A001B80498968884211D27E48FF +:10068000006A001B7C4988600846017920300171AE :1006900020384179203041712038817920308171B2 -:1006A0001BE07848006AA04217D27648006A201AF8 -:1006B00074498968884210D27248006A201A7149C8 +:1006A0001BE07548006AA04217D27348006A201AFE +:1006B00071498968884210D26F48006A201A6E49D1 :1006C0008860084601792030017120384179203056 -:1006D000417120388179203081716A4883682146D0 -:1006E000026A77A002F0C2FC66488079401C654926 -:1006F0008871084680790F2825DD0F20887108460B -:100700004079401C4871084640791F281BDD0020B5 +:1006D00041712038817920308171674883682146D3 +:1006E000026A74A002F0BCFC63488079401C624935 +:1006F0008871084680790F281FDD0F208871084611 +:100700004079401C4871084640791F2815DD0020BB :10071000487108460079401C08710846007919287C -:1007200011DD00E075E00120C87000221146FF20B5 -:10073000E13001F033FC534820308379427901796C -:100740006AA002F093FC4F48C078002806D14D4BB8 -:100750009A795979187901F07CFE06E0494B2033EB -:100760009A795979187901F074FE6848854203D95D -:100770000A98401C0A900BE06548854203D9099805 -:10078000401C099004E062484138854200D97F1C32 -:100790006048854203D20A98401E0A900CE05C48EB -:1007A000A038854203D20998401E099004E05848B9 -:1007B0005F38854200D27F1E00971F210846099BA3 -:1007C0000A9A01F09BFE0A9800F096FD099800F045 -:1007D00097FD384600F098FD4F490D98884202D9A0 -:1007E0000698401C06904D490D98884202D2069802 -:1007F000401E069000220699079801F068FD0798B0 -:1008000000F08AFD069800F08BFD01F0F3FD01F089 -:10081000EBFD06990D9802970394059104900999B0 -:100820000A982B46019100903DA00C9A0E9902F077 -:100830001DFC14480078192822DB12488078002813 -:1008400003D01048C07800281AD00120C0020F49F8 -:100850008031086000200B490870012048700F9813 -:10086000C860084605610D984861084684610E9885 -:10087000C86137A002F0FAFB002029214906086070 -:1008800011B0F0BD5400002094D1030000E100E05D -:1008900000000452000010520000145200001852D0 -:1008A00000001C520000285200002C520000305260 -:1008B00000003452FF3F0000C8781E0038901E0030 -:1008C000636F756E745F4C433A2025752C204C4342 -:1008D0005F7461726765743A2025752C204C435F04 -:1008E000646966663A2025750A000000636F6172CC -:1008F00073653A2025752C206D69643A2025752C86 -:100900002066696E653A2025750A0000980F03007D -:10091000900D0300E80A0300786F1800886418003F -:1009200048463D25642D2564202020324D3D256418 -:100930002D25642C25642C25642020204C433D2546 -:100940006420202049463D25642D25640D0A0000C1 -:10095000646F6E650D0A000010B5FF219931F748EC -:1009600002F089FCF649F7484165C91F41610F2132 -:10097000803081824020F44908601F208905486149 -:100980000820086210BDED4908607047EB494860D7 -:100990007047EA4988607047E849C860704710208E -:1009A00081060860704710B5044621460B398A005D -:1009B000E4491431885801F0FDFE10BD10B504461D -:1009C00021460B398A00DF495431885801F0F2FE84 -:1009D00010BD70B505460C460B21DA480174012C98 -:1009E00002D0022C0AD104E0D649087CFFF7E6FFCA -:1009F00005E0D449087CFFF7D6FF00E000BF00BF48 -:100A000070BD70B505460C4622462946CB481030CD -:100A100002F0D2FBC94810300121890788600846DE -:100A2000C4600120086070BD2820C8490860062005 -:100A3000C7490860704702204107086070471820C6 -:100A4000C24908600120C2490860BE48703841218F -:100A500009064861102081060860704701204003A4 -:100A6000BC4908600520C002086004200107086036 -:100A70007047F8B507460C4615461E463120C04360 -:100A80003070AE488030007C20702078A84205DCB1 -:100A90002278AC496F39384602F08EFBF8BD012050 -:100AA0004003AC4908600020A84908607047F7B5CA -:100AB00084B000BF00F010FC019000F011FC009029 -:100AC0009E488030007C02909E488030C08A401C46 -:100AD00081B29C488030C1820025029AD1009E4B91 -:100AE000069A5A43104602F0D2FB0390092407E00D -:100AF00060009A49095A601C4000984A1152641ECD -:100B0000002CF5DA039800B294490880002407E02D -:100B100060009249085E9249095D48434519641C8A -:100B20000A2CF5DD2846E917C90D09184F1285482A -:100B30008030C18A808A814216D17D20C0008742E0 -:100B400007DD0098421C014600920022019801F046 -:100B5000BEFB8448874207DA0098421E0146009295 -:100B60000022019801F0B3FB019800F0D5FB00983A -:100B700000F0D6FB0025059819286DD2092407E05E -:100B8000A00079490958601C8000774A1150641E02 -:100B9000002CF5DA744904980860002407E0A000EE -:100BA000714908586E49095D48434519641C0A2C6F -:100BB000F5DD2846E917C90D09184E126148803045 -:100BC000C18A808A814247D14120C00086421DD916 -:100BD0005C48007C0B3881005A4814304058401C57 -:100BE0005849097C0B398A005649143188505548B8 -:100BF000007C0B388100534854304058401C514908 -:100C0000097C0B398A004F4954318850FF20E1306C -:100C100086421DD24B48007C0B3881004948143075 -:100C20004058401E4749097C0B398A004549143118 -:100C300088504448007C0B3881004248543040586A -:100C4000401E4049097C0B398A003E495431885086 -:100C500000213C488030C18207B0F0BD40203A49B5 -:100C600008601C2089054861082008627047402000 -:100C700035498031086070473248407C704710B574 -:100C800001F00FFB10BD39480068704738480088F4 -:100C900000B27047F1B5A2B0402112A802F0EBFA01 -:100CA000442101A802F0E7FA26492298486100246D -:100CB00078E0A20023491431885801F07BFD002020 -:100CC0002921490608602B480860012700E07F1CA5 -:100CD0007D20C0018742FAD37F2029214906086080 -:100CE0001A4805682448066830044019A10012AA71 -:100CF0005050611C4900124AFE328918129A514321 -:100D000008460F49FE3102F0B8FA611C890001AAB9 -:100D10005050002C3BDDA00012A90958A00010582B -:100D2000143881422AD2A100064814304058401C91 -:100D3000A20004491431885029E000002402002058 -:100D4000C30200002403002000E100E0000028525C -:100D50000000405200001052093D00000C0200202B -:100D60001C00002018FCFFFF280000200000545247 -:100D700000006452FF3F000000002C52A100BF4859 -:100D800040582830611C8A00BC498850641C002CE3 -:100D900008D1A100B94840582830611C8A00B749E1 -:100DA0008850641C102C84DB002400E0641C102C90 -:100DB000FCDB129823B0F0BDF0B5B3B005460E468B -:100DC0000024402121A802F056FA442110A802F084 -:100DD00052FA2022AA4908A8FFF7B6F92022A8490A -:100DE00020316846FFF7B0F9A448143845654FE054 -:100DF000A200A2494031885801F0DCFC00202921E2 -:100E0000490608609F4808600120319002E031984F -:100E1000401C31907D21C90131988842F7DB7F2049 -:100E20002921490608609848076898480068329068 -:100E300032980004C019A10021AA505062006B46EC -:100E4000995A620008AB9A5A7243104602F015FA9A -:100E5000A10010AA5050A00021A90958A0001058C4 -:100E6000401F814209D2A100844840304058401CB4 -:100E7000A2008249403188500AE0A1007F484030FA -:100E800040582830611C8A007C4940318850641CDD -:100E9000102CADDB33B0F0BD70B504462046FFF733 -:100EA000F9FE05467A4800F0A8FAFF202B3000F042 -:100EB000B3FAFF20343000F0AFFAFF20F93000F031 -:100EC0009CFAFF20FB3000F0A7FAFF20FD3000F075 -:100ED000A3FA29462046FFF76FFFFFF7E0FD70BD3C -:100EE00070B5012080070469C56901216348143881 -:100EF0004174002D08D008202840002803D000218C -:100F00005E481438417400BF01208007456202200A -:100F10002040002809D05F480068002805D0212221 -:100F2000520650685B4A1168884704202040002818 -:100F300009D058484068002805D021225206506840 -:100F4000544A5168884708202040002809D0514859 -:100F50008068002805D02122520650684D4A9168C9 -:100F6000884710202040002809D04A48C06800283F -:100F700005D0212252065068464AD1688847012090 -:100F80008007846170BD70B54348056843480668B2 -:100F900030044019424909688900424A505040488B -:100FA0000068401C3E4908603F4800682021084313 -:100FB0003D490860084600683C4908603A480068B6 -:100FC000202188433849086008460068374908608E -:100FD000334800680A281ED1012406E0A000314AE7 -:100FE000115833A002F042F8641C0A2CF6D3FF20FB -:100FF00001303149086040002F49803908600020E5 -:1010000027490860002400E0641C2C488442FBD37C -:101010002B482C49C86070BD10B5234A1268602364 -:101020001A43214B1A601A461268204B1A601E4A56 -:10103000126860239A431C4B1A601A4612681B4BB5 -:101040001A60012252021C4B803B1A6052101A4B4C -:101050001A6052001C4B1A600F4A10680F4A116840 -:101060000A0412180E4B1B689B000E4CE2500C4AEF -:101070001268521C0A4B1A6010BD00003803002091 -:10108000743B0000FF3F00000000285200002C527B -:10109000CB0300002402002000004452000048520C -:1010A0000C0000207C0000201800002000000C52E2 -:1010B00025580D0A0000000080E100E01027000024 -:1010C0000400FA0500ED00E080E200E010B502A0A7 -:1010D00001F0CCFF10BD000061646320696E74658F -:1010E0007272757074207472696767657265640DD9 -:1010F0000A00000010B509A001F0B8FF10BD10B53E -:1011000010A001F0B3FF10BD10B518A001F0AEFFA4 -:1011100010BD10B51FA001F0A9FF10BD4578746582 -:10112000726E616C20496E746572727570742047BE -:1011300050494F33207472696767657265640D0AA0 -:101140000000000045787465726E616C20496E7411 -:10115000657272757074204750494F3820747269F7 -:101160006767657265640D0A000000004578746564 -:10117000726E616C20496E7465727275707420476E -:1011800050494F39207472696767657265640D0A4A -:101190000000000045787465726E616C20496E74C1 -:1011A000657272757074204750494F3130207472E7 -:1011B000696767657265640D0A00000010B502A0DA -:1011C00001F054FF10BD0000756172742072782028 -:1011D000696E746572727570742074726967676580 -:1011E0007265640D0A0000001E4800210160416024 -:1011F0008160C160481E212149068860072008607F -:101200007047184908607047032021214906086388 -:10121000802015490860704700B50246FFF7F4FFCB -:1012200021204006026100BD212040064068704731 -:10123000002021214906086380200B498031086085 -:10124000704710B50948046BE007C00F002806D0AE -:1012500004480068002802D0024908688047034813 -:10126000446310BDBC03002000E100E040000042E8 -:1012700010B5CC21FE4801F0FEFF1121FC48803062 -:10128000C16203210163152141630F218163C163A1 -:10129000F849016416214164122181641422F6493F -:1012A0001830FEF751FF10BDF1488030C06A70471A -:1012B000EF488030006B7047ED488030406B7047DE -:1012C000EB488030806B7047E9488030C06B7047D6 -:1012D000E7488030006C7047E5488030406C7047CC -:1012E000E3488030806C7047E1498031C8627047C4 -:1012F000DF49803108637047DD49803148637047BA -:10130000DB49803188637047D9498031C8637047B1 -:10131000D749803108647047D549803148647047A7 -:10132000D34980318864704710B50446982221461D -:10133000CF48FEF709FF10BDD049014049004208DF -:10134000CE4B1A4011430846CD490140890082081E -:10135000CB4B1A4011430846CA4901400901020912 -:10136000C84B1A40114308460106FF2212020240F0 -:1013700012021143020AFF231B021A401143020EFC -:10138000114308467047F3B500256C1E16E000981F -:10139000465D3046FFF7D0FF064600270BE02046AB -:1013A0007040002804DA6000B7494840044600E075 -:1013B000640076007F1C072FF1DD6D1C01988542CB -:1013C000E5D3E043FFF7B8FFFCBDF0210140091170 -:1013D0000207120E11430846CC2101408910332226 -:1013E0000240920011430846AA21014049105522AB -:1013F0000240520011430846704710B541098A0067 -:101400009B4B9A584B01C41A0123DB07E3409A43D4 -:101410008B00974CE25010BD10B541098A00944BE7 -:101420009A584B01C41A0123DB07E3401A438B008F -:101430008F4CE25010BDFFB505460E4617460024FE -:101440000FE028462041C007C00F002804D02046E6 -:10145000F530FFF7E1FF03E02046F530FFF7CDFF61 -:10146000641C032CEDDD00240FE030462041C00752 -:10147000C00F002804D02046F930FFF7CDFF03E06D -:101480002046F930FFF7B9FF641C032CEDDD002482 -:101490000FE038462041C007C00F002804D0204686 -:1014A000FD30FFF7B9FF03E02046FD30FFF7A5FF51 -:1014B000641C032CEDDD00240FE003982041C007DD -:1014C000C00F002804D0E01DFA30FFF7A5FF03E0AD -:1014D000E01DFA30FFF791FF641C032CEDDDFFBD2A -:1014E000FFB505460E46174600240FE0284620416A -:1014F000C007C00F002804D0E01DFE30FFF78CFFAE -:1015000003E0E01DFE30FFF778FF641C012CEDDDE9 -:10151000002411E030462041C007C00F002805D04C -:101520002046FF300830FFF777FF04E02046FF3009 -:101530000830FFF762FF641C012CEBDD002411E092 -:1015400038462041C007C00F002805D02046FF3094 -:101550000A30FFF761FF04E02046FF300A30FFF752 -:101560004CFF641C012CEBDD002411E003982041AA -:10157000C007C00F002805D02046FF300C30FFF711 -:101580004BFF04E02046FF300C30FFF736FF641CB1 -:10159000012CEBDDFFBD30B589B0054620223B496B -:1015A00001A8FEF7D1FD002411E02846E040C00765 -:1015B000C00F002805D0610001AA505AFFF71DFF97 -:1015C00004E0610001AA505AFFF726FF641C0F2CAB -:1015D000EBD909B030BD30B589B0054620222B4982 -:1015E000203101A8FEF7B0FD002411E02846E040BC -:1015F000C007C00F002805D0610001AA505AFFF7AC -:101600000BFF04E0610001AA505AFFF7F6FE641CCC -:101610000F2CEBD909B030BD00B5FF20F630FFF735 -:10162000ECFEFF20F730FFF7E8FEFF20F830FFF771 -:10163000E4FEFF20F930FFF7E0FEFF20FA30FFF76D -:10164000EBFEFF20FB30FFF7D8FEFF20FC30FFF75A -:10165000E3FEFF20FD30FFF7D0FEFF20FE30FFF756 -:10166000DBFEFF20FF30FFF7D7FE094812E0000045 -:10167000CC030020006A1800B43B000055555555B6 -:10168000333333330F0F0F0FB71DC104C83B0000B6 -:10169000FF010000FFF7C0FE01204002FFF7BCFE83 -:1016A000F848FFF7AAFEF748401CFFF7A6FEF548EA -:1016B000801CFFF7B1FE81208000FFF7ADFE002007 -:1016C000F1490860F148FFF7A7FE00BDF3B581B00E -:1016D0000F4600200090019EB800019E82193146FD -:1016E000EBA001F0C3FCF6A001F0C0FC00240CE06C -:1016F000002507E0A00030580121A9408843A1003F -:1017000070506D1C202DF5DB641CBC42F0D300240E -:101710001DE0002518E0A00030580121A940084034 -:10172000002809D0A00033582A462146EAA001F03B -:101730009DFC0098401C0090A00030580121A94059 -:101740000843A10070506D1C202DE4DB641CBC42DA -:10175000DFD300241FE000251AE0A000305801214B -:10176000A94008400121A940884209D0A00033586F -:101770002A462146E4A001F079FC0098401C009024 -:10178000A00030580121A9408843A10070506D1C71 -:10179000202DE2DB641CBC42DDD37C1E1DE01F2536 -:1017A00018E0A00030580121A9400840002809D0C5 -:1017B000A00033582A462146DFA001F057FC0098CC -:1017C000401C0090A00030580121A9400843A1000E -:1017D00070506D1E002DE4DA641E002CDFDA7C1ED2 -:1017E0001FE01F251AE0A00030580121A940084041 -:1017F0000121A940884209D0A00033582A46214639 -:10180000D9A001F033FC0098401C0090A000305893 -:101810000121A9408843A10070506D1E002DE2DA1D -:10182000641E002CDDDA002416E0002511E0A00083 -:1018300030580121A9400840002809D0A0003358A1 -:101840002A462146D4A001F011FC0098401C0090CB -:101850006D1C202DEBDB641CBC42E6D3DAA00099A2 -:1018600001F004FC0098FEBD30B50546002411E0EF -:1018700028462041C007C00F002805D02046FF3071 -:10188000ED30FFF7C9FD04E02046FF30ED30FFF7F3 -:10189000B4FD641C062CEBD930BD30B505460024E0 -:1018A00011E028462041C007C00F002805D0774925 -:1018B0007539081BFFF7B0FD04E074497539081B42 -:1018C000FFF79BFD641C042CEBD9052411E028468E -:1018D0002041C007C00F002805D06C497539081B8E -:1018E000FFF78BFD04E069497539081BFFF794FD8C -:1018F000641C062CEBD930BD30B50546002411E040 -:1019000028462041C007C00F002805D05F49C91CE8 -:101910006018FFF781FD04E05C49C91C6018FFF7FF -:101920006CFD641C042CEBD9052411E028462041F1 -:10193000C007C00F002805D05449C91C6018FFF724 -:101940005CFD04E05149C91C6018FFF765FD641C8B -:10195000062CEBD930BD30B50546002411E02846F1 -:101960002041C007C00F002805D048490F31081B8F -:10197000FFF752FD04E045490F31081BFFF73DFD1D -:10198000641C042CEBD9A806C00F002804D0E72063 -:101990008000FFF732FD03E0E7208000FFF73CFD09 -:1019A0006806C00F002804D036482C30FFF725FD0C -:1019B00003E034482C30FFF72FFD30BD30B505462D -:1019C00000240FE02846E040C007C00F002804D0E4 -:1019D00020466B30FFF720FD03E020466B30FFF719 -:1019E0000CFD641C0F2CEDDD30BD30B50546002428 -:1019F0000FE02846E040C007C00F002804D0204672 -:101A00007C30FFF709FD03E020467C30FFF7F5FC52 -:101A1000641C072CEDDD30BD30B5054600240FE019 -:101A20002846E040C007C00F002804D02046D1302F -:101A3000FFF7F2FC03E02046D130FFF7DEFC641C28 -:101A40000F2CEDDD30BD70B505460E4600240AE0D2 -:101A50002046FF30D930FFF7D0FC2046FF3017304A -:101A6000FFF7CBFC641C0D2CF2DB002405E0FF210A -:101A7000E531081BFFF7D0FC641CAC42F7D9002409 -:101A8000BAE00000010200000000285292030000AA -:101A90000D0A0D0A5374617274696E6720535241C6 -:101AA0004D20746573742066726F6D2030782558F0 -:101AB00020746F20307825582E2E2E0D0A0000003D -:101AC000546869732074616B657320617768696C11 -:101AD000652E2E2E0D0A00000D0A4552524F52203F -:101AE0003120402061646472657373202558206240 -:101AF0006974202564202D2D2056616C7565206940 -:101B000073202558000000000D0A4552524F522004 -:101B1000322040206164647265737320255820620E -:101B20006974202564202D2D2056616C756520690F -:101B300073202558000000000D0A4552524F5220D4 -:101B400033204020616464726573732025582062DD -:101B50006974202564202D2D2056616C75652069DF -:101B600073202558000000000D0A4552524F5220A4 -:101B700034204020616464726573732025582062AC -:101B80006974202564202D2D2056616C75652069AF -:101B900073202558000000000D0A4552524F522074 -:101BA000352040206164647265737320255820627B -:101BB0006974202564202D2D2056616C756520697F -:101BC00073202558000000000D0A5352414D205447 -:101BD00065737420436F6D706C657465202D2D20C6 -:101BE0002564204572726F72730D0A002046FF3023 -:101BF0001730FFF702FC641CB442F7D970BD70B512 -:101C000005460E46002411E03046E040C007C00FF4 -:101C1000002805D02046FF30C530FFF7FDFB04E06B -:101C20002046FF30C530FFF7E8FB641C042CEBDDD9 -:101C3000002411E02846E040C007C00F002805D06E -:101C40002046FF30CA30FFF7E7FB04E02046FF30B4 -:101C5000CA30FFF7D2FB641C042CEBDD70BD70B5FD -:101C600005460E46002411E03046E040C007C00F94 -:101C7000002805D0FF215931081BFFF7CDFB04E0F8 -:101C8000FF215931081BFFF7B8FB641C042CEBDD66 -:101C9000002411E02846E040C007C00F002805D00E -:101CA000FF215431081BFFF7B7FB04E0FF2154313B -:101CB000081BFFF7A2FB641C042CEBDD70BD70B5A4 -:101CC00005460E46002411E02846E040C007C00F3C -:101CD000002805D02046FF30E630FFF79DFB04E0EA -:101CE0002046FF30E630FFF788FB641C042CEBDD58 -:101CF000002411E03046E040C007C00F002805D0A6 -:101D0000FF211631081BFFF787FB04E0FF21163186 -:101D1000081BFFF772FB641C052CEBDD70BDF8B5EA -:101D2000FA4C650DFA48006A2040F94908620846F5 -:101D3000C06B2840C8630846006AF649A1430843BF -:101D4000F3490862F4484862F4488862F448C8627B -:101D5000F4480863F4484863F44888630846C06B55 -:101D6000F349A9430843EA49C863FF20A930FFF7B4 -:101D700044FBFF20AA30FFF74FFB3F210846FFF747 -:101D80009EFF07210846FFF75EFE00210846FFF789 -:101D900036FF00210846FFF762FF0020FFF72DFB0A -:101DA0000120FFF72AFB6020FFF727FBFF20103000 -:101DB000FFF723FBFF20EC30FFF71FFB6420FFF74A -:101DC0001CFB6520FFF719FB6620FFF716FB61205F -:101DD000FFF722FB0020D7490860D748D7490860A1 -:101DE0006720FFF719FB0B260227F002F9010843D1 -:101DF000D349086005200090D24900980860FF2070 -:101E00000E30FFF7FAFAFF200F30FFF7F6FA002046 -:101E1000FFF72AFDF020FFF7FFFA5D20C000FFF773 -:101E2000FBFAC948FFF7F8FAC748401CFFF7F4FA75 -:101E30000120C6490860F8BD70B5C54C650DB448B1 -:101E4000006A2040B24908620846C06B2840C86357 -:101E50000846006ABF49A1430843AD490862AE483D -:101E60004862AE4840308862BB48C862BB480863DD -:101E7000BB484863BB4888630846C06BBA49A9435E -:101E80000843A349C8630020FFF7C6FA0120FFF703 -:101E9000C3FA0D20FFF792FD2620FFF7A6FD502084 -:101EA000FFF7BAFDEE20FFF7B7FAEF20FFF7B4FA1D -:101EB000FF200E30FFF7A1FAFF200F30FFF79DFA49 -:101EC0008420FFF7A9FA05269E4806600A21002013 -:101ED000FFF795FE0020FFF7C7FCF020FFF79CFA04 -:101EE00001204003A1490860F002086070BD10B5F0 -:101EF0000A467F2383435901854B9B6F7F246401EE -:101F0000A343834CA36723469B6F0B43A36710BD7A -:101F10007F22824351037E4A926F7F235B039A4361 -:101F20007B4B9A671A46926F0A439A67704710B5BF -:101F3000F023034019090207754B9B6F1B091B0116 -:101F4000734CA36723469B6F0B43A3672346DB6F4A -:101F50001B011B09E3672346DB6F1343E36710BDD7 -:101F600000B57D20C000FFF757FA8148FFF754FA0B -:101F70007F48401CFFF750FA7D48801CFFF74CFA61 -:101F800080207C4908607F20FFF7D1FF7F20FFF78A -:101F9000BFFF00213F20FFF7AAFF00BD70B5034639 -:101FA000002400200325AD021D402C010F252D0328 -:101FB0001D402D0B28433F252D011D402843950230 -:101FC0002843CD0228431D072D0C2843E5436A4EC4 -:101FD0003560C543694E356070BD002824D14C4939 -:101FE000C96F042211434A4AD1671146C96F0222C0 -:101FF0009143474AD1671146803109680122D207CF -:102000001143434A803211604149C96F4908490070 -:10201000803AD167114680310968072212071143BF -:102020003B4A80321160F5E0012822D13849C96F5E -:1020300002221143364AD1671146C96F04229143E7 -:10204000334AD167114680310968C2071143304ACB -:10205000803211602E49C96F8143803AD1671146A1 -:1020600080310968072212071143294A8032116022 -:10207000D0E0022823D12649C96F04221143244A03 -:10208000D1671146C96F02229143214AD167114697 -:10209000803109684A0052081D4980310A60803940 -:1020A000C96F012211431A4AD1671146803109686C -:1020B000072212071143164A80321160AAE0032852 -:1020C0005ED11349C96F04221143114AD1671146E9 -:1020D000C96F022291430E4AD167114680310968C7 -:1020E000C20711430A4A803211600949C96F490881 -:1020F0004900803AD1671146803109680122920770 -:102100009143034A8032116084E000000000FCFF2C -:10211000CC030020E0FF50408821420031000488B9 -:1021200081403B1102817E024448ED0300000160C2 -:10213000032EE0FF000038520FA0000000003C52C8 -:1021400000000C5200002452E9020000000040523E -:102150000000FEFFF0FF000081400C10028118001B -:1021600044C87F01010001700008E0FF0000105228 -:10217000E903000000002C52000014520000185225 -:10218000042822D1FE49C96F04221143FC4AD167B9 -:102190001146C96F02229143F94AD1671146803135 -:1021A000096842071143F64A80321160F449C96F49 -:1021B00049084900803AD167114680310968C20652 -:1021C0009143EF4A8032116024E0052822D1EC4986 -:1021D000C96F04221143EA4AD1671146C96F02222E -:1021E0009143E74AD167114680310968C20711431C -:1021F000E34A80321160E249C96F49084900803AD8 -:10220000D167114680310968032252079143DC4AA5 -:1022100080321160704710B50A467F23834359030B -:10222000D74BDB6F7F246403A343D54CE36723467E -:10223000DB6F0B43E36710BD10B5044600217F2020 -:10224000FFF7E9FF0420FFF7C8FE01221146FF2037 -:10225000E130FFF7A3FEFD208000FFF7DDF810BDA1 -:1022600070B503460C467F25292676063560C54D98 -:102270002868C54D29680D042D181D60C34D2868B8 -:10228000C34D29680D042D182560C24D2868C24D24 -:1022900029680D042D18156000253560BF4D356087 -:1022A00070BDBF480068012189020840002804D0A1 -:1022B000BB4800888005800D70470020FCE7B948C6 -:1022C00000787047B84800780007000F7047F0B5F5 -:1022D00005460E461746002411E028462041C00757 -:1022E000C00F002805D0FF21B031081BFFF794F87C -:1022F00004E0FF21B031081BFFF77FF8641C042CB9 -:10230000EBD9002411E030462041C007C00F00285F -:1023100005D0FF21B631081BFFF77EF804E0FF214E -:10232000B631081BFFF769F8641C042CEBD9012FA8 -:1023300003D19E48FFF770F802E09C48FFF75DF874 -:10234000F0BD70B505460E46002411E03046E04071 -:10235000C007C00F002805D0944990316018FFF7DE -:102360005BF804E0914990316018FFF746F8641C6F -:10237000032CEBDDF006C00F002804D08B4894300E -:10238000FFF73BF803E089489430FFF745F8002455 -:1023900011E02846E040C007C00F002805D0D72133 -:1023A00089006018FFF738F804E0D7218900601829 -:1023B000FFF723F8641C012CEBDD022411E0284612 -:1023C000E040C007C00F002805D07849933160185D -:1023D000FFF713F804E0754993316018FFF71CF814 -:1023E000641C042CEBDD70BD28207149086020209E -:1023F0000860704710B500210022252126E0002248 -:1024000021E08B005E4CE358012494402340002BD4 -:1024100001D1212000E02020654B186002240346F2 -:10242000A3431846624B186004231843604B18609E -:1024300004240346A34318465D4B18600223184347 -:102440005B4B1860521C202ADBDB491E0029D6DAC0 -:1024500010BDF7B584B00546E806C00E0390059898 -:10246000C006C00E02900698C006C00E01900398E8 -:10247000FEF7ABFF00900298FEF7A7FF0646019813 -:10248000FEF7A3FF04460023002700BF00BF00980B -:1024900000907820204040020343F000034300985E -:1024A000C008034380202040C0090743364803602A -:1024B0004048076007B0F0BD01460020CA07120E71 -:1024C000104302220A405201104304220A40D20063 -:1024D000104308220A405200104310220A405208BA -:1024E000104320220A40D208104340220A405209D9 -:1024F000104380220A40D20910437047F0B585B0DE -:1025000006460C4615461F461D4880308661183029 -:1025100044608560C7601A4998310A980861084686 -:10252000183880682449084003463046FFF7C4FF46 -:102530000006C00E04902046FFF7BEFF0006C00E46 -:1025400003902846FFF7B8FF0006C00E02903846F9 -:10255000FFF7B2FF0006C00E01900A98FFF7ACFF2C -:102560000006C00E009004988006034303984005BF -:1025700003430298000403430198C00203431DE093 -:10258000CC0300200000185200001C52000028520A -:1025900000002C520000305200003452FF3F000077 -:1025A000000040520000545200003C52D60200008D -:1025B00000005852000020521F0000800098800147 -:1025C000034320200343BA48836005B0F0BD38B50B -:1025D000FEF74EFEFDF78AFFFEF7BEF9FEF704FE9A -:1025E00000F084F9FFF718F800231A461946184638 -:1025F000FEF776FF0023062211461046FEF71BFF6A -:102600000020FEF7E8FFAB48FEF7C5FFAA48FEF73B -:1026100003FFA74AD16A106BFFF793FEA648001D7F -:10262000FEF7FAFEA548FEF7F7FE3120FEF7F4FEAE -:102630003020FEF7F1FE2F20FEF7DFFE2E20FEF702 -:10264000EBFE2D20FEF7D9FE2C20FEF7E5FE2B2019 -:10265000FEF7E2FE2A20FEF7DFFE97480930FEF77C -:10266000DBFE96484630FEF7D7FE2920FEF7D4FE63 -:10267000022403E02046FEF7CFFE641C092CF9DBA0 -:10268000FFF74DFBFFF76CFC894A916C506C002200 -:10269000FFF71DFE8648C06B00908548836B1F21A5 -:1026A000426B0846FFF72AFF83482138FEF7B4FE45 -:1026B0000F220C211720FFF7CCFE7D200001FFF731 -:1026C000BBFDFFF797FEFFF78FFE38BDF8B5002082 -:1026D0002921490608607A480860012700E07F1C2C -:1026E00078488742FBDB7F2029214906086076482D -:1026F0000468764805682804061908460468744882 -:1027000005682804001900907003009900F0B5FDD9 -:10271000F8BD18B5664818300069654C183400904B -:10272000E368A2686168183CA069FFF7E7FE18BD7E -:1027300070B503460C467F25292676063560624D26 -:102740002868624D29680D042D181D60614D2868A8 -:10275000614D29680D042D182560354628685C4DAB -:1027600029680D042D18156000253560544D35601D -:1027700070BD10B500210BE003689B0F0468E40EE8 -:102780006340DA07D20F03685B0013430360491C00 -:102790000829F1DB10BD10B5002408E0A000444971 -:1027A00080390A5821464DA000F060FC641C262C9C -:1027B000F4D310BDF0B585B00546002600271720DC -:1027C00003908C2002902846029900F060FD13309F -:1027D000C0B200902846029900F059FD0D462846E7 -:1027E000039900F054FD41004018C019C0B2019097 -:1027F0002846039900F04BFD022800DB00BF284665 -:10280000039900F044FD8819C4B20F2C00DD641C4C -:10281000224601990098FFF71CFE05B0F0BD244840 -:102820008038806F012109058843214980398867F4 -:1028300070471F488038806F0121090508431C49F3 -:102840008039886770471A488038006C0921C906AA -:102850008843174980390864704715488038006CF0 -:102860000921C90608431249803908647047104895 -:1028700000680121C90408430D49086070470C48ED -:1028800000680121C9048843094908607047084865 -:1028900000680321490488430549086070470448DB -:1028A000006803214904084301490860704700009B -:1028B0004C040020FFFF00007B0400002902000000 -:1028C000FF3F000050C300000000185200001C52DF -:1028D0000000045200002052000024524153435B88 -:1028E00025755D203D20307825780A0010B57021CF -:1028F000FA4800F0C0FC0021F84840300170022185 -:102900004170722181703221C17080210171C62114 -:102910004171252181710121C1715321017343212D -:102920000C304170552181704D21C17033210171EE -:1029300010BDF0B597B000270024AA20169015907E -:102940001490E648403080798006800E4030089030 -:102950004021E24800F08FFC2C2109A800F08BFCFC -:10296000552239467F1CDD4842546B2239467F1C74 -:1029700042547D2239467F1C4254912239467F1CA5 -:102980004254712239467F1C425440222146641C25 -:1029900009A84254A4222146641C425405250AE099 -:1029A000CE494031485DFEF710FD2146621CD4B28D -:1029B00009AA50546D1E002DF2DAC8484030C07983 -:1029C00000281AD060222146601CC4B209A84254D3 -:1029D00010222046611CCCB209A90A5400250AE045 -:1029E000BE494C31485DFEF7F0FC2146621CD4B272 -:1029F00009AA50546D1C052DF2DBB8484030007A0E -:102A0000002820D0C0222146601CC4B209A842542C -:102A100003222046611CCCB209A90A54AF494031B7 -:102A2000498A0812FEF7D1FC2146621CD4B209AAD9 -:102A30005054AA494031887CFEF7C7FC2146621CED -:102A4000D4B209AA5054A5484030407A00285FD03B -:102A500090222046611CCCB209A90A544322204688 -:102A6000611CCCB209A90A549C49496D080EFEF7B5 -:102A7000ACFC2146621CD4B209AA50549749496D56 -:102A80000902080EFEF7A1FC2146621CD4B209AA75 -:102A900050549249496D0904080EFEF796FC2146F0 -:102AA000621CD4B209AA50548C49496DC8B2FEF7D1 -:102AB0008CFC2146621CD4B209AA50548749896D06 -:102AC000080EFEF782FC2146621CD4B209AA5054BB -:102AD0008249896D0902080EFEF777FC2146621CC7 -:102AE000D4B209AA50547D49896D0904080EFEF735 -:102AF0006CFC2146621CD4B209AA50547749896DF6 -:102B0000C8B2FEF762FC2146621CD4B209AA505436 -:102B100072484030807A00283BD07048416E006E89 -:102B20006F4A704B0391029000F0D4FD079106901C -:102B300000206D49079B069A00F032FE00226B4B85 -:102B40000191009000F0C6FD0391029000F0F2FDAB -:102B50000590C0222146601CC4B209A842548322B9 -:102B60002046611CCCB209A90A5405990904080E33 -:102B7000FEF72BFC2146621CD4B209AA50540599D9 -:102B8000C8B2FEF722FC2146621CD4B209AA5054F6 -:102B900000BF52484030C07A00281AD0A0222046F8 -:102BA000611CCCB209A90A5483222046611CCCB214 -:102BB00009A90A5400250AE048496831485DFEF732 -:102BC00004FC2146621CD4B209AA50546D1C042D89 -:102BD000F2DB002431E007252BE009A8005D01218C -:102BE000A940084028411499C907C90F06464E401C -:102BF000149840101599C907090E084314901598A8 -:102C000040101699C9010843B1014840710148407C -:102C1000C0B2159016984010F1010843B101484028 -:102C200031014840F100484071004840C0B2169060 -:102C30006D1E002DD1DA601CC4B2272CCBDB14989A -:102C4000FEF7C3FB14901598FEF7BFFB159016987E -:102C5000FEF7BBFB16902146621CD4B209AA149859 -:102C600050542146621CD4B209AA159850542146EA -:102C7000621CD4B209AA16985054002423E00725F8 -:102C80001DE009A8005D0121A940884309A9095D4B -:102C90000122AA401140089AD207D20FAA405140FF -:102CA000084309A90855089840100899C907490E12 -:102CB00008430899C907490F484008906D1E002D28 -:102CC000DFDA601CC4B22A2CD9DB0449C8192A22D5 -:102CD00009A900F071FA17B0F0BD000098040020B7 -:102CE0006666666666127140000059400000F03F5B -:102CF00010B500244021D64800F0BDFA1D2221461F -:102D0000641CD348425455222146641C4254AD22CF -:102D10002146641C4254F6222146641C425445223A -:102D20002146641C4254C7222146641C4254C522D9 -:102D30002146641C42540E222046611CCCB2C44978 -:102D40000A5426222046611CCCB2C1490A541322DF -:102D50002046611CCCB2BE490A54C2222046611CE6 -:102D6000CCB2BB490A54AC222046611CCCB2B84953 -:102D70000A5498222046611CCCB2B5490A54372225 -:102D80002046611CCCB2B2490A54B8222046611CCC -:102D9000CCB2AF490A5430222046611CCCB2AC49B7 -:102DA0000A54A1222046611CCCB2A9490A54C92266 -:102DB0002046611CCCB2A6490A54E4222046611C7C -:102DC000CCB2A3490A5493222046611CCCB2A0493C -:102DD0000A5475222046611CCCB29D490A54B72280 -:102DE0002046611CCCB29A490A5441222046611CFB -:102DF000CCB297490A546C222046611CCCB294494B -:102E00000A54D1222046611CCCB291490A542D2289 -:102E10002046611CCCB28E490A54B8222046611C5F -:102E2000CCB28B490A5410BD10B504460622214687 -:102E30008748403000F0C0F910BD854940318871A5 -:102E4000704783494031C871704710B50446052268 -:102E500021467F484C3000F0AFF910BD7C4940312D -:102E6000087270477A49403148827047784940314A -:102E7000487270477649486570477549886570475C -:102E80007349403188727047714A516610667047C5 -:102E90006F494031C872704710B50446042221467C -:102EA0006B48683000F088F910BD10B5F92080003B -:102EB000FEF7B2FA6748FEF7A0FA6648401CFEF734 -:102EC0009CFA6448801CFEF798FA7D20C000FEF74B -:102ED00094FA6048001DFEF790FA5E48401DFEF728 -:102EE0008CFA5C48801DFEF788FA5A481030FEF7CD -:102EF00093FA58482C30FEF78FFA56482D30FEF7DB -:102F00008BFAF1208000FEF778FA52485430FEF731 -:102F100074FA0020504908607F20FFF708F87F20EE -:102F2000FEF7F6FF00213F20FEF7E1FFFFF762FA10 -:102F3000FFF75AFA10BD10B5FEF77EFFFF20A9304B -:102F4000FEF75BFAFF20AA30FEF766FAFF20A730F3 -:102F5000FEF762FA3F210846FEF7B1FE0721084658 -:102F6000FEF771FD4C20FEF740FD7B20FEF745FA91 -:102F70005D20C000FEF750FA3648FC38FEF74CFAE8 -:102F80003448FB38FEF748FA012034490860FFF75F -:102F900031FAFFF729FA10BD00201021084340083C -:102FA000400004210843202108432B490860704752 -:102FB00070B500200125284304260546B543284660 -:102FC00020260546B5432846234D2860002123E0EE -:102FD0001F4D6C5C07221CE025461541EB07DB0FFB -:102FE000002B05D102260546B54328461A4D286018 -:102FF000012B03D102252843174D286008252843BB -:10300000154D286008260546B5432846124D286010 -:10301000521E002AE0DA491C4029D9DB70BD10B5E8 -:10302000FFF7C6FFFDF700FD68200D49086000248A -:1030300000E0641C322CFCDBFFF7AEFF002400E054 -:10304000641C08488442FBDBFDF729FD10BD00002D -:1030500098040020E503000000002C5200004052BC -:1030600000002852204E0000704700000FB40549B0 -:1030700010B503AA029800F011FD10BC08BC04B002 -:103080001847000004000020F8B50E460446002052 -:1030900020622046E1688847002829D0252802D0F0 -:1030A0006268A16820E0E1682046002788470500A3 -:1030B0001ED028464138192802D80127FF022035A2 -:1030C0003246204627602946FDF718F8002808D028 -:1030D000012804D0F61DF608F6000836D9E7361D9B -:1030E000D7E762682846A1689047206A401CCFE76E -:1030F000206AF8BDF7B5002575291068009914A657 -:1031000011D0C046C046002802DA404211A608E0AD -:10311000009909688A0701D50FA602E0490704D57E -:103120000EA6012501E0C046C046009F00242437BA -:1031300004E000F0C7FC30313955641C0028F8D198 -:103140002B4632462146009800F04FFCFEBD0000A1 -:10315000000000002D0000002B00000020000000F7 -:1031600070B504460D4621461068C046C046218809 -:10317000090502D50F4A7A4402E00E4A7A440E321B -:1031800023460021243305E006070009360F965D2B -:103190005E54491C0028F7D120780023000705D58C -:1031A000702D03D0002901D002231132204600F0F7 -:1031B0001CFC70BD8E0A0000F8B5042A2CD38307CE -:1031C00012D00B78491C0370401C521E83070BD091 -:1031D0000B78491C0370401C521E830704D00B78E7 -:1031E000491C0370401C521E8B079B0F05D0C91A47 -:1031F000DF002023DE1B08C90AE0FCF7A5FFF8BDAD -:103200001D4608C9FD401C46B4402C4310C0121F87 -:10321000042AF5D2F308C91A521EF0D40B78491CBF -:103220000370401C521EEAD40B78491C0370401CEA -:10323000012AE4D409780170F8BD01E004C0091F37 -:103240000429FBD28B0701D50280801CC90700D05E -:103250000270704700290BD0C30702D00270401CD7 -:10326000491E022904D3830702D50280801C891ECF -:10327000E3E70022EEE70022DFE7002203098B42AA -:103280002CD3030A8B4211D300239C464EE0034605 -:103290000B433CD4002243088B4231D303098B42B9 -:1032A0001CD3030A8B4201D394463FE0C3098B42EF -:1032B00001D3CB01C01A524183098B4201D38B0148 -:1032C000C01A524143098B4201D34B01C01A5241EB -:1032D00003098B4201D30B01C01A5241C3088B4230 -:1032E00001D3CB00C01A524183088B4201D38B001B -:1032F000C01A524143088B4201D34B00C01A5241BD -:10330000411A00D201465241104670475DE0CA0F93 -:1033100000D04942031000D34042534000229C4653 -:1033200003098B422DD3030A8B4212D3FC2289015D -:1033300012BA030A8B420CD3890192118B4208D333 -:10334000890192118B4204D389013AD0921100E095 -:103350008909C3098B4201D3CB01C01A52418309A9 -:103360008B4201D38B01C01A524143098B4201D3D6 -:103370004B01C01A524103098B4201D30B01C01A01 -:103380005241C3088B4201D3CB00C01A524183087B -:103390008B4201D38B00C01A5241D9D243088B42D1 -:1033A00001D34B00C01A5241411A00D20146634674 -:1033B00052415B10104601D34042002B00D54942D8 -:1033C000704763465B1000D3404201B50020C04601 -:1033D000C04602BD7047704770470000F0B50C460C -:1033E000871A9C410D46861A9D4103D2C01BA141FC -:1033F000D21963410D0D1F0DC94EEC1BAE435CD0BD -:103400007F057F0D0026002F51D02D05AC46A94326 -:10341000DD020123ED0A1B051D4320231B1B24D4C1 -:103420001746E740381871412F46E740CC199D40B8 -:103430002818314661410C0D27D161449A4013D5BB -:103440000023401C594152000ED140084000012287 -:103450004B005205D34207D305204007C14201D596 -:10346000B04900E0B0493046F0BD6B00002A00D002 -:1034700001229A181F23203C1B1B01D5002302E0C8 -:10348000E540281871410C0DD7D0012424050919F5 -:10349000C407CD0740084908E40F28436144002CC5 -:1034A000D5D00024401C61419A40D0D1CDE76A05B7 -:1034B000520DD9D1C90FC907D5E79C4D4E00002840 -:1034C00001D0012400E0002434195F00002A01D05B -:1034D000012600E00026BE19954FAC420CD8AE4242 -:1034E0000AD8B44206D001256D05EC42BCD0104686 -:1034F0001946F0BD9942FCD000203946F0BDF0B528 -:103500001FB40C460F46811A9F412546861A9D41DD -:1035100006D20125ED076F40401ABC4152187B418D -:10352000210D1E0D8D1BAC467D4D8D437ED0750546 -:103530006D0D7CD00D05AE46AC431B031B0B794DC6 -:1035400052429D41202366469B1B14D31746F740E9 -:10355000381800260090744160462F460741E41950 -:1035600000989D402818664116D4714671189A40FB -:1035700025D5012320E093182A466A415200002BEA -:1035800000D0521C1E23203E9B1B002B61DD3541C9 -:10359000EE1728186641E8D5001876415B1C9A4062 -:1035A00000D3401C4B05F3181524E34010D3002B27 -:1035B00052D071467118D30FC01802D3491C05B000 -:1035C000F0BD0123DB079A42F9D140084000F6E73D -:1035D00001225205B21801D1002853D00123CC0A90 -:1035E000DB029943891E002A08D1020C03D0020C89 -:1035F0000004103902E00246002020390023550B58 -:1036000005D112020823550B01D152010D23550C8F -:1036100001D112011B1DD50C01D192009B1C150D6F -:1036200001D152005B1C2025EE1A01E02CE022E0C3 -:103630000546F54015439840CA1AE1076918130575 -:10364000C918002ABBDA032040070818C10FC907B0 -:103650000FE071466118B2E7F107400808437110A6 -:1036600071444A000CD001235B059A42A7D2C90FCE -:10367000C9070020A3E74905490D26D1002001E034 -:103680000028F4D100219AE7284D6600002801D0D7 -:10369000012100E0002171185F00002A01D00126FD -:1036A00000E00026BE19224FA94210D8AE420ED823 -:1036B000B14208D001256D05E94206D01946A8029D -:1036C000414010467BE79C4201D0214677E700202D -:1036D000394674E710B50C465C4005D50124E40773 -:1036E0006340FFF70CFF10BDFFF778FE10BD30B44C -:1036F0000C465C4004D50124E407634030BC6DE611 -:1037000030BCFCE670B50124E40761400D465D4025 -:1037100002D4FFF763FE70BD6340FFF7F0FE70BD9B -:10372000FF0700000000F0FF0000F07F0000E0FF56 -:103730000000F87F30B50346CA02400D1043164D15 -:10374000164C0A1502D02043002A06DBAA1A002ACA -:1037500012DDD040FF2A0BDC30BD5205520D01D1E5 -:1037600040004008AA1A07D4D0404042FF2A01DD99 -:10377000002030BD0028FCDD4A00002B01D00120D4 -:1037800000E00020101801225205D042F0D8C817DE -:10379000C043604030BD00001E04000000000080F7 -:1037A000F0B58B4C0F09254689B0BD437BD01D0970 -:1037B0002646AE43FAD00E465E402740F60F3E4303 -:1037C000254071D024012142FBD0FF24AD19A4046F -:1037D0002D1B039501252D05DB02DB0AC9022B43B6 -:1037E000C90A29431E010901040F130F05012143D2 -:1037F0001701880B820391432D098C46A90B1E43A8 -:103800008A039543B30B9A0396433F09BA0B94037B -:10381000A74302962E467E430497B6464E19D71903 -:103820000C460196544305977E43371B7646BF1BD3 -:103830003601B646BE0B361900967646BC043719DB -:10384000009C01D3641C00946400002F01D0012669 -:103850003443029E049F754366467E430496760079 -:1038600034196E0034190094029C019E1C196643A1 -:10387000751BAE46069465464519059C05956C4337 -:10388000594375460891691A0191049E01465143B6 -:10389000A41B0491611A009C0791E10605D06109FF -:1038A0000122114302E072E06EE06109089D0027E9 -:1038B0002C0A2D066918049D7C412A0A2D066918D8 -:1038C000019D6241AC0DAD026D185441079A910DF6 -:1038D000920255196141029A644658435443069B2B -:1038E000059A5A43121A131B9A0E9B015B187A41D0 -:1038F000010B0005C3185141220A200644195A4100 -:103900009A4200D2491C01204002814203D3152370 -:103910000226F64302E014230326F6432020C51AAC -:10392000A9401746AF40DA400A4320460399D840E1 -:103930000914731819055118039A3843D2075140D6 -:10394000AC4009D00122944006D30022401C5141D2 -:10395000002C01D1400840001E4A934212D301229C -:1039600003989206904207DB0520400709181A4881 -:103970000143C012414004E0032040070818C10F72 -:10398000C907002009B0F0BD0020F107FAE70518CB -:103990000C464C4111486D42A04115D394181A466B -:1039A0005A410E48644290410ED301204A0040051E -:1039B000824209D35A00824206D35940C90F084AAD -:1039C000C90700201143DDE700200649DAE70000BF -:1039D0000000FF07FE070000FFFFFF7F0000E0FF81 -:1039E0000000F07F0000F87F7047FFB504460D46E9 -:1039F00081B0243000902168880604D51022E06947 -:103A00009143216000E00120A84201DD471B00E056 -:103A100000270498A1697A191018081AA061207863 -:103A2000C00602D42046C046C046002608E00398DF -:103A30006268A168805D9047206A401C761C206205 -:103A400004988642F3DB2078C0060AD52046C0469B -:103A5000C04606E06268A16830209047206A401C9A -:103A6000206238467F1E0028F4DC07E00098626878 -:103A7000A168405D9047206A401C206228466D1E68 -:103A80000028F3DC2046C046C0462078000602D558 -:103A9000022005B0F0BD0120FBE70000084B70B527 -:103AA0000D467B4400F027F804462846FCF705FD48 -:103AB000002802D00020C04370BD204670BD000029 -:103AC000EBC9FFFF01468008081A02091018020A14 -:103AD0001018020C1018C008820012185200891A1F -:103AE00001E0401C0A390A29FBD2704701694A1CCF -:103AF00002610878704700B58FB0029100210591EE -:103B00000549019379440391114604906846FFF7F3 -:103B1000BBFA0FB000BD0000E5FFFFFF754600F0E7 -:103B200025F8AE46050069465346C008C0008546E4 -:103B300018B020B5FCF794FC60BC00274908B646D5 -:103B40000026C0C5C0C5C0C5C0C5C0C5C0C5C0C5AC -:103B5000C0C5403D49008D46704710B50446C0467B -:103B6000C0462046FCF7E9FA10BD00000048704747 -:103B70000805002022038803A1030D01B503B2014B -:103B800071014202C701CA038B0029014B026D007B -:103B900075019F00210385039C030B01AC03AD015C -:103BA0006C013902BF01B703880022013C026A00A0 -:103BB0006A019A001F0000001F0000001D000000A5 -:103BC00002000000020000006B046D046F04710429 -:103BD0007404760478047A045B045D045F04610471 -:103BE0006404660468046A046C046E04700472045D -:103BF00073047504770479045C045E046004620451 -:103C00006304650467046904303132333435363770 -:103C10003839414243444546403058003031323310 -:103C20003435363738396162636465664030780010 -:103C3000503C00000000002054000000C4000000C0 -:103C4000A43C0000540000201C110000E000000013 -:103C500000000000000000510000005100000000C2 -:103C600000000000000000000000000004102540DB -:103C70005760574025100400F4010000F4010000D3 +:100720000BDD00E06FE00120C870084620308379BF +:10073000427901796AA002F093FC4F48C078002802 +:1007400006D14D4B9A795979187901F07CFE06E073 +:10075000494B20339A795979187901F074FE684829 +:10076000854203D90A98401C0A900BE065488542EF +:1007700003D90998401C099004E062484138854239 +:1007800000D97F1C6048854203D20A98401E0A9017 +:100790000CE05C48A038854203D20998401E0990BD +:1007A00004E058485F38854200D27F1E00971F2121 +:1007B0000846099B0A9A01F09BFE0A9800F096FDF4 +:1007C000099800F097FD384600F098FD4F490D98C4 +:1007D000884202D90698401C06904D490D988842DF +:1007E00002D20698401E069000220699079801F052 +:1007F00068FD079800F08AFD069800F08BFD01F077 +:10080000F3FD01F0EBFD06990D9802970394059115 +:10081000049009990A982B46019100903DA00C9AEA +:100820000E9902F01DFC14480078192822DB1248AA +:100830008078002803D01048C07800281AD0012002 +:10084000C0020F498031086000200B490870012068 +:1008500048700F98C860084605610D9848610846C1 +:1008600084610E98C86137A002F0FAFB00202921AC +:100870004906086011B0F0BD5400002094D1030077 +:1008800000E100E000000452000010520000145289 +:100890000000185200001C520000285200002C5288 +:1008A0000000305200003452FF3F0000C8781E00A4 +:1008B00038901E00636F756E745F4C433A20257547 +:1008C0002C204C435F7461726765743A2025752C47 +:1008D000204C435F646966663A2025750A00000073 +:1008E000636F617273653A2025752C206D69643AD7 +:1008F0002025752C2066696E653A2025750A000052 +:10090000980F0300900D0300E80A0300786F1800A9 +:100910008864180048463D25642D25642020203237 +:100920004D3D25642D25642C25642C256420202034 +:100930004C433D256420202049463D25642D2564F7 +:100940000D0A0000646F6E650D0A000010B5FF21EE +:100950009931F74802F089FCF649F7484165C91F0B +:1009600041610F21803081824020F44908601F20BE +:10097000890548610820086210BDED49086070478C +:10098000EB4948607047EA4988607047E849C860A9 +:100990007047102081060860704710B50446214654 +:1009A0000B398A00E4491431885801F0FDFE10BD6E +:1009B00010B5044621460B398A00DF495431885866 +:1009C00001F0F2FE10BD70B505460C460B21DA4869 +:1009D0000174012C02D0022C0AD104E0D649087C13 +:1009E000FFF7E6FF05E0D449087CFFF7D6FF00E0FB +:1009F00000BF00BF70BD70B505460C4622462946B3 +:100A0000CB48103002F0D2FBC948103001218907D1 +:100A100088600846C4600120086070BD2820C8496D +:100A200008600620C7490860704702204107086037 +:100A300070471820C24908600120C2490860BE48BA +:100A4000703841210906486110208106086070470E +:100A500001204003BC4908600520C0020860042052 +:100A6000010708607047F8B507460C4615461E4654 +:100A70003120C0433070AE488030007C2070207838 +:100A8000A84205DC2278AC496F39384602F08EFB6B +:100A9000F8BD01204003AC4908600020A849086067 +:100AA0007047F7B584B000BF00F010FC019000F073 +:100AB00011FC00909E488030007C02909E4880305F +:100AC000C08A401C81B29C488030C1820025029AB5 +:100AD000D1009E4B069A5A43104602F0D2FB039077 +:100AE000092407E060009A49095A601C4000984AAE +:100AF0001152641E002CF5DA039800B29449088064 +:100B0000002407E060009249085E9249095D48436D +:100B10004519641C0A2CF5DD2846E917C90D09188A +:100B20004F1285488030C18A808A814216D17D204B +:100B3000C000874207DD0098421C01460092002257 +:100B4000019801F0BEFB8448874207DA0098421EF4 +:100B5000014600920022019801F0B3FB019800F0D9 +:100B6000D5FB009800F0D6FB0025059819286DD21A +:100B7000092407E0A00079490958601C8000774AE1 +:100B80001150641E002CF5DA7449049808600024A2 +:100B900007E0A000714908586E49095D48434519AE +:100BA000641C0A2CF5DD2846E917C90D09184E12F8 +:100BB00061488030C18A808A814247D14120C0008B +:100BC00086421DD95C48007C0B3881005A4814309D +:100BD0004058401C5849097C0B398A005649143149 +:100BE00088505548007C0B38810053485430405899 +:100BF000401C5149097C0B398A004F4954318850B7 +:100C0000FF20E13086421DD24B48007C0B3881002A +:100C1000494814304058401E4749097C0B398A0026 +:100C20004549143188504448007C0B3881004248C3 +:100C300054304058401E4049097C0B398A003E49D7 +:100C40005431885000213C488030C18207B0F0BD4B +:100C500040203A4908601C20890548610820086244 +:100C60007047402035498031086070473248407CE9 +:100C7000704710B501F00FFB10BD39480068704790 +:100C80003848008800B27047F1B5A2B0402112A8E0 +:100C900002F0EBFA442101A802F0E7FA2649229873 +:100CA0004861002478E0A20023491431885801F0FB +:100CB0007BFD00202921490608602B480860012798 +:100CC00000E07F1C7D20C0018742FAD37F202921CC +:100CD000490608601A480568244806683004401927 +:100CE000A10012AA5050611C4900124AFE32891814 +:100CF000129A514308460F49FE3102F0B8FA611CBE +:100D0000890001AA5050002C3BDDA00012A909580F +:100D1000A0001058143881422AD2A100064814308D +:100D20004058401CA20004491431885029E00000BA +:100D300024020020C30200002403002000E100E0A0 +:100D4000000028520000405200001052093D0000EF +:100D50000C0200201C00002018FCFFFF28000020CF +:100D60000000545200006452FF3F000000002C526B +:100D7000A100BF4840582830611C8A00BC498850F7 +:100D8000641C002C08D1A100B94840582830611CCF +:100D90008A00B7498850641C102C84DB002400E0D2 +:100DA000641C102CFCDB129823B0F0BDF0B5B3B07E +:100DB00005460E460024402121A802F056FA44219F +:100DC00010A802F052FA2022AA4908A8FFF7BCF99D +:100DD0002022A84920316846FFF7B6F9A448143804 +:100DE00045654FE0A200A2494031885801F0DCFC83 +:100DF00000202921490608609F48086001203190A1 +:100E000002E03198401C31907D21C901319888421F +:100E1000F7DB7F2029214906086098480768984831 +:100E20000068329032980004C019A10021AA5050E5 +:100E300062006B46995A620008AB9A5A7243104698 +:100E400002F015FAA10010AA5050A00021A90958DB +:100E5000A0001058401F814209D2A10084484030B0 +:100E60004058401CA2008249403188500AE0A1004D +:100E70007F48403040582830611C8A007C4940310E +:100E80008850641C102CADDB33B0F0BD70B5044647 +:100E90002046FFF7F9FE05467A4800F0A8FAFF2041 +:100EA0002B3000F0B3FAFF20343000F0AFFAFF200F +:100EB000F93000F09CFAFF20FB3000F0A7FAFF2089 +:100EC000FD3000F0A3FA29462046FFF76FFFFFF739 +:100ED000E0FD70BD70B5012080070469C56901217E +:100EE000634814384174002D08D008202840002899 +:100EF00003D000215E481438417400BF01208007F0 +:100F0000456202202040002809D05F480068002880 +:100F100005D02122520650685B4A11688847042098 +:100F20002040002809D058484068002805D02122D8 +:100F300052065068544A51688847082020400028CB +:100F400009D051488068002805D0212252065068F7 +:100F50004D4A9168884710202040002809D04A480F +:100F6000C068002805D0212252065068464AD16840 +:100F7000884701208007846170BD70B543480568CB +:100F80004348066830044019424909688900424ACA +:100F9000505040480068401C3E4908603F48006887 +:100FA000202108433D490860084600683C49086024 +:100FB0003A4800682021884338490860084600689C +:100FC00037490860334800680A281ED1012406E02A +:100FD000A000314A115833A002F042F8641C0A2CD8 +:100FE000F6D3FF2001303149086040002F49803995 +:100FF0000860002027490860002400E0641C2C4899 +:101000008442FBD32B482C49C86070BD10B5234ADD +:10101000126860231A43214B1A601A461268204B4B +:101020001A601E4A126860239A431C4B1A601A46C3 +:1010300012681B4B1A60012252021C4B803B1A6043 +:1010400052101A4B1A6052001C4B1A600F4A10685B +:101050000F4A11680A0412180E4B1B689B000E4CB5 +:10106000E2500C4A1268521C0A4B1A6010BD000074 +:1010700038030020683B0000FF3F000000002852BA +:1010800000002C52CB030000240200200000445238 +:10109000000048520C0000207C00002018000020B6 +:1010A00000000C5225580D0A0000000080E100E00D +:1010B000102700000400FA0500ED00E080E200E0E7 +:1010C00010B502A001F0CCFF10BD000061646320E8 +:1010D000696E746572727570742074726967676581 +:1010E0007265640D0A00000010B509A001F0B8FF98 +:1010F00010BD10B510A001F0B3FF10BD10B518A0C1 +:1011000001F0AEFF10BD10B51FA001F0A9FF10BD8A +:1011100045787465726E616C20496E746572727583 +:101120007074204750494F33207472696767657245 +:1011300065640D0A0000000045787465726E616C8C +:1011400020496E74657272757074204750494F382B +:10115000207472696767657265640D0A000000009B +:1011600045787465726E616C20496E746572727533 +:101170007074204750494F392074726967676572EF +:1011800065640D0A0000000045787465726E616C3C +:1011900020496E74657272757074204750494F31E2 +:1011A00030207472696767657265640D0A0000001B +:1011B00010B502A001F054FF10BD000075617274FB +:1011C00020727820696E7465727275707420747202 +:1011D000696767657265640D0A0000001E4800219A +:1011E000016041608160C160481E2121490688601C +:1011F00007200860704718490860704703202121C4 +:1012000049060863802015490860704700B502460A +:10121000FFF7F4FF21204006026100BD21204006B7 +:1012200040687047002021214906086380200B494F +:1012300080310860704710B50948046BE007C00FA3 +:10124000002806D004480068002802D00249086837 +:1012500080470348446310BDBC03002000E100E068 +:101260004000004210B5CC21FE4801F0FEFF1121E4 +:10127000FC488030C16203210163152141630F21C5 +:101280008163C163F84901641621416412218164BC +:101290001422F6491830FEF757FF10BDF148803090 +:1012A000C06A7047EF488030006B7047ED4880306F +:1012B000406B7047EB488030806B7047E948803066 +:1012C000C06B7047E7488030006C7047E54880305D +:1012D000406C7047E3488030806C7047E149803152 +:1012E000C8627047DF49803108637047DD4980314B +:1012F00048637047DB49803188637047D949803142 +:10130000C8637047D749803108647047D549803138 +:1013100048647047D34980318864704710B50446EB +:1013200098222146CF48FEF70FFF10BDD04901405B +:1013300049004208CE4B1A4011430846CD490140AE +:1013400089008208CB4B1A4011430846CA49014024 +:1013500009010209C84B1A40114308460106FF2241 +:101360001202024012021143020AFF231B021A401A +:101370001143020E114308467047F3B500256C1E59 +:1013800016E00098465D3046FFF7D0FF064600277E +:101390000BE020467040002804DA6000B74948405E +:1013A000044600E0640076007F1C072FF1DD6D1C11 +:1013B00001988542E5D3E043FFF7B8FFFCBDF0217B +:1013C000014009110207120E11430846CC210140C9 +:1013D000891033220240920011430846AA2101409D +:1013E000491055220240520011430846704710B57B +:1013F00041098A009B4B9A584B01C41A0123DB0711 +:10140000E3409A438B00974CE25010BD10B5410960 +:101410008A00944B9A584B01C41A0123DB07E3401E +:101420001A438B008F4CE25010BDFFB505460E46A7 +:10143000174600240FE028462041C007C00F0028AF +:1014400004D02046F530FFF7E1FF03E02046F530F9 +:10145000FFF7CDFF641C032CEDDD00240FE03046C8 +:101460002041C007C00F002804D02046F930FFF704 +:10147000CDFF03E02046F930FFF7B9FF641C032CD1 +:10148000EDDD00240FE038462041C007C00F0028E2 +:1014900004D02046FD30FFF7B9FF03E02046FD30C1 +:1014A000FFF7A5FF641C032CEDDD00240FE003987B +:1014B0002041C007C00F002804D0E01DFA30FFF71C +:1014C000A5FF03E0E01DFA30FFF791FF641C032C39 +:1014D000EDDDFFBDFFB505460E46174600240FE0C3 +:1014E00028462041C007C00F002804D0E01DFE3070 +:1014F000FFF78CFF03E0E01DFE30FFF778FF641C70 +:10150000012CEDDD002411E030462041C007C00F62 +:10151000002805D02046FF300830FFF777FF04E0B1 +:101520002046FF300830FFF762FF641C012CEBDD22 +:10153000002411E038462041C007C00F002805D024 +:101540002046FF300A30FFF761FF04E02046FF30FD +:101550000A30FFF74CFF641C012CEBDD002411E086 +:1015600003982041C007C00F002805D02046FF3057 +:101570000C30FFF74BFF04E02046FF300C30FFF744 +:1015800036FF641C012CEBDDFFBD30B589B005468C +:1015900020223B4901A8FEF7D7FD002411E0284690 +:1015A000E040C007C00F002805D0610001AA505AD2 +:1015B000FFF71DFF04E0610001AA505AFFF726FF64 +:1015C000641C0F2CEBD909B030BD30B589B005468D +:1015D00020222B49203101A8FEF7B6FD002411E09E +:1015E0002846E040C007C00F002805D0610001AACE +:1015F000505AFFF70BFF04E0610001AA505AFFF7B1 +:10160000F6FE641C0F2CEBD909B030BD00B5FF20ED +:10161000F630FFF7ECFEFF20F730FFF7E8FEFF2083 +:10162000F830FFF7E4FEFF20F930FFF7E0FEFF207F +:10163000FA30FFF7EBFEFF20FB30FFF7D8FEFF206C +:10164000FC30FFF7E3FEFF20FD30FFF7D0FEFF2068 +:10165000FE30FFF7DBFEFF20FF30FFF7D7FE094823 +:1016600012E00000CC030020006A1800A83B000034 +:1016700055555555333333330F0F0F0FB71DC10475 +:10168000BC3B0000FF010000FFF7C0FE012040024C +:10169000FFF7BCFEF848FFF7AAFEF748401CFFF72B +:1016A000A6FEF548801CFFF7B1FE81208000FFF701 +:1016B000ADFE0020F1490860F148FFF7A7FE00BD2C +:1016C000F3B581B00F4600200090019EB800019E46 +:1016D00082193146EBA001F0C3FCF6A001F0C0FC7A +:1016E00000240CE0002507E0A00030580121A940AB +:1016F0008843A10070506D1C202DF5DB641CBC429A +:10170000F0D300241DE0002518E0A000305801218E +:10171000A9400840002809D0A00033582A46214695 +:10172000EAA001F09DFC0098401C0090A0003058F9 +:101730000121A9400843A10070506D1C202DE4DB5D +:10174000641CBC42DFD300241FE000251AE0A00087 +:1017500030580121A94008400121A940884209D000 +:10176000A00033582A462146E4A001F079FC0098F5 +:10177000401C0090A00030580121A9408843A100DE +:1017800070506D1C202DE2DB641CBC42DDD37C1E3E +:101790001DE01F2518E0A00030580121A940084095 +:1017A000002809D0A00033582A462146DFA001F0C6 +:1017B00057FC0098401C0090A00030580121A9401F +:1017C0000843A10070506D1E002DE4DA641E002C49 +:1017D000DFDA7C1E1FE01F251AE0A000305801212F +:1017E000A94008400121A940884209D0A0003358EF +:1017F0002A462146D9A001F033FC0098401C0090F5 +:10180000A00030580121A9408843A10070506D1EEE +:10181000002DE2DA641E002CDDDA002416E000253B +:1018200011E0A00030580121A9400840002809D04B +:10183000A00033582A462146D4A001F011FC00989C +:10184000401C00906D1C202DEBDB641CBC42E6D3D9 +:10185000DAA0009901F004FC0098FEBD30B5054601 +:10186000002411E028462041C007C00F002805D001 +:101870002046FF30ED30FFF7C9FD04E02046FF3081 +:10188000ED30FFF7B4FD641C062CEBD930BD30B54C +:101890000546002411E028462041C007C00F00285B +:1018A00005D077497539081BFFF7B0FD04E074498E +:1018B0007539081BFFF79BFD641C042CEBD905242C +:1018C00011E028462041C007C00F002805D06C4910 +:1018D0007539081BFFF78BFD04E069497539081B52 +:1018E000FFF794FD641C062CEBD930BD30B50546DE +:1018F000002411E028462041C007C00F002805D071 +:101900005F49C91C6018FFF781FD04E05C49C91CF0 +:101910006018FFF76CFD641C042CEBD9052411E062 +:1019200028462041C007C00F002805D05449C91CD3 +:101930006018FFF75CFD04E05149C91C6018FFF70F +:1019400065FD641C062CEBD930BD30B5054600247E +:1019500011E028462041C007C00F002805D04849A3 +:101960000F31081BFFF752FD04E045490F31081BFA +:10197000FFF73DFD641C042CEBD9A806C00F00281E +:1019800004D0E7208000FFF732FD03E0E72080006D +:10199000FFF73CFD6806C00F002804D036482C3005 +:1019A000FFF725FD03E034482C30FFF72FFD30BD55 +:1019B00030B5054600240FE02846E040C007C00FC0 +:1019C000002804D020466B30FFF720FD03E02046BE +:1019D0006B30FFF70CFD641C0F2CEDDD30BD30B516 +:1019E000054600240FE02846E040C007C00F00284D +:1019F00004D020467C30FFF709FD03E020467C3010 +:101A0000FFF7F5FC641C072CEDDD30BD30B5054655 +:101A100000240FE02846E040C007C00F002804D093 +:101A20002046D130FFF7F2FC03E02046D130FFF72B +:101A3000DEFC641C0F2CEDDD30BD70B505460E4696 +:101A400000240AE02046FF30D930FFF7D0FC2046C2 +:101A5000FF301730FFF7CBFC641C0D2CF2DB0024A9 +:101A600005E0FF21E531081BFFF7D0FC641CAC4208 +:101A7000F7D90024BAE0000001020000000028525B +:101A8000920300000D0A0D0A5374617274696E6747 +:101A9000205352414D20746573742066726F6D201F +:101AA0003078255820746F20307825582E2E2E0D32 +:101AB0000A000000546869732074616B65732061CB +:101AC0007768696C652E2E2E0D0A00000D0A4552AE +:101AD000524F52203120402061646472657373203C +:101AE000255820626974202564202D2D2056616CB4 +:101AF0007565206973202558000000000D0A4552C5 +:101B0000524F52203220402061646472657373200A +:101B1000255820626974202564202D2D2056616C83 +:101B20007565206973202558000000000D0A455294 +:101B3000524F5220332040206164647265737320D9 +:101B4000255820626974202564202D2D2056616C53 +:101B50007565206973202558000000000D0A455264 +:101B6000524F5220342040206164647265737320A8 +:101B7000255820626974202564202D2D2056616C23 +:101B80007565206973202558000000000D0A455234 +:101B9000524F522035204020616464726573732077 +:101BA000255820626974202564202D2D2056616CF3 +:101BB0007565206973202558000000000D0A5352F6 +:101BC000414D205465737420436F6D706C6574656E +:101BD000202D2D202564204572726F72730D0A002E +:101BE0002046FF301730FFF702FC641CB442F7D9DF +:101BF00070BD70B505460E46002411E03046E04049 +:101C0000C007C00F002805D02046FF30C530FFF7C1 +:101C1000FDFB04E02046FF30C530FFF7E8FB641C05 +:101C2000042CEBDD002411E02846E040C007C00F83 +:101C3000002805D02046FF30CA30FFF7E7FB04E05C +:101C40002046FF30CA30FFF7D2FB641C042CEBDDCA +:101C500070BD70B505460E46002411E03046E040E8 +:101C6000C007C00F002805D0FF215931081BFFF71E +:101C7000CDFB04E0FF215931081BFFF7B8FB641CC2 +:101C8000042CEBDD002411E02846E040C007C00F23 +:101C9000002805D0FF215431081BFFF7B7FB04E0F3 +:101CA000FF215431081BFFF7A2FB641C042CEBDD61 +:101CB00070BD70B505460E46002411E02846E04090 +:101CC000C007C00F002805D02046FF30E630FFF7E0 +:101CD0009DFB04E02046FF30E630FFF788FB641CE4 +:101CE000042CEBDD002411E03046E040C007C00FBB +:101CF000002805D0FF211631081BFFF787FB04E001 +:101D0000FF211631081BFFF772FB641C052CEBDD6D +:101D100070BDF8B5FA4C650DFA48006A2040F949E3 +:101D200008620846C06B2840C8630846006AF64946 +:101D3000A1430843F3490862F4484862F4488862C2 +:101D4000F448C862F4480863F4484863F448886378 +:101D50000846C06BF349A9430843EA49C863FF201A +:101D6000A930FFF744FBFF20AA30FFF74FFB3F21CC +:101D70000846FFF79EFF07210846FFF75EFE002199 +:101D80000846FFF736FF00210846FFF762FF0020F4 +:101D9000FFF72DFB0120FFF72AFB6020FFF727FB51 +:101DA000FF201030FFF723FBFF20EC30FFF71FFB75 +:101DB0006420FFF71CFB6520FFF719FB6620FFF787 +:101DC00016FB6120FFF722FB0020D7490860D748A7 +:101DD000D74908606720FFF719FB0B260227F0029E +:101DE000F9010843D349086005200090D2490098C2 +:101DF0000860FF200E30FFF7FAFAFF200F30FFF7E0 +:101E0000F6FA0020FFF72AFDF020FFF7FFFA5D2029 +:101E1000C000FFF7FBFAC948FFF7F8FAC748401CB3 +:101E2000FFF7F4FA0120C6490860F8BD70B5C54C4B +:101E3000650DB448006A2040B24908620846C06B8C +:101E40002840C8630846006ABF49A1430843AD491A +:101E50000862AE484862AE4840308862BB48C862FB +:101E6000BB480863BB484863BB4888630846C06BEF +:101E7000BA49A9430843A349C8630020FFF7C6FA3B +:101E80000120FFF7C3FA0D20FFF792FD2620FFF790 +:101E9000A6FD5020FFF7BAFDEE20FFF7B7FAEF20BE +:101EA000FFF7B4FAFF200E30FFF7A1FAFF200F3042 +:101EB000FFF79DFA8420FFF7A9FA05269E480660E1 +:101EC0000A210020FFF795FE0020FFF7C7FCF02055 +:101ED000FFF79CFA01204003A1490860F002086066 +:101EE00070BD10B50A467F2383435901854B9B6F14 +:101EF0007F246401A343834CA36723469B6F0B435A +:101F0000A36710BD7F22824351037E4A926F7F23D5 +:101F10005B039A437B4B9A671A46926F0A439A6710 +:101F2000704710B5F023034019090207754B9B6FEA +:101F30001B091B01734CA36723469B6F0B43A367CD +:101F40002346DB6F1B011B09E3672346DB6F13434B +:101F5000E36710BD00B57D20C000FFF757FA814848 +:101F6000FFF754FA7F48401CFFF750FA7D48801C69 +:101F7000FFF74CFA80207C4908607F20FFF7D1FFF3 +:101F80007F20FFF7BFFF00213F20FFF7AAFF00BD22 +:101F900070B50346002400200325AD021D402C012E +:101FA0000F252D031D402D0B28433F252D011D40DE +:101FB000284395022843CD0228431D072D0C2843B2 +:101FC000E5436A4E3560C543694E356070BD0028F3 +:101FD00024D14C49C96F042211434A4AD1671146A2 +:101FE000C96F02229143474AD1671146803109687F +:101FF0000122D2071143434A803211604149C96F1F +:1020000049084900803AD1671146803109680722A2 +:10201000120711433B4A80321160F5E0012822D1BA +:102020003849C96F02221143364AD1671146C96F38 +:1020300004229143334AD167114680310968C207AF +:102040001143304A803211602E49C96F8143803A72 +:10205000D167114680310968072212071143294AC6 +:1020600080321160D0E0022823D12649C96F0422B2 +:102070001143244AD1671146C96F02229143214A74 +:10208000D1671146803109684A0052081D498031E4 +:102090000A608039C96F012211431A4AD16711467B +:1020A00080310968072212071143164A80321160F5 +:1020B000AAE003285ED11349C96F04221143114AD3 +:1020C000D1671146C96F022291430E4AD16711466A +:1020D00080310968C20711430A4A803211600949F8 +:1020E000C96F49084900803AD167114680310968B3 +:1020F000012292079143034A8032116084E000007C +:102100000000FCFFCC030020E0FF5040882142008B +:102110003100048881403B1102817E024448ED0376 +:1021200000000160032EE0FF000038520FA0000005 +:1021300000003C5200000C5200002452E902000052 +:10214000000040520000FEFFF0FF000081400C1034 +:102150000281180044C87F01010001700008E0FFFF +:1021600000001052E903000000002C52000014523D +:1021700000001852042822D1FE49C96F04221143DD +:10218000FC4AD1671146C96F02229143F94AD167CF +:1021900011468031096842071143F64A80321160C6 +:1021A000F449C96F49084900803AD1671146803126 +:1021B0000968C2069143EF4A8032116024E0052885 +:1021C00022D1EC49C96F04221143EA4AD167114672 +:1021D000C96F02229143E74AD167114680310968ED +:1021E000C2071143E34A80321160E249C96F4908CE +:1021F0004900803AD16711468031096803225207AD +:102200009143DC4A80321160704710B50A467F2343 +:1022100083435903D74BDB6F7F246403A343D54C1F +:10222000E3672346DB6F0B43E36710BD10B504463D +:1022300000217F20FFF7E9FF0420FFF7C8FE0122FD +:102240001146FF20E130FFF7A3FEFD208000FFF7DD +:10225000DDF810BD70B503460C467F2529267606AD +:102260003560C54D2868C54D29680D042D181D60C1 +:10227000C34D2868C34D29680D042D182560C24D33 +:102280002868C24D29680D042D1815600025356099 +:10229000BF4D356070BDBF4800680121890208400C +:1022A000002804D0BB4800888005800D70470020BE +:1022B000FCE7B94800787047B84800780007000F7D +:1022C0007047F0B505460E461746002411E0284633 +:1022D0002041C007C00F002805D0FF21B031081BE6 +:1022E000FFF794F804E0FF21B031081BFFF77FF8F7 +:1022F000641C042CEBD9002411E030462041C007B7 +:10230000C00F002805D0FF21B631081BFFF77EF86B +:1023100004E0FF21B631081BFFF769F8641C042CA8 +:10232000EBD9012F03D19E48FFF770F802E09C48DB +:10233000FFF75DF8F0BD70B505460E46002411E0CC +:102340003046E040C007C00F002805D094499031C6 +:102350006018FFF75BF804E0914990316018FFF7CF +:1023600046F8641C032CEBDDF006C00F002804D0F7 +:102370008B489430FFF73BF803E089489430FFF72F +:1023800045F8002411E02846E040C007C00F0028AF +:1023900005D0D72189006018FFF738F804E0D7216D +:1023A00089006018FFF723F8641C012CEBDD022480 +:1023B00011E02846E040C007C00F002805D078494A +:1023C00093316018FFF713F804E0754993316018F2 +:1023D000FFF71CF8641C042CEBDD70BD282071494C +:1023E000086020200860704710B5002100222521D8 +:1023F00026E0002221E08B005E4CE358012494404B +:102400002340002B01D1212000E02020654B1860E3 +:1024100002240346A3431846624B18600423184362 +:10242000604B186004240346A34318465D4B1860B4 +:10243000022318435B4B1860521C202ADBDB491E29 +:102440000029D6DA10BDF7B584B00546E806C00EFF +:1024500003900598C006C00E02900698C006C00EF4 +:1024600001900398FEF7ABFF00900298FEF7A7FFDC +:1024700006460198FEF7A3FF04460023002700BF8D +:1024800000BF009800907820204040020343F000F5 +:1024900003430098C008034380202040C00907433D +:1024A000364803604048076007B0F0BD0146002091 +:1024B000CA07120E104302220A405201104304229E +:1024C0000A40D200104308220A4052001043102252 +:1024D0000A405208104320220A40D20810434022EA +:1024E0000A405209104380220A40D2091043704723 +:1024F000F0B585B006460C4615461F461D4880308F +:102500008661183044608560C7601A4998310A981E +:102510000861084618388068244908400346304658 +:10252000FFF7C4FF0006C00E04902046FFF7BEFF71 +:102530000006C00E03902846FFF7B8FF0006C00E45 +:1025400002903846FFF7B2FF0006C00E01900A98CD +:10255000FFF7ACFF0006C00E00900498800603430E +:102560000398400503430298000403430198C00206 +:1025700003431DE0CC0300200000185200001C5251 +:102580000000285200002C5200003052000034524B +:10259000FF3F0000000040520000545200003C5237 +:1025A000D602000000005852000020521F00008098 +:1025B00000988001034320200343BA48836005B09C +:1025C000F0BD38B5FEF74EFEFDF790FFFEF7BEF901 +:1025D000FEF704FE00F084F9FFF718F800231A460E +:1025E00019461846FEF776FF0023062211461046CC +:1025F000FEF71BFF0020FEF7E8FFAB48FEF7C5FF24 +:10260000AA48FEF703FFA74AD16A106BFFF793FEB3 +:10261000A648001DFEF7FAFEA548FEF7F7FE31209A +:10262000FEF7F4FE3020FEF7F1FE2F20FEF7DFFE6E +:102630002E20FEF7EBFE2D20FEF7D9FE2C20FEF714 +:10264000E5FE2B20FEF7E2FE2A20FEF7DFFE97488C +:102650000930FEF7DBFE96484630FEF7D7FE29200C +:10266000FEF7D4FE022403E02046FEF7CFFE641CF2 +:10267000092CF9DBFFF74DFBFFF76CFC894A916CE5 +:10268000506C0022FFF71DFE8648C06B0090854805 +:10269000836B1F21426B0846FFF72AFF83482138CE +:1026A000FEF7B4FE0F220C211720FFF7CCFE7D2091 +:1026B0000001FFF7BBFDFFF797FEFFF78FFE38BD68 +:1026C000F8B500202921490608607A4808600127EA +:1026D00000E07F1C78488742FBDB7F2029214906E8 +:1026E0000860764804687648056828040619084694 +:1026F0000468744805682804001900907003009964 +:1027000000F0B5FDF8BD18B5664818300069654C95 +:1027100018340090E368A2686168183CA069FFF76C +:10272000E7FE18BD70B503460C467F2529267606C0 +:102730003560624D2868624D29680D042D181D60B2 +:10274000614D2868614D29680D042D1825603546B6 +:1027500028685C4D29680D042D181560002535602A +:10276000544D356070BD10B500210BE003689B0F20 +:102770000468E40E6340DA07D20F03685B0013437A +:102780000360491C0829F1DB10BD10B5002408E0E6 +:10279000A000444980390A5821464DA000F060FC51 +:1027A000641C262CF4D310BDF0B585B00546002678 +:1027B0000027172003908C2002902846029900F0F1 +:1027C00060FD1330C0B200902846029900F059FD18 +:1027D0000D462846039900F054FD41004018C019E9 +:1027E000C0B201902846039900F04BFD022800DB9F +:1027F00000BF2846039900F044FD8819C4B20F2C8D +:1028000000DD641C224601990098FFF71CFE05B00C +:10281000F0BD24488038806F012109058843214993 +:102820008039886770471F488038806F012109050B +:1028300008431C498039886770471A488038006C03 +:102840000921C9068843174980390864704715482B +:102850008038006C0921C906084312498039086490 +:102860007047104800680121C90408430D490860F9 +:1028700070470C4800680121C90488430949086071 +:1028800070470848006803214904884305490860E7 +:10289000704704480068032149040843014908605F +:1028A000704700004C040020FFFF00007B04000084 +:1028B00029020000FF3F000050C300000000185232 +:1028C00000001C520000045200002052000024525C +:1028D0004153435B25755D203D20307825780A0003 +:1028E00010B57021FA4800F0C0FC0021F8484030D3 +:1028F000017002214170722181703221C1708021EA +:102900000171C6214171252181710121C1715321BC +:10291000017343210C304170552181704D21C170EC +:102920003321017110BDF0B597B000270024AA2013 +:10293000169015901490E648403080798006800EFD +:10294000403008904021E24800F08FFC2C2109A87B +:1029500000F08BFC552239467F1CDD4842546B2227 +:1029600039467F1C42547D2239467F1C42549122B5 +:1029700039467F1C4254712239467F1C4254402202 +:102980002146641C09A84254A4222146641C4254D6 +:1029900005250AE0CE494031485DFEF710FD21468D +:1029A000621CD4B209AA50546D1E002DF2DAC84838 +:1029B0004030C07900281AD060222146601CC4B281 +:1029C00009A8425410222046611CCCB209A90A541D +:1029D00000250AE0BE494C31485DFEF7F0FC214677 +:1029E000621CD4B209AA50546D1C052DF2DBB84804 +:1029F0004030007A002820D0C0222146601CC4B29A +:102A000009A8425403222046611CCCB209A90A54E9 +:102A1000AF494031498A0812FEF7D1FC2146621CB9 +:102A2000D4B209AA5054AA494031887CFEF7C7FCA9 +:102A30002146621CD4B209AA5054A5484030407ABD +:102A400000285FD090222046611CCCB209A90A540C +:102A500043222046611CCCB209A90A549C49496D05 +:102A6000080EFEF7ACFC2146621CD4B209AA5054F1 +:102A70009749496D0902080EFEF7A1FC2146621C28 +:102A8000D4B209AA50549249496D0904080EFEF7C0 +:102A900096FC2146621CD4B209AA50548C49496D57 +:102AA000C8B2FEF78CFC2146621CD4B209AA50546D +:102AB0008749896D080EFEF782FC2146621CD4B25C +:102AC00009AA50548249896D0902080EFEF777FC65 +:102AD0002146621CD4B209AA50547D49896D09046B +:102AE000080EFEF76CFC2146621CD4B209AA5054B1 +:102AF0007749896DC8B2FEF762FC2146621CD4B2E8 +:102B000009AA505472484030807A00283BD070485F +:102B1000416E006E6F4A704B0391029000F0D4FD3D +:102B20000791069000206D49079B069A00F032FE3F +:102B300000226B4B0191009000F0C6FD03910290C2 +:102B400000F0F2FD0590C0222146601CC4B209A825 +:102B5000425483222046611CCCB209A90A5405992B +:102B60000904080EFEF72BFC2146621CD4B209AA08 +:102B700050540599C8B2FEF722FC2146621CD4B21B +:102B800009AA505400BF52484030C07A00281AD0D9 +:102B9000A0222046611CCCB209A90A5483222046F7 +:102BA000611CCCB209A90A5400250AE048496831E1 +:102BB000485DFEF704FC2146621CD4B209AA5054B9 +:102BC0006D1C042DF2DB002431E007252BE009A861 +:102BD000005D0121A940084028411499C907C90F87 +:102BE00006464E40149840101599C907090E08432F +:102BF0001490159840101699C9010843B101484036 +:102C000071014840C0B2159016984010F101084378 +:102C1000B101484031014840F1004840710048404E +:102C2000C0B216906D1E002DD1DA601CC4B2272CE4 +:102C3000CBDB1498FEF7C3FB14901598FEF7BFFB8F +:102C400015901698FEF7BBFB16902146621CD4B275 +:102C500009AA149850542146621CD4B209AA1598A6 +:102C600050542146621CD4B209AA1698505400242C +:102C700023E007251DE009A8005D0121A940884344 +:102C800009A9095D0122AA401140089AD207D20F72 +:102C9000AA405140084309A90855089840100899CE +:102CA000C907490E08430899C907490F48400890C9 +:102CB0006D1E002DDFDA601CC4B22A2CD9DB04495A +:102CC000C8192A2209A900F071FA17B0F0BD000056 +:102CD00098040020666666666612714000005940DE +:102CE0000000F03F10B500244021D64800F0BDFAA6 +:102CF0001D222146641CD348425455222146641C9F +:102D00004254AD222146641C4254F6222146641CE2 +:102D1000425445222146641C4254C7222146641C69 +:102D20004254C5222146641C42540E222046611C96 +:102D3000CCB2C4490A5426222046611CCCB2C149F7 +:102D40000A5413222046611CCCB2BE490A54C22246 +:102D50002046611CCCB2BB490A54AC222046611CFF +:102D6000CCB2B8490A5498222046611CCCB2B5496D +:102D70000A5437222046611CCCB2B2490A54B82208 +:102D80002046611CCCB2AF490A5430222046611C57 +:102D9000CCB2AC490A54A1222046611CCCB2A9494C +:102DA0000A54C9222046611CCCB2A6490A54E42226 +:102DB0002046611CCCB2A3490A5493222046611CD0 +:102DC000CCB2A0490A5475222046611CCCB29D4960 +:102DD0000A54B7222046611CCCB29A490A544122B7 +:102DE0002046611CCCB297490A546C222046611CD3 +:102DF000CCB294490A54D1222046611CCCB29149EC +:102E00000A542D222046611CCCB28E490A54B822A5 +:102E10002046611CCCB28B490A5410BD10B5044643 +:102E2000062221468748403000F0C0F910BD854990 +:102E300040318871704783494031C871704710B57F +:102E40000446052221467F484C3000F0AFF910BD02 +:102E50007C494031087270477A4940314882704756 +:102E600078494031487270477649486570477549DE +:102E7000886570477349403188727047714A51665E +:102E8000106670476F494031C872704710B50446EC +:102E9000042221466B48683000F088F910BD10B557 +:102EA000F9208000FEF7B2FA6748FEF7A0FA6648FC +:102EB000401CFEF79CFA6448801CFEF798FA7D20BF +:102EC000C000FEF794FA6048001DFEF790FA5E48D5 +:102ED000401DFEF78CFA5C48801DFEF788FA5A48C0 +:102EE0001030FEF793FA58482C30FEF78FFA564808 +:102EF0002D30FEF78BFAF1208000FEF778FA524869 +:102F00005430FEF774FA0020504908607F20FFF724 +:102F100008F87F20FEF7F6FF00213F20FEF7E1FFD3 +:102F2000FFF762FAFFF75AFA10BD10B5FEF77EFF01 +:102F3000FF20A930FEF75BFAFF20AA30FEF766FA01 +:102F4000FF20A730FEF762FA3F210846FEF7B1FEE8 +:102F500007210846FEF771FD4C20FEF740FD7B205F +:102F6000FEF745FA5D20C000FEF750FA3648FC38FF +:102F7000FEF74CFA3448FB38FEF748FA0120344992 +:102F80000860FFF731FAFFF729FA10BD0020102181 +:102F900008434008400004210843202108432B49EE +:102FA0000860704770B500200125284304260546B7 +:102FB000B543284620260546B5432846234D2860BC +:102FC000002123E01F4D6C5C07221CE025461541C3 +:102FD000EB07DB0F002B05D102260546B54328463B +:102FE0001A4D2860012B03D102252843174D286074 +:102FF00008252843154D286008260546B543284670 +:10300000124D2860521E002AE0DA491C4029D9DB03 +:1030100070BD10B5FFF7C6FFFDF700FD68200D4934 +:103020000860002400E0641C322CFCDBFFF7AEFFDC +:10303000002400E0641C08488442FBDBFDF729FD06 +:1030400010BD000098040020E503000000002C5291 +:103050000000405200002852204E0000704700003F +:103060000FB4054910B503AA029800F011FD10BC79 +:1030700008BC04B01847000004000020F8B50E4654 +:103080000446002020622046E1688847002829D0B5 +:10309000252802D06268A16820E0E1682046002768 +:1030A000884705001ED028464138192802D8012734 +:1030B000FF0220353246204627602946FDF71EF8DC +:1030C000002808D0012804D0F61DF608F6000836BE +:1030D000D9E7361DD7E762682846A1689047206A7D +:1030E000401CCFE7206AF8BDF7B5002575291068A8 +:1030F000009914A611D0C046C046002802DA40420A +:1031000011A608E0009909688A0701D50FA602E018 +:10311000490704D50EA6012501E0C046C046009F20 +:103120000024243704E000F0C7FC30313955641C1A +:103130000028F8D12B4632462146009800F04FFC7B +:10314000FEBD0000000000002D0000002B0000006C +:103150002000000070B504460D4621461068C046A8 +:10316000C0462188090502D50F4A7A4402E00E4A7A +:103170007A440E3223460021243305E00607000975 +:10318000360F965D5E54491C0028F7D12078002345 +:10319000000705D5702D03D0002901D0022311327C +:1031A000204600F01CFC70BD8E0A0000F8B5042A11 +:1031B0002CD3830712D00B78491C0370401C521E7D +:1031C00083070BD00B78491C0370401C521E8307E9 +:1031D00004D00B78491C0370401C521E8B079B0FB8 +:1031E00005D0C91ADF002023DE1B08C90AE0FCF75E +:1031F000ABFFF8BD1D4608C9FD401C46B4402C433A +:1032000010C0121F042AF5D2F308C91A521EF0D4B6 +:103210000B78491C0370401C521EEAD40B78491CE1 +:103220000370401C012AE4D409780170F8BD01E064 +:1032300004C0091F0429FBD28B0701D50280801C22 +:10324000C90700D00270704700290BD0C30702D015 +:103250000270401C491E022904D3830702D5028054 +:10326000801C891EE3E70022EEE70022DFE7002250 +:1032700003098B422CD3030A8B4211D300239C46B3 +:103280004EE003460B433CD4002243088B4231D32B +:1032900003098B421CD3030A8B4201D394463FE0BF +:1032A000C3098B4201D3CB01C01A524183098B421F +:1032B00001D38B01C01A524143098B4201D34B0108 +:1032C000C01A524103098B4201D30B01C01A52416B +:1032D000C3088B4201D3CB00C01A524183088B42F2 +:1032E00001D38B00C01A524143088B4201D34B00DB +:1032F000C01A5241411A00D201465241104670474D +:103300005DE0CA0F00D04942031000D34042534051 +:1033100000229C4603098B422DD3030A8B4212D311 +:10332000FC22890112BA030A8B420CD38901921143 +:103330008B4208D3890192118B4204D389013AD080 +:10334000921100E08909C3098B4201D3CB01C01A55 +:10335000524183098B4201D38B01C01A5241430968 +:103360008B4201D34B01C01A524103098B4201D356 +:103370000B01C01A5241C3088B4201D3CB00C01AC3 +:10338000524183088B4201D38B00C01A5241D9D2DB +:1033900043088B4201D34B00C01A5241411A00D25C +:1033A0000146634652415B10104601D34042002B58 +:1033B00000D54942704763465B1000D3404201B5D7 +:1033C0000020C046C04602BD7047704770470000ED +:1033D000F0B50C46871A9C410D46861A9D4103D2D2 +:1033E000C01BA141D21963410D0D1F0DC94EEC1B2D +:1033F000AE435CD07F057F0D0026002F51D02D05F8 +:10340000AC46A943DD020123ED0A1B051D43202321 +:103410001B1B24D41746E740381871412F46E7405C +:10342000CC199D402818314661410C0D27D16144CB +:103430009A4013D50023401C594152000ED1400838 +:10344000400001224B005205D34207D3052040071C +:10345000C14201D5B04900E0B0493046F0BD6B0033 +:10346000002A00D001229A181F23203C1B1B01D5E3 +:10347000002302E0E540281871410C0DD7D001244B +:1034800024050919C407CD0740084908E40F28435B +:103490006144002CD5D00024401C61419A40D0D119 +:1034A000CDE76A05520DD9D1C90FC907D5E79C4DA3 +:1034B0004E00002801D0012400E0002434195F00F0 +:1034C000002A01D0012600E00026BE19954FAC422B +:1034D0000CD8AE420AD8B44206D001256D05EC42A4 +:1034E000BCD010461946F0BD9942FCD000203946A8 +:1034F000F0BDF0B51FB40C460F46811A9F4125461A +:10350000861A9D4106D20125ED076F40401ABC4145 +:1035100052187B41210D1E0D8D1BAC467D4D8D43F8 +:103520007ED075056D0D7CD00D05AE46AC431B03FA +:103530001B0B794D52429D41202366469B1B14D3A1 +:103540001746F740381800260090744160462F4611 +:103550000741E41900989D402818664116D4714629 +:1035600071189A4025D5012320E093182A466A4114 +:103570005200002B00D0521C1E23203E9B1B002B10 +:1035800061DD3541EE1728186641E8D5001876410F +:103590005B1C9A4000D3401C4B05F3181524E340F4 +:1035A00010D3002B52D071467118D30FC01802D31C +:1035B000491C05B0F0BD0123DB079A42F9D1400850 +:1035C0004000F6E701225205B21801D1002853D07D +:1035D0000123CC0ADB029943891E002A08D1020C80 +:1035E00003D0020C0004103902E00246002020390A +:1035F0000023550B05D112020823550B01D15201AE +:103600000D23550C01D112011B1DD50C01D19200C7 +:103610009B1C150D01D152005B1C2025EE1A01E008 +:103620002CE022E00546F54015439840CA1AE10710 +:1036300069181305C918002ABBDA032040070818C7 +:10364000C10FC9070FE071466118B2E7F1074008E2 +:103650000843711071444A000CD001235B059A4263 +:10366000A7D2C90FC9070020A3E74905490D26D1F4 +:10367000002001E00028F4D100219AE7284D6600DF +:10368000002801D0012100E0002171185F00002A0C +:1036900001D0012600E00026BE19224FA94210D811 +:1036A000AE420ED8B14208D001256D05E94206D0E0 +:1036B0001946A802414010467BE79C4201D02146B2 +:1036C00077E70020394674E710B50C465C4005D515 +:1036D0000124E4076340FFF70CFF10BDFFF778FEFD +:1036E00010BD30B40C465C4004D50124E4076340AF +:1036F00030BC6DE630BCFCE670B50124E4076140E7 +:103700000D465D4002D4FFF763FE70BD6340FFF7D6 +:10371000F0FE70BDFF0700000000F0FF0000F07F2A +:103720000000E0FF0000F87F30B50346CA02400DFC +:103730001043164D164C0A1502D02043002A06DB12 +:10374000AA1A002A12DDD040FF2A0BDC30BD520538 +:10375000520D01D140004008AA1A07D4D04040427F +:10376000FF2A01DD002030BD0028FCDD4A00002BCF +:1037700001D0012000E00020101801225205D042A3 +:10378000F0D8C817C043604030BD00001E040000E0 +:1037900000000080F0B58B4C0F09254689B0BD4371 +:1037A0007BD01D092646AE43FAD00E465E40274028 +:1037B000F60F3E43254071D024012142FBD0FF2467 +:1037C000AD19A4042D1B039501252D05DB02DB0A91 +:1037D000C9022B43C90A29431E010901040F130F13 +:1037E000050121431701880B820391432D098C4663 +:1037F000A90B1E438A039543B30B9A0396433F09D3 +:10380000BA0B9403A74302962E467E430497B6460E +:103810004E19D7190C460196544305977E43371B22 +:103820007646BF1B3601B646BE0B36190096764665 +:10383000BC043719009C01D3641C00946400002F61 +:1038400001D001263443029E049F754366467E43A1 +:103850000496760034196E0034190094029C019E7F +:103860001C196643751BAE46069465464519059CB2 +:1038700005956C43594375460891691A0191049E58 +:1038800001465143A41B0491611A009C0791E10673 +:1038900005D061090122114302E072E06EE0610986 +:1038A000089D00272C0A2D066918049D7C412A0AD0 +:1038B0002D066918019D6241AC0DAD026D18544191 +:1038C000079A910D920255196141029A6446584334 +:1038D0005443069B059A5A43121A131B9A0E9B01D6 +:1038E0005B187A41010B0005C3185141220A2006DA +:1038F00044195A419A4200D2491C01204002814297 +:1039000003D315230226F64302E014230326F643CD +:103910002020C51AA9401746AF40DA400A43204686 +:103920000399D8400914731819055118039A38439C +:10393000D2075140AC4009D00122944006D3002266 +:10394000401C5141002C01D1400840001E4A9342C6 +:1039500012D3012203989206904207DB052040070C +:1039600009181A480143C012414004E003204007EF +:103970000818C10FC907002009B0F0BD0020F107E9 +:10398000FAE705180C464C4111486D42A04115D389 +:1039900094181A465A410E48644290410ED30120B1 +:1039A0004A004005824209D35A00824206D3594058 +:1039B000C90F084AC90700201143DDE70020064966 +:1039C000DAE700000000FF07FE070000FFFFFF7FAF +:1039D0000000E0FF0000F07F0000F87F7047FFB5B7 +:1039E00004460D4681B0243000902168880604D535 +:1039F0001022E0699143216000E00120A84201DD2E +:103A0000471B00E000270498A1697A191018081ACA +:103A1000A0612078C00602D42046C046C0460026D9 +:103A200008E003986268A168805D9047206A401CA6 +:103A3000761C206204988642F3DB2078C0060AD503 +:103A40002046C046C04606E06268A1683020904724 +:103A5000206A401C206238467F1E0028F4DC07E004 +:103A600000986268A168405D9047206A401C20620F +:103A700028466D1E0028F3DC2046C046C04620784C +:103A8000000602D5022005B0F0BD0120FBE70000D2 +:103A9000084B70B50D467B4400F027F804462846D5 +:103AA000FCF70BFD002802D00020C04370BD20466B +:103AB00070BD0000F7C9FFFF01468008081A02091F +:103AC0001018020A1018020C1018C00882001218F0 +:103AD0005200891A01E0401C0A390A29FBD27047BA +:103AE00001694A1C02610878704700B58FB00291E5 +:103AF00000210591054901937944039111460490F1 +:103B00006846FFF7BBFA0FB000BD0000E5FFFFFFFE +:103B1000754600F025F8AE46050069465346C008D4 +:103B2000C000854618B020B5FCF79AFC60BC0027A1 +:103B30004908B6460026C0C5C0C5C0C5C0C5C0C579 +:103B4000C0C5C0C5C0C5403D49008D46704710B5D1 +:103B50000446C046C0462046FCF7EFFA10BD000000 +:103B6000004870470805002022038803A1030D01C7 +:103B7000B503B20171014202C701CA038B002901DA +:103B80004B026D0075019F00210385039C030B010F +:103B9000AC03AD016C013902BF01B70388002201FB +:103BA0003C026A006A019A001F0000001F0000002A +:103BB0001D00000002000000020000006B046D0404 +:103BC0006F0471047404760478047A045B045D0461 +:103BD0005F0461046404660468046A046C046E048F +:103BE0007004720473047504770479045C045E0441 +:103BF000600462046304650467046904303132338D +:103C00003435363738394142434445464030580010 +:103C10003031323334353637383961626364656642 +:103C200040307800443C00000000002054000000B8 +:103C3000C4000000983C0000540000201C1100004B +:103C4000E0000000000000000000005100000051F2 +:103C50000000000000000000000000000000000064 +:103C6000041025405760574025100400F40100005F +:103C7000F4010000F4010000F4010000F401000070 :103C8000F4010000F4010000F4010000F401000060 -:103C9000F4010000F4010000F4010000F401000050 -:043CA0000000000020 +:083C9000F40100000000000037 :0400000500000000F7 :00000001FF diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin index ee68f1db9f268e6129ee638cfd2e54bd4db4a7be..f33fc672b047d62938c87be2697d0ad4483452ac 100644 GIT binary patch delta 1136 zcmYjQacCP=9R9sao1STGE_7WQ+uBRxT*|<09YTecW~nCcbklZPa4=Y1QDe*2WEyRq zNmFKN6{OcaE9r2h3~`P!))6Ww3r(R6i_RtWuOij-4;jLc2Lqef*wZ&0~4J+jx+k_En50?#uU;JMN%Wug}=vkOP| zf2SX(@m7KVs1aG#gNjOnk_(E*SNHy6tMJv2Qq=QCwr!;!FFmg~WKR);0+ zejl8H8IFB^|994W&?DbIykVPWLA4(Iz z>sYp|n#?d)`3{B=y@oSsIG-9gW?b-iRN&uhoAh@@JmYZv zM&&~!Y;_$C+gzhz2|qcJ*V%yCJujPFIBjtH`~({0{Q? zE+=wYSW(2@P#_fGi&G20CpD`IT-7QOr!))VCG9aprd8mHKi5R$(^>`M7n)fek(*tL zS?s+<;lz-){-z>^nq{xq99*CflvF7JWpSrXy+O^v8~<~v)OmE~A30;r>!`0k(jPmo zp}xjWSJb?7727&ZVMy>qH|CV8#Dq^+vnISxTGiSA)H`)8u#u3~ z1`Tx%6LpPm(~CiuU+8}i|D)T*J{lkP)}K)(!lFMuZ1Xg-Zn0Xf*#McM12`rc)#<6+ zfZSk?$UlTce^M2%nje=6a?>}8d^m`=)spP6%?Ko&T(`RgGS5oYlcX>C*`7gx9AF&| zC)?}r5DT&?0xavOCVP^9I20RElLz-dw2<>jcgtZy^kmPGTVi!3UQ8haa=J5=lKr6+ kz!r11MaX3~*>;e0vZc0F`9Y3SbdI4!Ni@TmnF>?eIYtSV zmcVA6A$Fc~Wit+iCCfq<^hEzzLorKq2Bl?xElR@7;$oc1TV}G>l{J}$&+q&D zz3+RMd-vY$;oNZIa?w&7!0nTZJD-})iK&4mnlMZ3)3h;Qv+Q4r6NG4M6qr8wm%;?Bs#N`W3 znK;cs1FXGSGr*2{@Bc#iHD#I9x&A5uC+n{=sWlzl;%?3YzqJnTCo;f)Uw>JS_hMG; zw54%D-@{_9lxH;}QU0R_P8sJc4o025ttLL71AZD;no;^`b#yw{IYs$do$}rPQ2vd! zj{$EibZ(IF9&}Hv6MiVS2Yv79UC43$B{td*65-ao+1Jg|{Zn33_5~an)Xi(%nBUQ1 zLA&)Ds<&_ty76s)k&W@1HIT{l2mlNq%rQhO;PUvE4g?Yk3e+HdF|1vsZC~ZlX1^r8?JsbKe z>ez-RQks4*3%x;q(9h>j&H+EASrfoN(Mpl0wGw1f+k~9dihaP(Xaef9S~2od&60>p zO-|V&^nT5tE9|NHN*01mlE-2Rs0;#PLQH}==CCE^m?bdxzfM`=5_T><>>P8C`l7PGxZ;iTxUESBVd{>oPRnJJ5u47eWO;{&OlY|dzrAgp> zH7k;7Cs-^D?sqeBmc|^;9%s-u<*m9ljv1=QMzLBjsV_Vv)W>tq-06`$?l@$ymF`f zL-L9``pDaqG$?nrbPzMrp*&j|uCTTPbYrw&*f74WT{KJT^-9@BPN=TNyCvk1TG_mV zki06ld?}O{;gzKskkUJYDajX10sN_KZW|yUD`Ra>l6FOHyK29HYhp;9h%5Nyl!^BJ F{{m{0#GL>D diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex index 584f3eb1..6dc97a52 100644 --- a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex +++ b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex @@ -10,50 +10,50 @@ :1000800000F002F800F050F80CA030C8083824182E :100090002D18A246671EAB4654465D46AC4201D1C0 :1000A00000F042F87E460F3E0FCCB64601263342A2 -:1000B00000D0FB1AA246AB4633431847CC3C0000A5 -:1000C000EC3C0000103A02D378C878C1FAD8520745 +:1000B00000D0FB1AA246AB4633431847C03C0000B1 +:1000C000E03C0000103A02D378C878C1FAD8520751 :1000D00001D330C830C101D504680C6070470000FE :1000E0000023002400250026103A01D378C1FBD854 :1000F000520700D330C100D50B60704710B564299A -:1001000002D103F0A3F810BD752902D103F09EF8C7 -:1001100010BD782902D103F0CFF810BD002010BD2A -:100120001FB51FBD10B510BD03F0A4FD1146FFF7AC -:10013000F7FF00F0A4F803F0BCFD03B4FFF7F2FFF3 +:1001000002D103F09DF810BD752902D103F098F8D3 +:1001100010BD782902D103F0C9F810BD002010BD30 +:100120001FB51FBD10B510BD03F09EFD1146FFF7B2 +:10013000F7FF00F0A4F803F0B6FD03B4FFF7F2FFF9 :1001400003BC00F070FA000070B505460C46164678 :1001500002E00FCC0FC5103E102EFAD2082E02D3AB :1001600003CC03C5083E042E07D301CC01C5361FBE :1001700003E021782970641C6D1C761EF9D270BDD5 :1001800070B501217D48C1700146897E481C32212D -:1001900003F029F979488176807E00281BD102F08E -:1001A00074FC002415E0754A117ED07D224602F0D1 -:1001B000FCF97248027EC17D234671A003F002F86B -:1001C000002500E06D1C75488542FBDB02F0D3FF83 +:1001900003F023F979488176807E00281BD102F094 +:1001A0006EFC002415E0754A117ED07D224602F0D7 +:1001B000F6F97248027EC17D234671A002F0FCFF71 +:1001C000002500E06D1C75488542FBDB02F0CDFF89 :1001D000641C202CE7DB70BD10B586B00446674870 -:1001E000401C431E7F22811E0090813800F0EDFCF0 -:1001F00000F001FD61482038C07F162832D100F0A0 -:10020000E7FD00282ED000F0E6FD5C49886000F094 -:10021000E6FD5A49C8600846807D497D574A127DEF +:1001E000401C431E7F22811E0090813800F0E7FCF6 +:1001F00000F0FBFC61482038C07F162832D100F0A7 +:10020000E1FD00282ED000F0E0FD5C49886000F0A0 +:10021000E0FD5A49C8600846807D497D574A127DF5 :10022000564B803BDB780193029203910490534834 :10023000803880780090514880384378027801797E -:1002400057A002F0BFFF4D48803802F0D1FE0120D8 -:1002500002F0CAFE002149482038C1777F2160386A -:1002600003F0B5F800F097FC00F0A4FC002143482F +:1002400057A002F0B9FF4D48803802F0CBFE0120E4 +:1002500002F0C4FE002149482038C1777F21603870 +:1002600003F0AFF800F091FC00F09EFC0021434841 :10027000017106B010BD012240490A7170479C21EE -:100280003E48803803F0A3F850A002F09BFF02F034 -:100290004AFA02F0B6FE514800F027FC504800F040 -:1002A00027FC504801F059F800F08DFD01F06CF882 -:1002B0004DA002F087FF52A002F084FF5848816BE6 -:1002C000002001F00CF904465548C06BA04203D150 -:1002D00054A002F077FF04E055A002F073FF00BFC6 -:1002E000FEE763A002F06EFF00F055FC00F0E9F9B4 -:1002F00000BF00F0CEF90028FBD065A002F062FF3D -:1003000000221146FF20E13001F0F4FE00F052FD22 +:100280003E48803803F09DF850A002F095FF02F040 +:1002900044FA02F0B0FE514800F021FC504800F052 +:1002A00021FC504801F053F800F087FD01F066F89A +:1002B0004DA002F081FF52A002F07EFF5848816BF2 +:1002C000002001F006F904465548C06BA04203D156 +:1002D00054A002F071FF04E055A002F06DFF00BFD2 +:1002E000FEE763A002F068FF00F04FFC00F0E9F9C0 +:1002F00000BF00F0CEF90028FBD065A002F05CFF43 +:1003000000221146FF20E13001F0EEFE00F04CFD2E :1003100017211A4801750A2141751221817517218B :10032000C1750B2101760F21417626E01348837DAC -:10033000427D017D5AA002F045FF00BF0F480079C1 -:100340000028FBD100F057FC0C4B9A7D597D187D9D -:1003500002F02BF900F01FFC00F02CFC01F010F86B -:1003600055494518284601F003F800210348C1709B +:10033000427D017D5AA002F03FFF00BF0F480079C7 +:100340000028FBD100F051FC0C4B9A7D597D187DA3 +:1003500002F025F900F019FC00F026FC01F00AF883 +:1003600055494518284600F0FDFF00210348C1709B :1003700000BF0248C0780028FBD0D7E7D00000209B :100380005472616E736D697474696E67206F6E204C :1003900025752025752025750A00000088130000AA @@ -74,20 +74,20 @@ :1004800075656E636965732E2E2E0D0A00000000DF :1004900043616C20636F6D706C6574650D0A0000BC :1004A000526563656976696E67206F6E20257520D9 -:1004B00025752025750A0000C409000041494248FD +:1004B00025752025750A00004C1D00004149424861 :1004C00008604248004701B5012080F3108800F021 -:1004D00021FF002080F3108801BD01B5012080F3C9 -:1004E000108800F09FFE002080F3108801BD01B548 -:1004F000012080F3108800F09FFD002080F3108819 -:1005000001BD01B5012080F3108800F046FF0020F6 +:1004D0001BFF002080F3108801BD01B5012080F3CF +:1004E000108800F099FE002080F3108801BD01B54E +:1004F000012080F3108800F099FD002080F310881F +:1005000001BD01B5012080F3108800F040FF0020FC :1005100080F3108801BD01B5012080F3108800F040 -:1005200095FE002080F3108801BD01B5012080F305 -:10053000108800F090FE002080F3108801BD01B506 -:10054000012080F3108800F08BFE002080F31088DB -:1005500001BD01B5012080F3108800F086FE002067 +:100520008FFE002080F3108801BD01B5012080F30B +:10053000108800F08AFE002080F3108801BD01B50C +:10054000012080F3108800F085FE002080F31088E1 +:1005500001BD01B5012080F3108800F080FE00206D :1005600080F3108801BD01B5012080F3108800F0F0 -:10057000FFFD002080F3108801BD01B5012080F34C -:10058000108800F0ACFD002080F3108801BD01B59B +:10057000F9FD002080F3108801BD01B5012080F352 +:10058000108800F0A6FD002080F3108801BD01B5A1 :10059000012080F3108800F099F8002080F3108883 :1005A00001BD01B5012080F3108800F090F8002013 :1005B00080F3108801BD000005480649064A074B34 @@ -97,899 +97,898 @@ :1005F000FFF7F6FF10BD10B55124240623781846E6 :10060000FFF7EEFF184610BD10B50446FFF7F3FFE5 :1006100010BD01460020704710B50446044920462D -:10062000FFF7E2FF10BD03A002F0CCFD00BFFEE724 +:10062000FFF7E2FF10BD03A002F0C6FD00BFFEE72A :10063000000000200D0A5445535420444F4E450DF0 -:100640000A00000010B52821E44802F0C0FEE4488A -:10065000E24908621721E148203001710C21417103 -:100660000F21817110BD10B50120DC498870002078 +:100640000A00000010B52821E14802F0BAFEE14896 +:10065000DF4908621721DE48203001710C21417109 +:100660000F21817110BD10B50120D949887000207B :10067000C87017200871002048710F208871002071 -:10068000C04388600B469A795979187901F08DFF3B -:1006900010BDD24840787047D04908627047CF48B3 -:1006A00020300079C006C00E7047CC482030407919 -:1006B000C006C00E7047C94820308079C006C00E01 -:1006C00070470120C002C749086070477047F0B505 -:1006D00091B000F095FE0C9000F096FE0B9000F0AB -:1006E00097FE0A9000F098FE099000F099FE0746E8 -:1006F00000F09AFE089000F09BFE079000F09CFE30 -:1007000006907F20292149060860B4480078401CE3 -:10071000B2490870292040060668B3480068109066 -:100720001098000480190F90B0480668B04800681F -:1007300010901098000480190E90AE480668AE48DC -:1007400000681090109800048519AC480668AC4801 -:1007500000681090109800048419AA480668AA48F6 +:10068000C04388600B469A795979187901F087FF41 +:1006900010BDCF4840787047CD4908627047CC48BC +:1006A00020300079C006C00E7047C948203040791C +:1006B000C006C00E7047C64820308079C006C00E04 +:1006C00070470120C002C449086070477047F0B508 +:1006D00091B000F08FFE0C9000F090FE0B9000F0B7 +:1006E00091FE0A9000F092FE099000F093FE0746FA +:1006F00000F094FE089000F095FE079000F096FE42 +:1007000006907F20292149060860B1480078401CE6 +:10071000AF490870292040060668B048006810906C +:100720001098000480190F90AD480668AD48006825 +:1007300010901098000480190E90AB480668AB48E2 +:1007400000681090109800048519A9480668A94807 +:1007500000681090109800048419A7480668A748FC :10076000006810901098000480190D900020292135 -:1007700049060860A54808609848007802287DDD91 -:10078000A3490E98884202D20C98401E0C90A149B1 +:1007700049060860A24808609548007802287DDD97 +:10078000A0490E98884202D20C98401E0C909E49B7 :100790000E98884202D90C98401C0C900C990B982A -:1007A00001F07BFE0B9800F04FFE0C9800F048FE25 -:1007B0008A48807800287CD08848C078002878D182 -:1007C0008648006AA04218D38448006A001B834907 -:1007D0008968884211D28148006A001B7F4988607D +:1007A00001F075FE0B9800F049FE0C9800F042FE37 +:1007B0008748807800287ED08548C07800287AD184 +:1007C0008348006AA04218D38148006A001B804910 +:1007D0008968884211D27E48006A001B7C49886083 :1007E000084601792030017120384179203041716B -:1007F00020388179203081711BE07848006AA0425E -:1008000017D27648006A201A74498968884210D243 -:100810007248006A201A71498860084601792030C0 +:1007F00020388179203081711BE07548006AA04261 +:1008000017D27348006A201A71498968884210D249 +:100810006F48006A201A6E498860084601792030C6 :1008200001712038417920304171203881792030A0 -:1008300081716A4883682146026A77A002F0C2FC8F -:1008400066488079401C65498871084680790F2880 -:1008500025DD0F20887108464079401C4871084604 -:1008600040791F281BDD0020487108460079401C94 -:10087000087108460079192811DD00E075E00120B3 -:10088000C87000221146FF20E13001F033FC5348CC -:1008900020308379427901796AA002F093FC4F48B5 -:1008A000C078002806D14D4B9A795979187901F012 -:1008B0007CFE06E0494B20339A795979187901F08A -:1008C00074FE6848854203D90A98401C0A900BE0E0 -:1008D0006548854203D90998401C099004E06248A4 -:1008E0004138854200D97F1C6048854203D20A986E -:1008F000401E0A900CE05C48A038854203D209985B -:10090000401E099004E058485F38854200D27F1E9F -:1009100000971F210846099B0A9A01F09BFE0A983E -:1009200000F096FD099800F097FD384600F098FD1C -:100930004F490D98884202D90698401C06904D49AF -:100940000D98884202D20698401E06900022069911 -:10095000079801F068FD079800F08AFD069800F0FE -:100960008BFD01F0F3FD01F0EBFD06990D98029768 -:1009700003940591049009990A982B4601910090DF -:100980003DA00C9A0E9902F01DFC1448007819281D -:1009900022DB12488078002803D01048C078002855 -:1009A0001AD00120C0020F498031086000200B4995 -:1009B0000870012048700F98C860084605610D98BE -:1009C0004861084684610E98C86137A002F0FAFBBE -:1009D000002029214906086011B0F0BDEC0000207C -:1009E00094D1030000E100E0000004520000105226 -:1009F000000014520000185200001C52000028523F -:100A000000002C520000305200003452FF3F000022 -:100A1000C8781E0038901E00636F756E745F4C437B -:100A20003A2025752C204C435F7461726765743AD7 -:100A30002025752C204C435F646966663A20257535 -:100A40000A000000636F617273653A2025752C20DF -:100A50006D69643A2025752C2066696E653A2025FB -:100A6000750A0000980F0300900D0300E80A0300C8 -:100A7000786F18008864180048463D25642D256469 -:100A8000202020324D3D25642D25642C25642C2505 -:100A9000642020204C433D256420202049463D25EC -:100AA000642D25640D0A0000646F6E650D0A000058 -:100AB00010B5FF219931F74802F089FCF649F74853 -:100AC0004165C91F41610F21803081824020F44976 -:100AD00008601F20890548610820086210BDED49A3 -:100AE00008607047EB4948607047EA498860704782 -:100AF000E849C8607047102081060860704710B54B -:100B0000044621460B398A00E4491431885801F023 -:100B1000FDFE10BD10B5044621460B398A00DF49A1 -:100B20005431885801F0F2FE10BD70B505460C46F0 -:100B30000B21DA480174012C02D0022C0AD104E006 -:100B4000D649087CFFF7E6FF05E0D449087CFFF7AB -:100B5000D6FF00E000BF00BF70BD70B505460C4673 -:100B600022462946CB48103002F0D2FBC94810304B -:100B70000121890788600846C4600120086070BDB3 -:100B80002820C84908600620C7490860704702202D -:100B90004107086070471820C24908600120C24917 -:100BA0000860BE487038412109064861102081065E -:100BB0000860704701204003BC4908600520C0025E -:100BC00008600420010708607047F8B507460C4626 -:100BD00015461E463120C0433070AE488030007C40 -:100BE00020702078A84205DC2278AC496F3938465D -:100BF00002F08EFBF8BD01204003AC4908600020E4 -:100C0000A84908607047F7B584B000BF00F010FC39 -:100C1000019000F011FC00909E488030007C029012 -:100C20009E488030C08A401C81B29C488030C1827E -:100C30000025029AD1009E4B069A5A43104602F0B4 -:100C4000D2FB0390092407E060009A49095A601C0E -:100C50004000984A1152641E002CF5DA039800B245 -:100C600094490880002407E060009249085E924998 -:100C7000095D48434519641C0A2CF5DD2846E9172F -:100C8000C90D09184F1285488030C18A808A814277 -:100C900016D17D20C000874207DD0098421C014626 -:100CA00000920022019801F0BEFB8448874207DAD7 -:100CB0000098421E014600920022019801F0B3FB09 -:100CC000019800F0D5FB009800F0D6FB00250598B0 -:100CD00019286DD2092407E0A00079490958601C41 -:100CE0008000774A1150641E002CF5DA744904988C -:100CF0000860002407E0A000714908586E49095DAA -:100D000048434519641C0A2CF5DD2846E917C90D2E -:100D100009184E1261488030C18A808A814247D1C9 -:100D20004120C00086421DD95C48007C0B38810000 -:100D30005A4814304058401C5849097C0B398A00E5 -:100D40005649143188505548007C0B38810053486F -:100D500054304058401C5149097C0B398A004F4996 -:100D600054318850FF20E13086421DD24B48007C30 -:100D70000B388100494814304058401E4749097CCF -:100D80000B398A004549143188504448007C0B389F -:100D90008100424854304058401E4049097C0B397C -:100DA0008A003E495431885000213C488030C1823D -:100DB00007B0F0BD40203A4908601C208905486111 -:100DC000082008627047402035498031086070472C -:100DD0003248407C704710B501F00FFB10BD394818 -:100DE000006870473848008800B27047F1B5A2B07B -:100DF000402112A802F0EBFA442101A802F0E7FA20 -:100E0000264922984861002478E0A2002349143141 -:100E1000885801F07BFD00202921490608602B48F5 -:100E20000860012700E07F1C7D20C0018742FAD3C3 -:100E30007F202921490608601A4805682448066869 -:100E400030044019A10012AA5050611C4900124AF6 -:100E5000FE328918129A514308460F49FE3102F0BA -:100E6000B8FA611C890001AA5050002C3BDDA0009B -:100E700012A90958A0001058143881422AD2A100A2 -:100E8000064814304058401CA200044914318850D0 -:100E900029E00000BC020020C3020000BC030020C7 -:100EA00000E100E000002852000040520000105213 -:100EB000093D0000A40200201800002018FCFFFFDC -:100EC000240000200000545200006452FF3F000044 -:100ED00000002C52A100BF4840582830611C8A00F5 -:100EE000BC498850641C002C08D1A100B948405866 -:100EF0002830611C8A00B7498850641C102C84DBA0 -:100F0000002400E0641C102CFCDB129823B0F0BD20 -:100F1000F0B5B3B005460E460024402121A802F0EA -:100F200056FA442110A802F052FA2022AA4908A831 -:100F3000FFF70AF92022A84920316846FFF704F993 -:100F4000A448143845654FE0A200A24940318858B2 -:100F500001F0DCFC00202921490608609F48086058 -:100F60000120319002E03198401C31907D21C9016F -:100F700031988842F7DB7F2029214906086098488C -:100F8000076898480068329032980004C019A100A0 -:100F900021AA505062006B46995A620008AB9A5AD7 -:100FA0007243104602F015FAA10010AA5050A0009A -:100FB00021A90958A0001058401F814209D2A10060 -:100FC000844840304058401CA2008249403188503B -:100FD0000AE0A1007F48403040582830611C8A0058 -:100FE0007C4940318850641C102CADDB33B0F0BD1F -:100FF00070B504462046FFF7F9FE05467A4800F032 -:10100000A8FAFF202B3000F0B3FAFF20343000F0B4 -:10101000AFFAFF20F93000F09CFAFF20FB3000F01F -:10102000A7FAFF20FD3000F0A3FA29462046FFF77B -:101030006FFFFFF7E0FD70BD70B501208007046908 -:10104000C5690121634814384174002D08D0082077 -:101050002840002803D000215E481438417400BFA6 -:1010600001208007456202202040002809D05F4807 -:101070000068002805D02122520650685B4A11689A -:10108000884704202040002809D05848406800289C -:1010900005D0212252065068544A516888470820DA -:1010A0002040002809D051488068002805D021221E -:1010B000520650684D4A9168884710202040002809 -:1010C00009D04A48C068002805D02122520650683D -:1010D000464AD168884701208007846170BD70B599 -:1010E0004348056843480668300440194249096886 -:1010F0008900424A505040480068401C3E49086000 -:101100003F480068202108433D49086008460068C0 -:101110003C4908603A480068202188433849086003 -:101120000846006837490860334800680A281ED11D -:10113000012406E0A000314A115833A002F042F821 -:10114000641C0A2CF6D3FF200130314908604000AE -:101150002F4980390860002027490860002400E0FA -:10116000641C2C488442FBD32B482C49C86070BDBA -:1011700010B5234A126860231A43214B1A601A469D -:101180001268204B1A601E4A126860239A431C4B57 -:101190001A601A4612681B4B1A60012252021C4B3D -:1011A000803B1A6052101A4B1A6052001C4B1A6096 -:1011B0000F4A10680F4A11680A0412180E4B1B6878 -:1011C0009B000E4CE2500C4A1268521C0A4B1A60EB -:1011D00010BD0000D0030020CC3C0000FF3F000009 -:1011E0000000285200002C52CB030000BC0200205B -:1011F0000000445200004852080000201401002062 -:101200001400002000000C5225580D0A00000000B8 -:1012100080E100E0102700000400FA0500ED00E086 -:1012200080E200E010B502A001F0CCFF10BD00008C -:1012300061646320696E7465727275707420747273 -:10124000696767657265640D0A00000010B509A042 -:1012500001F0B8FF10BD10B510A001F0B3FF10BD34 -:1012600010B518A001F0AEFF10BD10B51FA001F021 -:10127000A9FF10BD45787465726E616C20496E746B -:10128000657272757074204750494F3320747269CB -:101290006767657265640D0A000000004578746533 -:1012A000726E616C20496E7465727275707420473D -:1012B00050494F38207472696767657265640D0A1A -:1012C0000000000045787465726E616C20496E7490 -:1012D000657272757074204750494F392074726975 -:1012E0006767657265640D0A0000000045787465E3 -:1012F000726E616C20496E746572727570742047ED -:1013000050494F3130207472696767657265640DAA -:101310000A00000010B502A001F054FF10BD00004B -:101320007561727420727820696E7465727275705E -:1013300074207472696767657265640D0A00000045 -:101340001E480021016041608160C160481E21216A -:101350004906886007200860704718490860704790 -:101360000320212149060863802015490860704741 -:1013700000B50246FFF7F4FF21204006026100BDE0 -:10138000212040064068704700202121490608635B -:1013900080200B4980310860704710B50948046B04 -:1013A000E007C00F002806D004480068002802D0DB -:1013B0000249086880470348446310BD5404002074 -:1013C00000E100E04000004210B5CC21FE4801F0F1 -:1013D000FEFF1121FC488030C16203210163152109 -:1013E00041630F218163C163F8490164162141649F -:1013F000122181641422F6491830FEF7A5FE10BDB3 -:10140000F1488030C06A7047EF488030006B704709 -:10141000ED488030406B7047EB488030806B704700 -:10142000E9488030C06B7047E7488030006C7047F7 -:10143000E5488030406C7047E3488030806C7047EE -:10144000E1498031C8627047DF49803108637047E5 -:10145000DD49803148637047DB49803188637047DC -:10146000D9498031C8637047D749803108647047D3 -:10147000D549803148647047D349803188647047CA -:1014800010B5044698222146CF48FEF75DFE10BDF8 -:10149000D049014049004208CE4B1A40114308464A -:1014A000CD49014089008208CB4B1A4011430846C0 -:1014B000CA49014009010209C84B1A4011430846B4 -:1014C0000106FF221202024012021143020AFF2308 -:1014D0001B021A401143020E114308467047F3B530 -:1014E00000256C1E16E00098465D3046FFF7D0FFE1 -:1014F000064600270BE020467040002804DA600012 -:10150000B7494840044600E0640076007F1C072F7E -:10151000F1DD6D1C01988542E5D3E043FFF7B8FF8C -:10152000FCBDF021014009110207120E11430846CB -:10153000CC21014089103322024092001143084619 -:10154000AA21014049105522024052001143084689 -:10155000704710B541098A009B4B9A584B01C41A39 -:101560000123DB07E3409A438B00974CE25010BD08 -:1015700010B541098A00944B9A584B01C41A0123B3 -:10158000DB07E3401A438B008F4CE25010BDFFB5E0 -:1015900005460E46174600240FE028462041C007A6 -:1015A000C00F002804D02046F530FFF7E1FF03E02C -:1015B0002046F530FFF7CDFF641C032CEDDD002441 -:1015C0000FE030462041C007C00F002804D020465D -:1015D000F930FFF7CDFF03E02046F930FFF7B9FF00 -:1015E000641C032CEDDD00240FE038462041C007C9 -:1015F000C00F002804D02046FD30FFF7B9FF03E0FC -:101600002046FD30FFF7A5FF641C032CEDDD002410 -:101610000FE003982041C007C00F002804D0E01D50 -:10162000FA30FFF7A5FF03E0E01DFA30FFF791FF66 -:10163000641C032CEDDDFFBDFFB505460E461746C5 -:1016400000240FE028462041C007C00F002804D026 -:10165000E01DFE30FFF78CFF03E0E01DFE30FFF7DA -:1016600078FF641C012CEDDD002411E030462041A0 -:10167000C007C00F002805D02046FF300830FFF714 -:1016800077FF04E02046FF300830FFF762FF641C5C -:10169000012CEBDD002411E038462041C007C00FCB -:1016A000002805D02046FF300A30FFF761FF04E034 -:1016B0002046FF300A30FFF74CFF641C012CEBDDA5 -:1016C000002411E003982041C007C00F002805D076 -:1016D0002046FF300C30FFF74BFF04E02046FF3080 -:1016E0000C30FFF736FF641C012CEBDDFFBD30B57D -:1016F00089B0054620223B4901A8FEF725FD0024BC -:1017000011E02846E040C007C00F002805D0610066 -:1017100001AA505AFFF71DFF04E0610001AA505AC8 -:10172000FFF726FF641C0F2CEBD909B030BD30B594 -:1017300089B0054620222B49203101A8FEF704FD7F -:10174000002411E02846E040C007C00F002805D063 -:10175000610001AA505AFFF70BFF04E0610001AAE3 -:10176000505AFFF7F6FE641C0F2CEBD909B030BDC0 -:1017700000B5FF20F630FFF7ECFEFF20F730FFF753 -:10178000E8FEFF20F830FFF7E4FEFF20F930FFF716 -:10179000E0FEFF20FA30FFF7EBFEFF20FB30FFF703 -:1017A000D8FEFF20FC30FFF7E3FEFF20FD30FFF7FF -:1017B000D0FEFF20FE30FFF7DBFEFF20FF30FFF7FB -:1017C000D7FE094812E0000064040020006A1800F7 -:1017D0000C3D000055555555333333330F0F0F0F64 -:1017E000B71DC104203D0000FF010000FFF7C0FE4F -:1017F00001204002FFF7BCFEF848FFF7AAFEF748B9 -:10180000401CFFF7A6FEF548801CFFF7B1FE8120C3 -:101810008000FFF7ADFE0020F1490860F148FFF7B6 -:10182000A7FE00BDF3B581B00F4600200090019ED9 -:10183000B800019E82193146EBA001F0C3FCF6A06E -:1018400001F0C0FC00240CE0002507E0A0003058A7 -:101850000121A9408843A10070506D1C202DF5DBAB -:10186000641CBC42F0D300241DE0002518E0A00059 -:1018700030580121A9400840002809D0A000335861 -:101880002A462146EAA001F09DFC0098401C0090E9 -:10189000A00030580121A9400843A10070506D1CE0 -:1018A000202DE4DB641CBC42DFD300241FE00025B4 -:1018B0001AE0A00030580121A94008400121A940A8 -:1018C000884209D0A00033582A462146E4A001F0FE -:1018D00079FC0098401C0090A00030580121A940DC -:1018E0008843A10070506D1C202DE2DB641CBC42BB -:1018F000DDD37C1E1DE01F2518E0A000305801211B -:10190000A9400840002809D0A00033582A462146A3 -:10191000DFA001F057FC0098401C0090A000305858 -:101920000121A9400843A10070506D1E002DE4DA8A -:10193000641E002CDFDA7C1E1FE01F251AE0A000C9 -:1019400030580121A94008400121A940884209D00E -:10195000A00033582A462146D9A001F033FC009854 -:10196000401C0090A00030580121A9408843A100EC -:1019700070506D1E002DE2DA641E002CDDDA0024AA -:1019800016E0002511E0A00030580121A9400840D0 -:10199000002809D0A00033582A462146D4A001F0DF -:1019A00011FC0098401C00906D1C202DEBDB641C8A -:1019B000BC42E6D3DAA0009901F004FC0098FEBD19 -:1019C00030B50546002411E028462041C007C00F6D -:1019D000002805D02046FF30ED30FFF7C9FD04E0B8 -:1019E0002046FF30ED30FFF7B4FD641C062CEBD928 -:1019F00030BD30B50546002411E028462041C0071F -:101A0000C00F002805D077497539081BFFF7B0FDD6 -:101A100004E074497539081BFFF79BFD641C042C16 -:101A2000EBD9052411E028462041C007C00F00284B -:101A300005D06C497539081BFFF78BFD04E0694937 -:101A40007539081BFFF794FD641C062CEBD930BDDB -:101A500030B50546002411E028462041C007C00FDC -:101A6000002805D05F49C91C6018FFF781FD04E01C -:101A70005C49C91C6018FFF76CFD641C042CEBD991 -:101A8000052411E028462041C007C00F002805D0DA -:101A90005449C91C6018FFF75CFD04E05149C91C9A -:101AA0006018FFF765FD641C062CEBD930BD30B51E -:101AB0000546002411E028462041C007C00F002839 -:101AC00005D048490F31081BFFF752FD04E0454996 -:101AD0000F31081BFFF73DFD641C042CEBD9A80651 -:101AE000C00F002804D0E7208000FFF732FD03E09C -:101AF000E7208000FFF73CFD6806C00F002804D0F7 -:101B000036482C30FFF725FD03E034482C30FFF732 -:101B10002FFD30BD30B5054600240FE02846E040DB -:101B2000C007C00F002804D020466B30FFF720FD0F -:101B300003E020466B30FFF70CFD641C0F2CEDDD3D -:101B400030BD30B5054600240FE02846E040C00710 -:101B5000C00F002804D020467C30FFF709FD03E0C9 -:101B600020467C30FFF7F5FC641C072CEDDD30BD12 -:101B700030B5054600240FE02846E040C007C00FFE -:101B8000002804D02046D130FFF7F2FC03E02046C5 -:101B9000D130FFF7DEFC641C0F2CEDDD30BD70B5DD -:101BA00005460E4600240AE02046FF30D930FFF7F4 -:101BB000D0FC2046FF301730FFF7CBFC641C0D2C07 -:101BC000F2DB002405E0FF21E531081BFFF7D0FC24 -:101BD000641CAC42F7D90024BAE000000102000006 -:101BE00000002852920300000D0A0D0A537461721E -:101BF00074696E67205352414D207465737420667A -:101C0000726F6D203078255820746F2030782558F9 -:101C10002E2E2E0D0A000000546869732074616B2B -:101C2000657320617768696C652E2E2E0D0A0000A1 -:101C30000D0A4552524F5220312040206164647297 -:101C400065737320255820626974202564202D2D2A -:101C50002056616C756520697320255800000000CE -:101C60000D0A4552524F5220322040206164647266 -:101C700065737320255820626974202564202D2DFA -:101C80002056616C7565206973202558000000009E -:101C90000D0A4552524F5220332040206164647235 -:101CA00065737320255820626974202564202D2DCA -:101CB0002056616C7565206973202558000000006E -:101CC0000D0A4552524F5220342040206164647204 -:101CD00065737320255820626974202564202D2D9A -:101CE0002056616C7565206973202558000000003E -:101CF0000D0A4552524F52203520402061646472D3 -:101D000065737320255820626974202564202D2D69 -:101D10002056616C7565206973202558000000000D -:101D20000D0A5352414D205465737420436F6D70FA -:101D30006C657465202D2D202564204572726F72AC -:101D4000730D0A002046FF301730FFF702FC641CB9 -:101D5000B442F7D970BD70B505460E46002411E0B7 -:101D60003046E040C007C00F002805D02046FF30B5 -:101D7000C530FFF7FDFB04E02046FF30C530FFF71C -:101D8000E8FB641C042CEBDD002411E02846E04055 -:101D9000C007C00F002805D02046FF30CA30FFF72B -:101DA000E7FB04E02046FF30CA30FFF7D2FB641C9B -:101DB000042CEBDD70BD70B505460E46002411E025 -:101DC0003046E040C007C00F002805D0FF21593140 -:101DD000081BFFF7CDFB04E0FF215931081BFFF77B -:101DE000B8FB641C042CEBDD002411E02846E04025 -:101DF000C007C00F002805D0FF215431081BFFF792 -:101E0000B7FB04E0FF215431081BFFF7A2FB641C61 -:101E1000042CEBDD70BD70B505460E46002411E0C4 -:101E20002846E040C007C00F002805D02046FF30FC -:101E3000E630FFF79DFB04E02046FF30E630FFF779 -:101E400088FB641C042CEBDD002411E03046E040EC -:101E5000C007C00F002805D0FF211631081BFFF76F -:101E600087FB04E0FF211631081BFFF772FB641C9F -:101E7000052CEBDD70BDF8B5FA4C650DFA48006A2B -:101E80002040F94908620846C06B2840C8630846EC -:101E9000006AF649A1430843F3490862F4484862DE -:101EA000F4488862F448C862F4480863F448486318 -:101EB000F44888630846C06BF349A9430843EA49DC -:101EC000C863FF20A930FFF744FBFF20AA30FFF7CB -:101ED0004FFB3F210846FFF79EFF07210846FFF70B -:101EE0005EFE00210846FFF736FF00210846FFF797 -:101EF00062FF0020FFF72DFB0120FFF72AFB602087 -:101F0000FFF727FBFF201030FFF723FBFF20EC300B -:101F1000FFF71FFB6420FFF71CFB6520FFF719FB91 -:101F20006620FFF716FB6120FFF722FB0020D74950 -:101F30000860D748D74908606720FFF719FB0B26D0 -:101F40000227F002F9010843D349086005200090F8 -:101F5000D24900980860FF200E30FFF7FAFAFF2000 -:101F60000F30FFF7F6FA0020FFF72AFDF020FFF709 -:101F7000FFFA5D20C000FFF7FBFAC948FFF7F8FA47 -:101F8000C748401CFFF7F4FA0120C6490860F8BDB5 -:101F900070B5C54C650DB448006A2040B24908626E -:101FA0000846C06B2840C8630846006ABF49A14381 -:101FB0000843AD490862AE484862AE484030886286 -:101FC000BB48C862BB480863BB484863BB488863DA -:101FD0000846C06BBA49A9430843A349C863002017 -:101FE000FFF7C6FA0120FFF7C3FA0D20FFF792FDB5 -:101FF0002620FFF7A6FD5020FFF7BAFDEE20FFF7E1 -:10200000B7FAEF20FFF7B4FAFF200E30FFF7A1FA7E -:10201000FF200F30FFF79DFA8420FFF7A9FA05266D -:102020009E4806600A210020FFF795FE0020FFF77A -:10203000C7FCF020FFF79CFA01204003A14908608B -:10204000F002086070BD10B50A467F238343590132 -:10205000854B9B6F7F246401A343834CA367234676 -:102060009B6F0B43A36710BD7F22824351037E4ABF -:10207000926F7F235B039A437B4B9A671A46926F5A -:102080000A439A67704710B5F02303401909020705 -:10209000754B9B6F1B091B01734CA36723469B6FFA -:1020A0000B43A3672346DB6F1B011B09E367234632 -:1020B000DB6F1343E36710BD00B57D20C000FFF761 -:1020C00057FA8148FFF754FA7F48401CFFF750FA4F -:1020D0007D48801CFFF74CFA80207C4908607F20F7 -:1020E000FFF7D1FF7F20FFF7BFFF00213F20FFF761 -:1020F000AAFF00BD70B50346002400200325AD02F1 -:102100001D402C010F252D031D402D0B28433F257D -:102110002D011D40284395022843CD0228431D0769 -:102120002D0C2843E5436A4E3560C543694E356042 -:1021300070BD002824D14C49C96F042211434A4A7A -:10214000D1671146C96F02229143474AD1671146B0 -:10215000803109680122D2071143434A803211605D -:102160004149C96F49084900803AD1671146803119 -:1021700009680722120711433B4A80321160F5E0DB -:10218000012822D13849C96F02221143364AD1674A -:102190001146C96F04229143334AD16711468031F9 -:1021A0000968C2071143304A803211602E49C96F55 -:1021B0008143803AD16711468031096807221207AE -:1021C0001143294A80321160D0E0022823D12649E8 -:1021D000C96F04221143244AD1671146C96F0222F4 -:1021E0009143214AD1671146803109684A0052085B -:1021F0001D4980310A608039C96F012211431A4A92 -:10220000D167114680310968072212071143164A27 -:1022100080321160AAE003285ED11349C96F0422FD -:102220001143114AD1671146C96F022291430E4AE8 -:10223000D167114680310968C20711430A4A8032CA -:1022400011600949C96F49084900803AD1671146B0 -:1022500080310968012292079143034A803211605C -:1022600084E000000000FCFF64040020E0FF504018 -:10227000882142003100048881403B1102817E02A6 -:102280004448ED0300000160032EE0FF00003852D7 -:102290000FA0000000003C5200000C52000024522D -:1022A000E9020000000040520000FEFFF0FF0000C5 -:1022B00081400C100281180044C87F0101000170A8 -:1022C0000008E0FF00001052E903000000002C525B -:1022D0000000145200001852042822D1FE49C96F90 -:1022E00004221143FC4AD1671146C96F022291436F -:1022F000F94AD16711468031096842071143F64A0D -:1023000080321160F449C96F49084900803AD167A9 -:10231000114680310968C2069143EF4A803211604C -:1023200024E0052822D1EC49C96F04221143EA4A6E -:10233000D1671146C96F02229143E74AD16711461E -:1023400080310968C2071143E34A80321160E249D3 -:10235000C96F49084900803AD16711468031096840 -:10236000032252079143DC4A80321160704710B556 -:102370000A467F2383435903D74BDB6F7F246403D3 -:10238000A343D54CE3672346DB6F0B43E36710BDE4 -:1023900010B5044600217F20FFF7E9FF0420FFF776 -:1023A000C8FE01221146FF20E130FFF7A3FEFD2009 -:1023B0008000FFF7DDF810BD70B503460C467F25A1 -:1023C000292676063560C54D2868C54D29680D0457 -:1023D0002D181D60C34D2868C34D29680D042D18A4 -:1023E0002560C24D2868C24D29680D042D1815605E -:1023F00000253560BF4D356070BDBF4800680121C4 -:1024000089020840002804D0BB4800888005800D60 -:1024100070470020FCE7B94800787047B84800785A -:102420000007000F7047F0B505460E46174600241A -:1024300011E028462041C007C00F002805D0FF2129 -:10244000B031081BFFF794F804E0FF21B031081BFE -:10245000FFF77FF8641C042CEBD9002411E0304610 -:102460002041C007C00F002805D0FF21B631081B4E -:10247000FFF77EF804E0FF21B631081BFFF769F88B -:10248000641C042CEBD9012F03D19E48FFF770F890 -:1024900002E09C48FFF75DF8F0BD70B505460E46BA -:1024A000002411E03046E040C007C00F002805D0EE -:1024B000944990316018FFF75BF804E0914990313E -:1024C0006018FFF746F8641C032CEBDDF006C00F24 -:1024D000002804D08B489430FFF73BF803E089488C -:1024E0009430FFF745F8002411E02846E040C0078B -:1024F000C00F002805D0D72189006018FFF738F8F1 -:1025000004E0D72189006018FFF723F8641C012C30 -:10251000EBDD022411E02846E040C007C00F002890 -:1025200005D0784993316018FFF713F804E0754936 -:1025300093316018FFF71CF8641C042CEBDD70BDB0 -:1025400028207149086020200860704710B50021DC -:102550000022252126E0002221E08B005E4CE3587A -:10256000012494402340002B01D1212000E02020B1 -:10257000654B186002240346A3431846624B18605B -:1025800004231843604B186004240346A3431846F1 -:102590005D4B1860022318435B4B1860521C202AC5 -:1025A000DBDB491E0029D6DA10BDF7B584B005463D -:1025B000E806C00E03900598C006C00E029006986B -:1025C000C006C00E01900398FEF7ABFF0090029882 -:1025D000FEF7A7FF06460198FEF7A3FF0446002377 -:1025E000002700BF00BF00980090782020404002E4 -:1025F0000343F00003430098C008034380202040B9 -:10260000C0090743364803604048076007B0F0BD83 -:1026100001460020CA07120E104302220A4052014E -:10262000104304220A40D200104308220A405200FC -:10263000104310220A405208104320220A40D208B8 -:10264000104340220A405209104380220A40D20916 -:1026500010437047F0B585B006460C4615461F4638 -:102660001D4880308661183044608560C7601A4913 -:1026700098310A980861084618388068244908404B -:1026800003463046FFF7C4FF0006C00E0490204604 -:10269000FFF7BEFF0006C00E03902846FFF7B8FF05 -:1026A0000006C00E02903846FFF7B2FF0006C00ECB -:1026B00001900A98FFF7ACFF0006C00E0090049846 -:1026C0008006034303984005034302980004034334 -:1026D0000198C00203431DE064040020000018526A -:1026E00000001C520000285200002C520000305202 -:1026F00000003452FF3F00000000405200005452DE -:1027000000003C52D6020000000058520000205247 -:102710001F00008000988001034320200343BA4833 -:10272000836005B0F0BD38B5FEF74EFEFDF78AFFB9 -:10273000FEF7BEF9FEF704FE00F084F9FFF718F883 -:1027400000231A4619461846FEF776FF0023062294 -:1027500011461046FEF71BFF0020FEF7E8FFAB48CE -:10276000FEF7C5FFAA48FEF703FFA74AD16A106B20 -:10277000FFF793FEA648001DFEF7FAFEA548FEF7F8 -:10278000F7FE3120FEF7F4FE3020FEF7F1FE2F2099 -:10279000FEF7DFFE2E20FEF7EBFE2D20FEF7D9FE22 -:1027A0002C20FEF7E5FE2B20FEF7E2FE2A20FEF7A6 -:1027B000DFFE97480930FEF7DBFE96484630FEF70D -:1027C000D7FE2920FEF7D4FE022403E02046FEF7C0 -:1027D000CFFE641C092CF9DBFFF74DFBFFF76CFC07 -:1027E000894A916C506C0022FFF71DFE8648C06B31 -:1027F00000908548836B1F21426B0846FFF72AFF34 -:1028000083482138FEF7B4FE0F220C211720FFF772 -:10281000CCFE7D200001FFF7BBFDFFF797FEFFF721 -:102820008FFE38BDF8B500202921490608607A4896 -:102830000860012700E07F1C78488742FBDB7F208F -:102840002921490608607648046876480568280406 -:1028500006190846046874480568280400190090A1 -:102860007003009900F0B5FDF8BD18B56648183042 -:102870000069654C18340090E368A2686168183CF0 -:10288000A069FFF7E7FE18BD70B503460C467F252B -:10289000292676063560624D2868624D29680D0448 -:1028A0002D181D60614D2868614D29680D042D1893 -:1028B0002560354628685C4D29680D042D18156083 -:1028C00000253560544D356070BD10B500210BE01A -:1028D00003689B0F0468E40E6340DA07D20F0368B5 -:1028E0005B0013430360491C0829F1DB10BD10B5E0 -:1028F000002408E0A000444980390A5821464DA030 -:1029000000F060FC641C262CF4D310BDF0B585B03B -:10291000054600260027172003908C2002902846A9 -:10292000029900F060FD1330C0B200902846029971 -:1029300000F059FD0D462846039900F054FD410072 -:102940004018C019C0B201902846039900F04BFD11 -:10295000022800DB00BF2846039900F044FD8819D7 -:10296000C4B20F2C00DD641C224601990098FFF7C9 -:102970001CFE05B0F0BD24488038806F0121090598 -:10298000884321498039886770471F488038806FA5 -:102990000121090508431C498039886770471A4896 -:1029A0008038006C0921C9068843174980390864BA -:1029B000704715488038006C0921C9060843124940 -:1029C000803908647047104800680121C904084331 -:1029D0000D49086070470C4800680121C90488430C -:1029E0000949086070470848006803214904884382 -:1029F00005490860704704480068032149040843FA -:102A00000149086070470000E4040020FFFF000057 -:102A10007B04000029020000FF3F000050C30000BB -:102A20000000185200001C52000004520000205206 -:102A3000000024524153435B25755D203D203078D2 -:102A400025780A0010B57021FA4800F0C0FC00217A -:102A5000F8484030017002214170722181703221AA -:102A6000C17080210171C62141712521817101212F -:102A7000C1715321017343210C3041705521817084 -:102A80004D21C1703321017110BDF0B597B0002701 -:102A90000024AA20169015901490E64840308079C2 -:102AA0008006800E403008904021E24800F08FFC04 -:102AB0002C2109A800F08BFC552239467F1CDD48EB -:102AC00042546B2239467F1C42547D2239467F1C7A -:102AD0004254912239467F1C4254712239467F1C50 -:102AE000425440222146641C09A84254A422214693 -:102AF000641C425405250AE0CE494031485DFEF78A -:102B000010FD2146621CD4B209AA50546D1E002D3E -:102B1000F2DAC8484030C07900281AD06022214635 -:102B2000601CC4B209A8425410222046611CCCB2D9 -:102B300009A90A5400250AE0BE494C31485DFEF758 -:102B4000F0FC2146621CD4B209AA50546D1C052D1C -:102B5000F2DBB8484030007A002820D0C02221465D -:102B6000601CC4B209A8425403222046611CCCB2A6 -:102B700009A90A54AF494031498A0812FEF7D1FC2D -:102B80002146621CD4B209AA5054AA494031887C1B -:102B9000FEF7C7FC2146621CD4B209AA5054A548CE -:102BA0004030407A00285FD090222046611CCCB291 -:102BB00009A90A5443222046611CCCB209A90A542F -:102BC0009C49496D080EFEF7ACFC2146621CD4B24C -:102BD00009AA50549749496D0902080EFEF7A1FC55 -:102BE0002146621CD4B209AA50549249496D090485 -:102BF000080EFEF796FC2146621CD4B209AA505476 -:102C00008C49496DC8B2FEF78CFC2146621CD4B2D7 -:102C100009AA50548749896D080EFEF782FC2146A7 -:102C2000621CD4B209AA50548249896D0902080E67 -:102C3000FEF777FC2146621CD4B209AA50547D49A4 -:102C4000896D0904080EFEF76CFC2146621CD4B2A3 -:102C500009AA50547749896DC8B2FEF762FC214633 -:102C6000621CD4B209AA505472484030807A0028BD -:102C70003BD07048416E006E6F4A704B03910290DA -:102C800000F0D4FD0791069000206D49079B069A3D -:102C900000F032FE00226B4B0191009000F0C6FD67 -:102CA0000391029000F0F2FD0590C0222146601CC5 -:102CB000C4B209A8425483222046611CCCB209A99F -:102CC0000A5405990904080EFEF72BFC2146621CE4 -:102CD000D4B209AA50540599C8B2FEF722FC214685 -:102CE000621CD4B209AA505400BF52484030C07A86 -:102CF00000281AD0A0222046611CCCB209A90A548F -:102D000083222046611CCCB209A90A5400250AE09E -:102D100048496831485DFEF704FC2146621CD4B284 -:102D200009AA50546D1C042DF2DB002431E0072564 -:102D30002BE009A8005D0121A94008402841149911 -:102D4000C907C90F06464E40149840101599C90787 -:102D5000090E08431490159840101699C9010843AC -:102D6000B101484071014840C0B21590169840101A -:102D7000F1010843B101484031014840F1004840A9 -:102D800071004840C0B216906D1E002DD1DA601C53 -:102D9000C4B2272CCBDB1498FEF7C3FB1490159814 -:102DA000FEF7BFFB15901698FEF7BBFB1690214669 -:102DB000621CD4B209AA149850542146621CD4B2A1 -:102DC00009AA159850542146621CD4B209AA169833 -:102DD0005054002423E007251DE009A8005D0121CF -:102DE000A940884309A9095D0122AA401140089A17 -:102DF000D207D20FAA405140084309A908550898A4 -:102E000040100899C907490E08430899C907490F96 -:102E1000484008906D1E002DDFDA601CC4B22A2CD9 -:102E2000D9DB0449C8192A2209A900F071FA17B0A0 -:102E3000F0BD0000300500206666666666127140CF -:102E4000000059400000F03F10B500244021D64852 -:102E500000F0BDFA1D222146641CD348425455227D -:102E60002146641C4254AD222146641C4254F62281 -:102E70002146641C425445222146641C4254C72208 -:102E80002146641C4254C5222146641C42540E2231 -:102E90002046611CCCB2C4490A5426222046611C3B -:102EA000CCB2C1490A5413222046611CCCB2BE499F -:102EB0000A54C2222046611CCCB2BB490A54AC223F -:102EC0002046611CCCB2B8490A5498222046611CA5 -:102ED000CCB2B5490A5437222046611CCCB2B24963 -:102EE0000A54B8222046611CCCB2AF490A543022A1 -:102EF0002046611CCCB2AC490A54A1222046611C78 -:102F0000CCB2A9490A54C9222046611CCCB2A649B8 -:102F10000A54E4222046611CCCB2A3490A549322ED -:102F20002046611CCCB2A0490A5475222046611C7F -:102F3000CCB29D490A54B7222046611CCCB29A49B2 -:102F40000A5441222046611CCCB297490A546C2293 -:102F50002046611CCCB294490A54D1222046611CFF -:102F6000CCB291490A542D222046611CCCB28E4924 -:102F70000A54B8222046611CCCB28B490A5410BDB9 -:102F800010B50446062221468748403000F0C0F9BB -:102F900010BD854940318871704783494031C871FF -:102FA000704710B50446052221467F484C3000F09A -:102FB000AFF910BD7C494031087270477A49403101 -:102FC0004882704778494031487270477649486571 -:102FD00070477549886570477349403188727047FA -:102FE000714A5166106670476F494031C872704728 -:102FF00010B50446042221466B48683000F088F979 -:1030000010BD10B5F9208000FEF7B2FA6748FEF750 -:10301000A0FA6648401CFEF79CFA6448801CFEF744 -:1030200098FA7D20C000FEF794FA6048001DFEF774 -:1030300090FA5E48401DFEF78CFA5C48801DFEF752 -:1030400088FA5A481030FEF793FA58482C30FEF7A9 -:103050008FFA56482D30FEF78BFAF1208000FEF7EC -:1030600078FA52485430FEF774FA0020504908604C -:103070007F20FFF708F87F20FEF7F6FF00213F20B2 -:10308000FEF7E1FFFFF762FAFFF75AFA10BD10B53D -:10309000FEF77EFFFF20A930FEF75BFAFF20AA3083 -:1030A000FEF766FAFF20A730FEF762FA3F210846D6 -:1030B000FEF7B1FE07210846FEF771FD4C20FEF732 -:1030C00040FD7B20FEF745FA5D20C000FEF750FA78 -:1030D0003648FC38FEF74CFA3448FB38FEF748FA1D -:1030E000012034490860FFF731FAFFF729FA10BDD3 -:1030F00000201021084340084000042108432021FB -:1031000008432B490860704770B50020012528430B -:1031100004260546B543284620260546B5432846DD -:10312000234D2860002123E01F4D6C5C07221CE02A -:1031300025461541EB07DB0F002B05D1022605467E -:10314000B54328461A4D2860012B03D10225284398 -:10315000174D286008252843154D28600826054688 -:10316000B5432846124D2860521E002AE0DA491C59 -:103170004029D9DB70BD10B5FFF7C6FFFDF700FD94 -:1031800068200D490860002400E0641C322CFCDB40 -:10319000FFF7AEFF002400E0641C08488442FBDB1C -:1031A000FDF729FD10BD000030050020E5030000FB -:1031B00000002C520000405200002852204E000017 -:1031C000704700000FB4054910B503AA029800F03B -:1031D00011FD10BC08BC04B018470000000000201E -:1031E000F8B50E460446002020622046E168884774 -:1031F000002829D0252802D06268A16820E0E16873 -:1032000020460027884705001ED028464138192847 -:1032100002D80127FF022035324620462760294682 -:10322000FCF76CFF002808D0012804D0F61DF60832 -:10323000F6000836D9E7361DD7E762682846A16848 -:103240009047206A401CCFE7206AF8BDF7B50025FB -:1032500075291068009914A611D0C046C0460028F0 -:1032600002DA404211A608E0009909688A0701D5F0 -:103270000FA602E0490704D50EA6012501E0C046CD -:10328000C046009F0024243704E000F0C7FC303122 -:103290003955641C0028F8D12B4632462146009847 -:1032A00000F04FFCFEBD0000000000002D000000FB -:1032B0002B0000002000000070B504460D4621469A -:1032C0001068C046C0462188090502D50F4A7A44D5 -:1032D00002E00E4A7A440E3223460021243305E0F0 -:1032E00006070009360F965D5E54491C0028F7D189 -:1032F00020780023000705D5702D03D0002901D0C8 -:1033000002231132204600F01CFC70BD8E0A000022 -:10331000F8B5042A2CD3830712D00B78491C03700C -:10332000401C521E83070BD00B78491C0370401CB5 -:10333000521E830704D00B78491C0370401C521E98 -:103340008B079B0F05D0C91ADF002023DE1B08C99D -:103350000AE0FCF7F9FEF8BD1D4608C9FD401C4611 -:10336000B4402C4310C0121F042AF5D2F308C91A26 -:10337000521EF0D40B78491C0370401C521EEAD434 -:103380000B78491C0370401C012AE4D409780170B1 -:10339000F8BD01E004C0091F0429FBD28B0701D549 -:1033A0000280801CC90700D00270704700290BD032 -:1033B000C30702D00270401C491E022904D38307B0 -:1033C00002D50280801C891EE3E70022EEE700227E -:1033D000DFE7002203098B422CD3030A8B4211D36F -:1033E00000239C464EE003460B433CD40022430896 -:1033F0008B4231D303098B421CD3030A8B4201D386 -:1034000094463FE0C3098B4201D3CB01C01A52411D -:1034100083098B4201D38B01C01A524143098B426D -:1034200001D34B01C01A524103098B4201D30B0156 -:10343000C01A5241C3088B4201D3CB00C01A52417B -:1034400083088B4201D38B00C01A524143088B4240 -:1034500001D34B00C01A5241411A00D201465241D9 -:10346000104670475DE0CA0F00D04942031000D3F8 -:103470004042534000229C4603098B422DD3030A4D -:103480008B4212D3FC22890112BA030A8B420CD35D -:10349000890192118B4208D3890192118B4204D386 -:1034A00089013AD0921100E08909C3098B4201D306 -:1034B000CB01C01A524183098B4201D38B01C01A40 -:1034C000524143098B4201D34B01C01A52410309B7 -:1034D0008B4201D30B01C01A5241C3088B4201D366 -:1034E000CB00C01A524183088B4201D38B00C01A13 -:1034F0005241D9D243088B4201D34B00C01A5241EA -:10350000411A00D20146634652415B10104601D376 -:103510004042002B00D54942704763465B1000D300 -:10352000404201B50020C046C04602BD704770470A -:1035300070470000F0B50C46871A9C410D46861A6C -:103540009D4103D2C01BA141D21963410D0D1F0D36 -:10355000C94EEC1BAE435CD07F057F0D0026002FCB -:1035600051D02D05AC46A943DD020123ED0A1B0510 -:103570001D4320231B1B24D41746E74038187141F4 -:103580002F46E740CC199D402818314661410C0D6B -:1035900027D161449A4013D50023401C5941520061 -:1035A0000ED14008400001224B005205D34207D300 -:1035B00005204007C14201D5B04900E0B04930467E -:1035C000F0BD6B00002A00D001229A181F23203C76 -:1035D0001B1B01D5002302E0E540281871410C0DAA -:1035E000D7D0012424050919C407CD07400849088C -:1035F000E40F28436144002CD5D00024401C6141D5 -:103600009A40D0D1CDE76A05520DD9D1C90FC9076B -:10361000D5E79C4D4E00002801D0012400E0002495 -:1036200034195F00002A01D0012600E00026BE19EF -:10363000954FAC420CD8AE420AD8B44206D0012510 -:103640006D05EC42BCD010461946F0BD9942FCD045 -:1036500000203946F0BDF0B51FB40C460F46811A64 -:103660009F412546861A9D4106D20125ED076F40F0 -:10367000401ABC4152187B41210D1E0D8D1BAC46DA -:103680007D4D8D437ED075056D0D7CD00D05AE460C -:10369000AC431B031B0B794D52429D4120236646D0 -:1036A0009B1B14D31746F74038180026009074412E -:1036B00060462F460741E41900989D40281866414E -:1036C00016D4714671189A4025D5012320E093182D -:1036D0002A466A415200002B00D0521C1E23203E75 -:1036E0009B1B002B61DD3541EE1728186641E8D59C -:1036F000001876415B1C9A4000D3401C4B05F31820 -:103700001524E34010D3002B52D071467118D30F0B -:10371000C01802D3491C05B0F0BD0123DB079A4253 -:10372000F9D140084000F6E701225205B21801D154 -:10373000002853D00123CC0ADB029943891E002ABA -:1037400008D1020C03D0020C0004103902E002463A -:10375000002020390023550B05D112020823550BF8 -:1037600001D152010D23550C01D112011B1DD50CA5 -:1037700001D192009B1C150D01D152005B1C20252C -:10378000EE1A01E02CE022E00546F5401543984092 -:10379000CA1AE10769181305C918002ABBDA032001 -:1037A00040070818C10FC9070FE071466118B2E75A -:1037B000F10740080843711071444A000CD00123FE -:1037C0005B059A42A7D2C90FC9070020A3E74905A4 -:1037D000490D26D1002001E00028F4D100219AE70C -:1037E000284D6600002801D0012100E00021711859 -:1037F0005F00002A01D0012600E00026BE19224FFA -:10380000A94210D8AE420ED8B14208D001256D05AC -:10381000E94206D01946A802414010467BE79C4287 -:1038200001D0214677E70020394674E710B50C46F1 -:103830005C4005D50124E4076340FFF70CFF10BD91 -:10384000FFF778FE10BD30B40C465C4004D501246F -:10385000E407634030BC6DE630BCFCE670B5012483 -:10386000E40761400D465D4002D4FFF763FE70BD82 -:103870006340FFF7F0FE70BDFF0700000000F0FF9F -:103880000000F07F0000E0FF0000F87F30B5034645 -:10389000CA02400D1043164D164C0A1502D02043A3 -:1038A000002A06DBAA1A002A12DDD040FF2A0BDC10 -:1038B00030BD5205520D01D140004008AA1A07D46C -:1038C000D0404042FF2A01DD002030BD0028FCDD51 -:1038D0004A00002B01D0012000E000201018012236 -:1038E0005205D042F0D8C817C043604030BD000038 -:1038F0001E04000000000080F0B58B4C0F09254627 -:1039000089B0BD437BD01D092646AE43FAD00E4692 -:103910005E402740F60F3E43254071D024012142EE -:10392000FBD0FF24AD19A4042D1B039501252D0503 -:10393000DB02DB0AC9022B43C90A29431E01090124 -:10394000040F130F050121431701880B82039143D4 -:103950002D098C46A90B1E438A039543B30B9A038A -:1039600096433F09BA0B9403A74302962E467E4323 -:103970000497B6464E19D7190C460196544305973D -:103980007E43371B7646BF1B3601B646BE0B361943 -:1039900000967646BC043719009C01D3641C009441 -:1039A0006400002F01D001263443029E049F75431A -:1039B00066467E430496760034196E0034190094EE -:1039C000029C019E1C196643751BAE460694654613 -:1039D0004519059C05956C43594375460891691A2C -:1039E0000191049E01465143A41B0491611A009C5D -:1039F0000791E10605D061090122114302E072E05E -:103A00006EE06109089D00272C0A2D066918049DA7 -:103A10007C412A0A2D066918019D6241AC0DAD0258 -:103A20006D185441079A910D920255196141029AFD -:103A3000644658435443069B059A5A43121A131B73 -:103A40009A0E9B015B187A41010B0005C318514186 -:103A5000220A200644195A419A4200D2491C0120E8 -:103A60004002814203D315230226F64302E01423C9 -:103A70000326F6432020C51AA9401746AF40DA4076 -:103A80000A4320460399D8400914731819055118A0 -:103A9000039A3843D2075140AC4009D001229440E8 -:103AA00006D30022401C5141002C01D140084000A7 -:103AB0001E4A934212D3012203989206904207DBDA -:103AC0000520400709181A480143C012414004E08C -:103AD000032040070818C10FC907002009B0F0BD36 -:103AE0000020F107FAE705180C464C4111486D42D9 -:103AF000A04115D394181A465A410E486442904189 -:103B00000ED301204A004005824209D35A00824266 -:103B100006D35940C90F084AC90700201143DDE701 -:103B200000200649DAE700000000FF07FE0700005A -:103B3000FFFFFF7F0000E0FF0000F07F0000F87F44 -:103B40007047FFB504460D4681B0243000902168CF -:103B5000880604D51022E0699143216000E001202D -:103B6000A84201DD471B00E000270498A1697A19EB -:103B70001018081AA0612078C00602D42046C0465A -:103B8000C046002608E003986268A168805D9047FF -:103B9000206A401C761C206204988642F3DB207861 -:103BA000C0060AD52046C046C04606E06268A16845 -:103BB00030209047206A401C206238467F1E002833 -:103BC000F4DC07E000986268A168405D9047206AD5 -:103BD000401C206228466D1E0028F3DC2046C046AB -:103BE000C0462078000602D5022005B0F0BD0120B5 -:103BF000FBE70000084B70B50D467B4400F027F84A -:103C000004462846FCF705FD002802D00020C043EA -:103C100070BD204670BD0000EBC9FFFF0146800863 -:103C2000081A02091018020A1018020C1018C0080D -:103C3000820012185200891A01E0401C0A390A2930 -:103C4000FBD2704701694A1C02610878704700B5D1 -:103C50008FB00291002105910549019379440391A8 -:103C6000114604906846FFF7BBFA0FB000BD000094 -:103C7000E5FFFFFF754600F025F8AE4605006946F2 -:103C80005346C008C000854618B020B5FCF794FC28 -:103C900060BC00274908B6460026C0C5C0C5C0C5DF -:103CA000C0C5C0C5C0C5C0C5C0C5403D49008D46E2 -:103CB000704710B50446C046C0462046FCF73DFAA2 -:103CC00010BD000000487047A005002022038803B3 -:103CD000A1030D01B503B20171014202C701CA037C -:103CE0008B0029014B026D0075019F0021038503A4 -:103CF0009C030B01AC03AD016C013902BF01B7039A -:103D0000880022013C026A006A019A001F0000003C -:103D10001F0000001D000000020000000200000063 -:103D20006B046D046F0471047404760478047A04DF -:103D30005B045D045F0461046404660468046A044F -:103D40006C046E04700472047304750477047904BF -:103D50005C045E046004620463046504670469042F -:103D600030313233343536373839414243444546B1 -:103D700040305800303132333435363738396162AB -:103D80006364656640307800A83D000000000020B4 -:103D900050000000C4000000F83D0000500000206A -:103DA000B0110000E00000000000005100000051D0 -:103DB0000000000000000000000000000000000003 -:103DC000041025405760574025100400F4010000FE +:100830008171674883682146026A74A002F0BCFC9B +:1008400063488079401C62498871084680790F2886 +:100850001FDD0F20887108464079401C487108460A +:1008600040791F2815DD0020487108460079401C9A +:1008700008710846007919280BDD00E06FE00120BF +:10088000C870084620308379427901796AA002F065 +:1008900093FC4F48C078002806D14D4B9A7959797E +:1008A000187901F07CFE06E0494B20339A7959799A +:1008B000187901F074FE6848854203D90A98401CF3 +:1008C0000A900BE06548854203D90998401C0990BD +:1008D00004E062484138854200D97F1C6048854267 +:1008E00003D20A98401E0A900CE05C48A03885426A +:1008F00003D20998401E099004E058485F388542A9 +:1009000000D27F1E00971F210846099B0A9A01F01A +:100910009BFE0A9800F096FD099800F097FD384676 +:1009200000F098FD4F490D98884202D90698401C66 +:1009300006904D490D98884202D20698401E0690B6 +:1009400000220699079801F068FD079800F08AFDDB +:10095000069800F08BFD01F0F3FD01F0EBFD069928 +:100960000D98029703940591049009990A982B46D3 +:10097000019100903DA00C9A0E9902F01DFC1448C4 +:100980000078192822DB12488078002803D010480C +:10099000C07800281AD00120C0020F4980310860B9 +:1009A00000200B490870012048700F98C860084665 +:1009B00005610D984861084684610E98C86137A0AA +:1009C00002F0FAFB002029214906086011B0F0BDB1 +:1009D000EC00002094D1030000E100E0000004528C +:1009E00000001052000014520000185200001C5267 +:1009F0000000285200002C520000305200003452F7 +:100A0000FF3F0000C8781E0038901E00636F756EAF +:100A1000745F4C433A2025752C204C435F746172FF +:100A20006765743A2025752C204C435F64696666BF +:100A30003A2025750A000000636F617273653A20E1 +:100A400025752C206D69643A2025752C2066696E09 +:100A5000653A2025750A0000980F0300900D0300E9 +:100A6000E80A0300786F18008864180048463D259E +:100A7000642D2564202020324D3D25642D25642CD5 +:100A800025642C25642020204C433D256420202013 +:100A900049463D25642D25640D0A0000646F6E658E +:100AA0000D0A000010B5FF219931F74802F089FCCA +:100AB000F649F7484165C91F41610F2180308182A5 +:100AC0004020F44908601F20890548610820086219 +:100AD00010BDED4908607047EB4948607047EA492E +:100AE00088607047E849C860704710208106086038 +:100AF000704710B5044621460B398A00E449143189 +:100B0000885801F0FDFE10BD10B5044621460B3992 +:100B10008A00DF495431885801F0F2FE10BD70B5EB +:100B200005460C460B21DA480174012C02D0022C38 +:100B30000AD104E0D649087CFFF7E6FF05E0D44976 +:100B4000087CFFF7D6FF00E000BF00BF70BD70B5A6 +:100B500005460C4622462946CB48103002F0D2FB0F +:100B6000C94810300121890788600846C460012007 +:100B7000086070BD2820C84908600620C749086081 +:100B8000704702204107086070471820C24908607A +:100B90000120C2490860BE487038412109064861F9 +:100BA000102081060860704701204003BC4908609E +:100BB0000520C00208600420010708607047F8B5EE +:100BC00007460C4615461E463120C0433070AE48DD +:100BD0008030007C20702078A84205DC2278AC4967 +:100BE0006F39384602F08EFBF8BD01204003AC4956 +:100BF00008600020A84908607047F7B584B000BFBE +:100C000000F010FC019000F011FC00909E48803034 +:100C1000007C02909E488030C08A401C81B29C4873 +:100C20008030C1820025029AD1009E4B069A5A4319 +:100C3000104602F0D2FB0390092407E060009A49B5 +:100C4000095A601C4000984A1152641E002CF5DAC3 +:100C5000039800B294490880002407E0600092499C +:100C6000085E9249095D48434519641C0A2CF5DD6C +:100C70002846E917C90D09184F1285488030C18AE6 +:100C8000808A814216D17D20C000874207DD00980E +:100C9000421C014600920022019801F0BEFB8448EC +:100CA000874207DA0098421E01460092002201980E +:100CB00001F0B3FB019800F0D5FB009800F0D6FBE3 +:100CC0000025059819286DD2092407E0A00079496C +:100CD0000958601C8000774A1150641E002CF5DA18 +:100CE000744904980860002407E0A000714908587E +:100CF0006E49095D48434519641C0A2CF5DD2846F8 +:100D0000E917C90D09184E1261488030C18A808ADE +:100D1000814247D14120C00086421DD95C48007CF9 +:100D20000B3881005A4814304058401C5849097CFF +:100D30000B398A005649143188505548007C0B38CD +:100D40008100534854304058401C5149097C0B39AC +:100D50008A004F4954318850FF20E13086421DD22D +:100D60004B48007C0B388100494814304058401EE5 +:100D70004749097C0B398A00454914318850444859 +:100D8000007C0B388100424854304058401E404996 +:100D9000097C0B398A003E495431885000213C4877 +:100DA0008030C18207B0F0BD40203A4908601C2065 +:100DB0008905486108200862704740203549803124 +:100DC000086070473248407C704710B501F00FFB57 +:100DD00010BD3948006870473848008800B2704735 +:100DE000F1B5A2B0402112A802F0EBFA442101A80B +:100DF00002F0E7FA264922984861002478E0A20030 +:100E000023491431885801F07BFD0020292149062F +:100E100008602B480860012700E07F1C7D20C0018E +:100E20008742FAD37F202921490608601A480568BD +:100E30002448066830044019A10012AA5050611CD1 +:100E40004900124AFE328918129A514308460F4946 +:100E5000FE3102F0B8FA611C890001AA5050002C42 +:100E60003BDDA00012A90958A00010581438814297 +:100E70002AD2A100064814304058401CA200044960 +:100E80001431885029E00000BC020020C302000099 +:100E9000BC03002000E100E00000285200004052A6 +:100EA00000001052093D0000A4020020180000209C +:100EB00018FCFFFF24000020000054520000645280 +:100EC000FF3F000000002C52A100BF4840582830CE +:100ED000611C8A00BC498850641C002C08D1A10008 +:100EE000B94840582830611C8A00B7498850641CB2 +:100EF000102C84DB002400E0641C102CFCDB129816 +:100F000023B0F0BDF0B5B3B005460E460024402135 +:100F100021A802F056FA442110A802F052FA202229 +:100F2000AA4908A8FFF710F92022A84920316846ED +:100F3000FFF70AF9A448143845654FE0A200A2491A +:100F40004031885801F0DCFC002029214906086066 +:100F50009F4808600120319002E03198401C319098 +:100F60007D21C90131988842F7DB7F20292149067C +:100F700008609848076898480068329032980004E2 +:100F8000C019A10021AA505062006B46995A620014 +:100F900008AB9A5A7243104602F015FAA10010AA43 +:100FA0005050A00021A90958A0001058401F8142AC +:100FB00009D2A100844840304058401CA200824918 +:100FC000403188500AE0A1007F4840304058283026 +:100FD000611C8A007C4940318850641C102CADDBB8 +:100FE00033B0F0BD70B504462046FFF7F9FE054664 +:100FF0007A4800F0A8FAFF202B3000F0B3FAFF2067 +:10100000343000F0AFFAFF20F93000F09CFAFF20F6 +:10101000FB3000F0A7FAFF20FD3000F0A3FA2946CC +:101020002046FFF76FFFFFF7E0FD70BD70B50120B0 +:1010300080070469C5690121634814384174002D93 +:1010400008D008202840002803D000215E4814382A +:10105000417400BF01208007456202202040002823 +:1010600009D05F480068002805D021225206506848 +:101070005B4A1168884704202040002809D058485E +:101080004068002805D0212252065068544A516811 +:10109000884708202040002809D05148806800284F +:1010A00005D02122520650684D4A91688847102089 +:1010B0002040002809D04A48C068002805D02122D5 +:1010C00052065068464AD1688847012080078461EB +:1010D00070BD70B543480568434806683004401940 +:1010E000424909688900424A505040480068401C03 +:1010F0003E4908603F480068202108433D49086098 +:10110000084600683C4908603A4800682021884346 +:101110003849086008460068374908603348006865 +:101120000A281ED1012406E0A000314A115833A03C +:1011300002F042F8641C0A2CF6D3FF20013031493A +:10114000086040002F498039086000202749086066 +:10115000002400E0641C2C488442FBD32B482C491B +:10116000C86070BD10B5234A126860231A43214B32 +:101170001A601A461268204B1A601E4A12686023D1 +:101180009A431C4B1A601A4612681B4B1A600122C4 +:1011900052021C4B803B1A6052101A4B1A605200CC +:1011A0001C4B1A600F4A10680F4A11680A04121883 +:1011B0000E4B1B689B000E4CE2500C4A1268521CEE +:1011C0000A4B1A6010BD0000D0030020C03C000094 +:1011D000FF3F00000000285200002C52CB0300000B +:1011E000BC020020000044520000485208000020C9 +:1011F000140100201400002000000C5225580D0A94 +:101200000000000080E100E0102700000400FA0563 +:1012100000ED00E080E200E010B502A001F0CCFF9C +:1012200010BD000061646320696E74657272757030 +:1012300074207472696767657265640D0A00000046 +:1012400010B509A001F0B8FF10BD10B510A001F055 +:10125000B3FF10BD10B518A001F0AEFF10BD10B562 +:101260001FA001F0A9FF10BD45787465726E616C16 +:1012700020496E74657272757074204750494F33FF +:10128000207472696767657265640D0A000000006A +:1012900045787465726E616C20496E746572727502 +:1012A0007074204750494F382074726967676572BF +:1012B00065640D0A0000000045787465726E616C0B +:1012C00020496E74657272757074204750494F39A9 +:1012D000207472696767657265640D0A000000001A +:1012E00045787465726E616C20496E7465727275B2 +:1012F0007074204750494F313020747269676765B8 +:101300007265640D0A00000010B502A001F054FFE0 +:1013100010BD00007561727420727820696E74656A +:101320007272757074207472696767657265640D96 +:101330000A0000001E480021016041608160C16018 +:10134000481E212149068860072008607047184917 +:101350000860704703202121490608638020154951 +:101360000860704700B50246FFF7F4FF21204006F1 +:10137000026100BD21204006406870470020212105 +:101380004906086380200B4980310860704710B51A +:101390000948046BE007C00F002806D00448006825 +:1013A000002802D00249086880470348446310BD02 +:1013B0005404002000E100E04000004210B5CC21C0 +:1013C000FE4801F0FEFF1121FC488030C16203217C +:1013D0000163152141630F218163C163F8490164F1 +:1013E00016214164122181641422F6491830FEF757 +:1013F000ABFE10BDF1488030C06A7047EF488030C6 +:10140000006B7047ED488030406B7047EB48803090 +:10141000806B7047E9488030C06B7047E748803088 +:10142000006C7047E5488030406C7047E34880307E +:10143000806C7047E1498031C8627047DF49803174 +:1014400008637047DD49803148637047DB4980316C +:1014500088637047D9498031C8637047D749803164 +:1014600008647047D549803148647047D34980315A +:101470008864704710B5044698222146CF48FEF78D +:1014800063FE10BDD049014049004208CE4B1A40CE +:1014900011430846CD49014089008208CB4B1A40D0 +:1014A00011430846CA49014009010209C84B1A40C4 +:1014B000114308460106FF221202024012021143A4 +:1014C000020AFF231B021A401143020E1143084671 +:1014D0007047F3B500256C1E16E00098465D304657 +:1014E000FFF7D0FF064600270BE02046704000289B +:1014F00004DA6000B7494840044600E06400760022 +:101500007F1C072FF1DD6D1C01988542E5D3E04378 +:10151000FFF7B8FFFCBDF021014009110207120ED0 +:1015200011430846CC210140891033220240920029 +:1015300011430846AA210140491055220240520099 +:1015400011430846704710B541098A009B4B9A58D1 +:101550004B01C41A0123DB07E3409A438B00974CED +:10156000E25010BD10B541098A00944B9A584B01C6 +:10157000C41A0123DB07E3401A438B008F4CE2506F +:1015800010BDFFB505460E46174600240FE028465D +:101590002041C007C00F002804D02046F530FFF7D7 +:1015A000E1FF03E02046F530FFF7CDFF641C032C7C +:1015B000EDDD00240FE030462041C007C00F0028B9 +:1015C00004D02046F930FFF7CDFF03E02046F93084 +:1015D000FFF7B9FF641C032CEDDD00240FE0384653 +:1015E0002041C007C00F002804D02046FD30FFF77F +:1015F000B9FF03E02046FD30FFF7A5FF641C032C74 +:10160000EDDD00240FE003982041C007C00F002843 +:1016100004D0E01DFA30FFF7A5FF03E0E01DFA302B +:10162000FFF791FF641C032CEDDDFFBDFFB5054600 +:101630000E46174600240FE028462041C007C00F81 +:10164000002804D0E01DFE30FFF78CFF03E0E01D12 +:10165000FE30FFF778FF641C012CEDDD002411E063 +:1016600030462041C007C00F002805D02046FF307B +:101670000830FFF777FF04E02046FF300830FFF71F +:1016800062FF641C012CEBDD002411E03846204190 +:10169000C007C00F002805D02046FF300A30FFF7F2 +:1016A00061FF04E02046FF300A30FFF74CFF641C66 +:1016B000012CEBDD002411E003982041C007C00F8E +:1016C000002805D02046FF300C30FFF74BFF04E028 +:1016D0002046FF300C30FFF736FF641C012CEBDD99 +:1016E000FFBD30B589B0054620223B4901A8FEF771 +:1016F0002BFD002411E02846E040C007C00F002861 +:1017000005D0610001AA505AFFF71DFF04E06100F7 +:1017100001AA505AFFF726FF641C0F2CEBD909B021 +:1017200030BD30B589B0054620222B49203101A8B3 +:10173000FEF70AFD002411E02846E040C007C00F74 +:10174000002805D0610001AA505AFFF70BFF04E002 +:10175000610001AA505AFFF7F6FE641C0F2CEBD96A +:1017600009B030BD00B5FF20F630FFF7ECFEFF20DA +:10177000F730FFF7E8FEFF20F830FFF7E4FEFF2028 +:10178000F930FFF7E0FEFF20FA30FFF7EBFEFF2015 +:10179000FB30FFF7D8FEFF20FC30FFF7E3FEFF2011 +:1017A000FD30FFF7D0FEFF20FE30FFF7DBFEFF200D +:1017B000FF30FFF7D7FE094812E000006404002064 +:1017C000006A1800003D000055555555333333333A +:1017D0000F0F0F0FB71DC104143D0000FF010000E3 +:1017E000FFF7C0FE01204002FFF7BCFEF848FFF7FC +:1017F000AAFEF748401CFFF7A6FEF548801CFFF73D +:10180000B1FE81208000FFF7ADFE0020F1490860A5 +:10181000F148FFF7A7FE00BDF3B581B00F460020E9 +:101820000090019EB800019E82193146EBA001F0A4 +:10183000C3FCF6A001F0C0FC00240CE0002507E08A +:10184000A00030580121A9408843A10070506D1CB0 +:10185000202DF5DB641CBC42F0D300241DE00025E4 +:1018600018E0A00030580121A9400840002809D004 +:10187000A00033582A462146EAA001F09DFC0098BA +:10188000401C0090A00030580121A9400843A1004D +:1018900070506D1C202DE4DB641CBC42DFD300249F +:1018A0001FE000251AE0A00030580121A94008409F +:1018B0000121A940884209D0A00033582A46214678 +:1018C000E4A001F079FC0098401C0090A000305882 +:1018D0000121A9408843A10070506D1C202DE2DB3E +:1018E000641CBC42DDD37C1E1DE01F2518E0A00057 +:1018F00030580121A9400840002809D0A0003358E1 +:101900002A462146DFA001F057FC0098401C0090B9 +:10191000A00030580121A9400843A10070506D1E5D +:10192000002DE4DA641E002CDFDA7C1E1FE01F2588 +:101930001AE0A00030580121A94008400121A94027 +:10194000884209D0A00033582A462146D9A001F088 +:1019500033FC0098401C0090A00030580121A940A1 +:101960008843A10070506D1E002DE2DA641E002C29 +:10197000DDDA002416E0002511E0A0003058012136 +:10198000A9400840002809D0A00033582A46214623 +:10199000D4A001F011FC0098401C00906D1C202D7B +:1019A000EBDB641CBC42E6D3DAA0009901F004FC36 +:1019B0000098FEBD30B50546002411E028462041C0 +:1019C000C007C00F002805D02046FF30ED30FFF7DC +:1019D000C9FD04E02046FF30ED30FFF7B4FD641C84 +:1019E000062CEBD930BD30B50546002411E0284661 +:1019F0002041C007C00F002805D077497539081B62 +:101A0000FFF7B0FD04E074497539081BFFF79BFD33 +:101A1000641C042CEBD9052411E028462041C007A2 +:101A2000C00F002805D06C497539081BFFF78BFDE6 +:101A300004E069497539081BFFF794FD641C062C06 +:101A4000EBD930BD30B50546002411E028462041D1 +:101A5000C007C00F002805D05F49C91C6018FFF7F8 +:101A600081FD04E05C49C91C6018FFF76CFD641C33 +:101A7000042CEBD9052411E028462041C007C00FF3 +:101A8000002805D05449C91C6018FFF75CFD04E02C +:101A90005149C91C6018FFF765FD641C062CEBD981 +:101AA00030BD30B50546002411E028462041C0076E +:101AB000C00F002805D048490F31081BFFF752FD21 +:101AC00004E045490F31081BFFF73DFD641C042C61 +:101AD000EBD9A806C00F002804D0E7208000FFF74C +:101AE00032FD03E0E7208000FFF73CFD6806C00FF1 +:101AF000002804D036482C30FFF725FD03E0344899 +:101B00002C30FFF72FFD30BD30B5054600240FE027 +:101B10002846E040C007C00F002804D020466B30A4 +:101B2000FFF720FD03E020466B30FFF70CFD641C3F +:101B30000F2CEDDD30BD30B5054600240FE0284602 +:101B4000E040C007C00F002804D020467C30FFF7DB +:101B500009FD03E020467C30FFF7F5FC641C072CF0 +:101B6000EDDD30BD30B5054600240FE02846E040ED +:101B7000C007C00F002804D02046D130FFF7F2FC88 +:101B800003E02046D130FFF7DEFC641C0F2CEDDDB6 +:101B900030BD70B505460E4600240AE02046FF30F1 +:101BA000D930FFF7D0FC2046FF301730FFF7CBFCD1 +:101BB000641C0D2CF2DB002405E0FF21E531081B3D +:101BC000FFF7D0FC641CAC42F7D90024BAE0000057 +:101BD0000102000000002852920300000D0A0D0AC5 +:101BE0005374617274696E67205352414D2074655D +:101BF00073742066726F6D203078255820746F20C2 +:101C0000307825582E2E2E0D0A0000005468697376 +:101C10002074616B657320617768696C652E2E2E68 +:101C20000D0A00000D0A4552524F5220312040202B +:101C3000616464726573732025582062697420257D +:101C400064202D2D2056616C756520697320255800 +:101C5000000000000D0A4552524F52203220402011 +:101C6000616464726573732025582062697420254D +:101C700064202D2D2056616C7565206973202558D0 +:101C8000000000000D0A4552524F522033204020E0 +:101C9000616464726573732025582062697420251D +:101CA00064202D2D2056616C7565206973202558A0 +:101CB000000000000D0A4552524F522034204020AF +:101CC00061646472657373202558206269742025ED +:101CD00064202D2D2056616C756520697320255870 +:101CE000000000000D0A4552524F5220352040207E +:101CF00061646472657373202558206269742025BD +:101D000064202D2D2056616C75652069732025583F +:101D1000000000000D0A5352414D20546573742099 +:101D2000436F6D706C657465202D2D2025642045F2 +:101D300072726F72730D0A002046FF301730FFF782 +:101D400002FC641CB442F7D970BD70B505460E465E +:101D5000002411E03046E040C007C00F002805D045 +:101D60002046FF30C530FFF7FDFB04E02046FF3082 +:101D7000C530FFF7E8FB641C042CEBDD002411E008 +:101D80002846E040C007C00F002805D02046FF309D +:101D9000CA30FFF7E7FB04E02046FF30CA30FFF708 +:101DA000D2FB641C042CEBDD70BD70B505460E46FD +:101DB000002411E03046E040C007C00F002805D0E5 +:101DC000FF215931081BFFF7CDFB04E0FF215931FA +:101DD000081BFFF7B8FB641C042CEBDD002411E0AA +:101DE0002846E040C007C00F002805D0FF2154312D +:101DF000081BFFF7B7FB04E0FF215431081BFFF776 +:101E0000A2FB641C042CEBDD70BD70B505460E46CC +:101E1000002411E02846E040C007C00F002805D08C +:101E20002046FF30E630FFF79DFB04E02046FF3000 +:101E3000E630FFF788FB641C042CEBDD002411E086 +:101E40003046E040C007C00F002805D0FF21163102 +:101E5000081BFFF787FB04E0FF211631081BFFF783 +:101E600072FB641C052CEBDD70BDF8B5FA4C650DFA +:101E7000FA48006A2040F94908620846C06B2840C9 +:101E8000C8630846006AF649A1430843F34908625B +:101E9000F4484862F4488862F448C862F448086329 +:101EA000F4484863F44888630846C06BF349A94383 +:101EB0000843EA49C863FF20A930FFF744FBFF202D +:101EC000AA30FFF74FFB3F210846FFF79EFF07218F +:101ED0000846FFF75EFE00210846FFF736FF0021A7 +:101EE0000846FFF762FF0020FFF72DFB0120FFF7F8 +:101EF0002AFB6020FFF727FBFF201030FFF723FBB2 +:101F0000FF20EC30FFF71FFB6420FFF71CFB652070 +:101F1000FFF719FB6620FFF716FB6120FFF722FB96 +:101F20000020D7490860D748D74908606720FFF7E5 +:101F300019FB0B260227F002F9010843D349086078 +:101F400005200090D24900980860FF200E30FFF76E +:101F5000FAFAFF200F30FFF7F6FA0020FFF72AFD0C +:101F6000F020FFF7FFFA5D20C000FFF7FBFAC94839 +:101F7000FFF7F8FAC748401CFFF7F4FA0120C649FA +:101F80000860F8BD70B5C54C650DB448006A2040C6 +:101F9000B24908620846C06B2840C8630846006A18 +:101FA000BF49A1430843AD490862AE484862AE4804 +:101FB00040308862BB48C862BB480863BB4848637E +:101FC000BB4888630846C06BBA49A9430843A34984 +:101FD000C8630020FFF7C6FA0120FFF7C3FA0D20FF +:101FE000FFF792FD2620FFF7A6FD5020FFF7BAFD70 +:101FF000EE20FFF7B7FAEF20FFF7B4FAFF200E301C +:10200000FFF7A1FAFF200F30FFF79DFA8420FFF7BA +:10201000A9FA05269E4806600A210020FFF795FED2 +:102020000020FFF7C7FCF020FFF79CFA01204003D7 +:10203000A1490860F002086070BD10B50A467F2310 +:1020400083435901854B9B6F7F246401A343834CD9 +:10205000A36723469B6F0B43A36710BD7F22824378 +:1020600051037E4A926F7F235B039A437B4B9A67AF +:102070001A46926F0A439A67704710B5F0230340DF +:1020800019090207754B9B6F1B091B01734CA36752 +:1020900023469B6F0B43A3672346DB6F1B011B0982 +:1020A000E3672346DB6F1343E36710BD00B57D2074 +:1020B000C000FFF757FA8148FFF754FA7F48401CE9 +:1020C000FFF750FA7D48801CFFF74CFA80207C49CE +:1020D00008607F20FFF7D1FF7F20FFF7BFFF0021BF +:1020E0003F20FFF7AAFF00BD70B503460024002083 +:1020F0000325AD021D402C010F252D031D402D0B86 +:1021000028433F252D011D40284395022843CD0239 +:1021100028431D072D0C2843E5436A4E3560C5430F +:10212000694E356070BD002824D14C49C96F042226 +:1021300011434A4AD1671146C96F02229143474A67 +:10214000D1671146803109680122D2071143434A01 +:10215000803211604149C96F49084900803AD1670E +:102160001146803109680722120711433B4A803229 +:102170001160F5E0012822D13849C96F02221143CC +:10218000364AD1671146C96F04229143334AD16759 +:10219000114680310968C2071143304A803211600C +:1021A0002E49C96F8143803AD16711468031096851 +:1021B000072212071143294A80321160D0E0022819 +:1021C00023D12649C96F04221143244AD1671146FD +:1021D000C96F02229143214AD167114680310968B3 +:1021E0004A0052081D4980310A608039C96F0122B6 +:1021F00011431A4AD1671146803109680722120734 +:102200001143164A80321160AAE003285ED11349B7 +:10221000C96F04221143114AD1671146C96F0222C6 +:1022200091430E4AD167114680310968C2071143B4 +:102230000A4A803211600949C96F49084900803A49 +:10224000D167114680310968012292079143034A00 +:102250008032116084E000000000FCFF6404002074 +:10226000E0FF5040882142003100048881403B114A +:1022700002817E024448ED0300000160032EE0FF6E +:10228000000038520FA0000000003C5200000C5229 +:1022900000002452E9020000000040520000FEFF4E +:1022A000F0FF000081400C100281180044C87F013B +:1022B000010001700008E0FF00001052E903000077 +:1022C00000002C520000145200001852042822D1A1 +:1022D000FE49C96F04221143FC4AD1671146C96FF8 +:1022E00002229143F94AD1671146803109684207B9 +:1022F0001143F64A80321160F449C96F4908490018 +:10230000803AD167114680310968C2069143EF4A8D +:102310008032116024E0052822D1EC49C96F0422E3 +:102320001143EA4AD1671146C96F02229143E74A35 +:10233000D167114680310968C2071143E34A8032F0 +:102340001160E249C96F49084900803AD1671146D6 +:1023500080310968032252079143DC4A80321160C0 +:10236000704710B50A467F2383435903D74BDB6F71 +:102370007F246403A343D54CE3672346DB6F0B4301 +:10238000E36710BD10B5044600217F20FFF7E9FF89 +:102390000420FFF7C8FE01221146FF20E130FFF7BD +:1023A000A3FEFD208000FFF7DDF810BD70B50346E9 +:1023B0000C467F25292676063560C54D2868C54D13 +:1023C00029680D042D181D60C34D2868C34D296868 +:1023D0000D042D182560C24D2868C24D29680D04D2 +:1023E0002D18156000253560BF4D356070BDBF48A4 +:1023F0000068012189020840002804D0BB480088F9 +:102400008005800D70470020FCE7B94800787047D0 +:10241000B84800780007000F7047F0B505460E4633 +:102420001746002411E028462041C007C00F0028AD +:1024300005D0FF21B031081BFFF794F804E0FF211D +:10244000B031081BFFF77FF8641C042CEBD9002483 +:1024500011E030462041C007C00F002805D0FF2101 +:10246000B631081BFFF77EF804E0FF21B631081BE8 +:10247000FFF769F8641C042CEBD9012F03D19E48A7 +:10248000FFF770F802E09C48FFF75DF8F0BD70B50B +:1024900005460E46002411E03046E040C007C00F5C +:1024A000002805D0944990316018FFF75BF804E0EC +:1024B000914990316018FFF746F8641C032CEBDD5E +:1024C000F006C00F002804D08B489430FFF73BF88B +:1024D00003E089489430FFF745F8002411E02846CE +:1024E000E040C007C00F002805D0D7218900601840 +:1024F000FFF738F804E0D72189006018FFF723F8C8 +:10250000641C012CEBDD022411E02846E040C007EA +:10251000C00F002805D0784993316018FFF713F8F1 +:1025200004E0754993316018FFF71CF8641C042C13 +:10253000EBDD70BD282071490860202008607047DD +:1025400010B500210022252126E0002221E08B0089 +:102550005E4CE358012494402340002B01D12120FC +:1025600000E02020654B186002240346A343184670 +:10257000624B186004231843604B18600424034620 +:10258000A34318465D4B1860022318435B4B186049 +:10259000521C202ADBDB491E0029D6DA10BDF7B514 +:1025A00084B00546E806C00E03900598C006C00E2C +:1025B00002900698C006C00E01900398FEF7ABFF8C +:1025C00000900298FEF7A7FF06460198FEF7A3FFCA +:1025D00004460023002700BF00BF00980090782029 +:1025E000204040020343F00003430098C008034327 +:1025F00080202040C00907433648036040480760F8 +:1026000007B0F0BD01460020CA07120E1043022297 +:102610000A405201104304220A40D200104308220B +:102620000A405200104310220A4052081043202250 +:102630000A40D208104340220A4052091043802227 +:102640000A40D20910437047F0B585B006460C46E3 +:1026500015461F461D4880308661183044608560ED +:10266000C7601A4998310A98086108461838806886 +:102670002449084003463046FFF7C4FF0006C00E59 +:1026800004902046FFF7BEFF0006C00E03902846C8 +:10269000FFF7B8FF0006C00E02903846FFF7B2FF02 +:1026A0000006C00E01900A98FFF7ACFF0006C00EAE +:1026B0000090049880060343039840050343029862 +:1026C000000403430198C00203431DE0640400209A +:1026D0000000185200001C520000285200002C522A +:1026E0000000305200003452FF3F00000000405212 +:1026F0000000545200003C52D60200000000585224 +:10270000000020521F000080009880010343202019 +:102710000343BA48836005B0F0BD38B5FEF74EFEFE +:10272000FDF790FFFEF7BEF9FEF704FE00F084F916 +:10273000FFF718F800231A4619461846FEF776FFE9 +:102740000023062211461046FEF71BFF0020FEF76D +:10275000E8FFAB48FEF7C5FFAA48FEF703FFA74A0C +:10276000D16A106BFFF793FEA648001DFEF7FAFE34 +:10277000A548FEF7F7FE3120FEF7F4FE3020FEF705 +:10278000F1FE2F20FEF7DFFE2E20FEF7EBFE2D20C0 +:10279000FEF7D9FE2C20FEF7E5FE2B20FEF7E2FE29 +:1027A0002A20FEF7DFFE97480930FEF7DBFE964849 +:1027B0004630FEF7D7FE2920FEF7D4FE022403E0C0 +:1027C0002046FEF7CFFE641C092CF9DBFFF74DFB1A +:1027D000FFF76CFC894A916C506C0022FFF71DFEDC +:1027E0008648C06B00908548836B1F21426B08466A +:1027F000FFF72AFF83482138FEF7B4FE0F220C2191 +:102800001720FFF7CCFE7D200001FFF7BBFDFFF78F +:1028100097FEFFF78FFE38BDF8B500202921490645 +:1028200008607A480860012700E07F1C78488742EA +:10283000FBDB7F202921490608607648046876483A +:1028400005682804061908460468744805682804C1 +:10285000001900907003009900F0B5FDF8BD18B59F +:10286000664818300069654C18340090E368A26827 +:102870006168183CA069FFF7E7FE18BD70B5034614 +:102880000C467F25292676063560624D2868624D04 +:1028900029680D042D181D60614D2868614D296857 +:1028A0000D042D182560354628685C4D29680D04F7 +:1028B0002D18156000253560544D356070BD10B57C +:1028C00000210BE003689B0F0468E40E6340DA0705 +:1028D000D20F03685B0013430360491C0829F1DB36 +:1028E00010BD10B5002408E0A000444980390A5802 +:1028F00021464DA000F060FC641C262CF4D310BDD2 +:10290000F0B585B0054600260027172003908C20DF +:1029100002902846029900F060FD1330C0B200908A +:102920002846029900F059FD0D462846039900F00B +:1029300054FD41004018C019C0B2019028460399C7 +:1029400000F04BFD022800DB00BF2846039900F091 +:1029500044FD8819C4B20F2C00DD641C2246019985 +:102960000098FFF71CFE05B0F0BD24488038806F4A +:1029700001210905884321498039886770471F482C +:102980008038806F0121090508431C498039886718 +:1029900070471A488038006C0921C90688431749D6 +:1029A00080390864704715488038006C0921C906D1 +:1029B00008431249803908647047104800680121B3 +:1029C000C90408430D49086070470C48006801219C +:1029D000C904884309490860704708480068032112 +:1029E000490488430549086070470448006803218A +:1029F000490408430149086070470000E4040020CE +:102A0000FFFF00007B04000029020000FF3F0000E0 +:102A100050C300000000185200001C520000045275 +:102A200000002052000024524153435B25755D2075 +:102A30003D20307825780A0010B57021FA4800F062 +:102A4000C0FC0021F8484030017002214170722121 +:102A500081703221C17080210171C621417125210F +:102A600081710121C1715321017343210C304170E7 +:102A7000552181704D21C1703321017110BDF0B518 +:102A800097B000270024AA20169015901490E648CD +:102A9000403080798006800E403008904021E24826 +:102AA00000F08FFC2C2109A800F08BFC5522394640 +:102AB0007F1CDD4842546B2239467F1C42547D22E4 +:102AC00039467F1C4254912239467F1C4254712260 +:102AD00039467F1C425440222146641C09A84254B6 +:102AE000A4222146641C425405250AE0CE49403107 +:102AF000485DFEF710FD2146621CD4B209AA50546D +:102B00006D1E002DF2DAC8484030C07900281AD076 +:102B100060222146601CC4B209A8425410222046FB +:102B2000611CCCB209A90A5400250AE0BE494C3107 +:102B3000485DFEF7F0FC2146621CD4B209AA50544D +:102B40006D1C052DF2DBB8484030007A002820D0FB +:102B5000C0222146601CC4B209A842540322204668 +:102B6000611CCCB209A90A54AF494031498A081204 +:102B7000FEF7D1FC2146621CD4B209AA5054AA49DE +:102B80004031887CFEF7C7FC2146621CD4B209AAFA +:102B90005054A5484030407A00285FD0902220460B +:102BA000611CCCB209A90A5443222046611CCCB254 +:102BB00009A90A549C49496D080EFEF7ACFC214650 +:102BC000621CD4B209AA50549749496D0902080EF3 +:102BD000FEF7A1FC2146621CD4B209AA50549249C6 +:102BE000496D0904080EFEF796FC2146621CD4B21A +:102BF00009AA50548C49496DC8B2FEF78CFC214695 +:102C0000621CD4B209AA50548749896D080EFEF798 +:102C100082FC2146621CD4B209AA50548249896DB3 +:102C20000902080EFEF777FC2146621CD4B209AAFD +:102C300050547D49896D0904080EFEF76CFC21464D +:102C4000621CD4B209AA50547749896DC8B2FEF704 +:102C500062FC2146621CD4B209AA5054724840302A +:102C6000807A00283BD07048416E006E6F4A704BEE +:102C70000391029000F0D4FD0791069000206D4969 +:102C8000079B069A00F032FE00226B4B01910090E8 +:102C900000F0C6FD0391029000F0F2FD0590C02205 +:102CA0002146601CC4B209A8425483222046611CFC +:102CB000CCB209A90A5405990904080EFEF72BFCA9 +:102CC0002146621CD4B209AA50540599C8B2FEF735 +:102CD00022FC2146621CD4B209AA505400BF5248BB +:102CE0004030C07A00281AD0A0222046611CCCB205 +:102CF00009A90A5483222046611CCCB209A90A54AE +:102D000000250AE048496831485DFEF704FC214689 +:102D1000621CD4B209AA50546D1C042DF2DB0024AD +:102D200031E007252BE009A8005D0121A9400840FA +:102D300028411499C907C90F06464E4014984010FF +:102D40001599C907090E0843149015984010169953 +:102D5000C9010843B101484071014840C0B2159013 +:102D600016984010F1010843B10148403101484034 +:102D7000F100484071004840C0B216906D1E002D11 +:102D8000D1DA601CC4B2272CCBDB1498FEF7C3FB4E +:102D900014901598FEF7BFFB15901698FEF7BBFB35 +:102DA00016902146621CD4B209AA149850542146A8 +:102DB000621CD4B209AA159850542146621CD4B2A0 +:102DC00009AA16985054002423E007251DE009A8FD +:102DD000005D0121A940884309A9095D0122AA409B +:102DE0001140089AD207D20FAA405140084309A9BE +:102DF0000855089840100899C907490E08430899D2 +:102E0000C907490F484008906D1E002DDFDA601C8D +:102E1000C4B22A2CD9DB0449C8192A2209A900F016 +:102E200071FA17B0F0BD00003005002066666666D6 +:102E300066127140000059400000F03F10B50024B8 +:102E40004021D64800F0BDFA1D222146641CD3481B +:102E5000425455222146641C4254AD222146641C32 +:102E60004254F6222146641C425445222146641CE9 +:102E70004254C7222146641C4254C5222146641C88 +:102E800042540E222046611CCCB2C4490A54262268 +:102E90002046611CCCB2C1490A5413222046611C51 +:102EA000CCB2BE490A54C2222046611CCCB2BB49F6 +:102EB0000A54AC222046611CCCB2B8490A5498226C +:102EC0002046611CCCB2B5490A5437222046611C09 +:102ED000CCB2B2490A54B8222046611CCCB2AF49E8 +:102EE0000A5430222046611CCCB2AC490A54A122BB +:102EF0002046611CCCB2A9490A54C9222046611C53 +:102F0000CCB2A6490A54E4222046611CCCB2A349A3 +:102F10000A5493222046611CCCB2A0490A5475225F +:102F20002046611CCCB29D490A54B7222046611C40 +:102F3000CCB29A490A5441222046611CCCB297492E +:102F40000A546C222046611CCCB294490A54D12206 +:102F50002046611CCCB291490A542D222046611CA6 +:102F6000CCB28E490A54B8222046611CCCB28B499F +:102F70000A5410BD10B50446062221468748403049 +:102F800000F0C0F910BD8549403188717047834910 +:102F90004031C871704710B50446052221467F486C +:102FA0004C3000F0AFF910BD7C49403108727047D9 +:102FB0007A494031488270477849403148727047B9 +:102FC000764948657047754988657047734940314F +:102FD00088727047714A5166106670476F49403178 +:102FE000C872704710B50446042221466B48683009 +:102FF00000F088F910BD10B5F9208000FEF7B2FA94 +:103000006748FEF7A0FA6648401CFEF79CFA644841 +:10301000801CFEF798FA7D20C000FEF794FA604805 +:10302000001DFEF790FA5E48401DFEF78CFA5C48E2 +:10303000801DFEF788FA5A481030FEF793FA584878 +:103040002C30FEF78FFA56482D30FEF78BFAF12020 +:103050008000FEF778FA52485430FEF774FA0020E8 +:10306000504908607F20FFF708F87F20FEF7F6FF41 +:1030700000213F20FEF7E1FFFFF762FAFFF75AFA5F +:1030800010BD10B5FEF77EFFFF20A930FEF75BFAFA +:10309000FF20AA30FEF766FAFF20A730FEF762FA9B +:1030A0003F210846FEF7B1FE07210846FEF771FDF5 +:1030B0004C20FEF740FD7B20FEF745FA5D20C00066 +:1030C000FEF750FA3648FC38FEF74CFA3448FB3825 +:1030D000FEF748FA012034490860FFF731FAFFF79C +:1030E00029FA10BD002010210843400840000421A7 +:1030F0000843202108432B490860704770B5002021 +:103100000125284304260546B543284620260546C2 +:10311000B5432846234D2860002123E01F4D6C5CF9 +:1031200007221CE025461541EB07DB0F002B05D1DC +:1031300002260546B54328461A4D2860012B03D1C7 +:1031400002252843174D286008252843154D28607F +:1031500008260546B5432846124D2860521E002A0F +:10316000E0DA491C4029D9DB70BD10B5FFF7C6FF76 +:10317000FDF700FD68200D490860002400E0641C94 +:10318000322CFCDBFFF7AEFF002400E0641C084893 +:103190008442FBDBFDF729FD10BD00003005002057 +:1031A000E503000000002C520000405200002852AD +:1031B000204E0000704700000FB4054910B503AA67 +:1031C000029800F011FD10BC08BC04B018470000C4 +:1031D00000000020F8B50E4604460020206220467C +:1031E000E1688847002829D0252802D06268A168B4 +:1031F00020E0E16820460027884705001ED02846C9 +:103200004138192802D80127FF02203532462046CE +:1032100027602946FCF772FF002808D0012804D057 +:10322000F61DF608F6000836D9E7361DD7E76268BE +:103230002846A1689047206A401CCFE7206AF8BD65 +:10324000F7B5002575291068009914A611D0C0465D +:10325000C046002802DA404211A608E00099096839 +:103260008A0701D50FA602E0490704D50EA601255D +:1032700001E0C046C046009F0024243704E000F06F +:10328000C7FC30313955641C0028F8D12B46324632 +:103290002146009800F04FFCFEBD00000000000039 +:1032A0002D0000002B0000002000000070B5044637 +:1032B0000D4621461068C046C0462188090502D542 +:1032C0000F4A7A4402E00E4A7A440E322346002125 +:1032D000243305E006070009360F965D5E54491C4D +:1032E0000028F7D120780023000705D5702D03D0E2 +:1032F000002901D002231132204600F01CFC70BDD1 +:103300008E0A0000F8B5042A2CD3830712D00B785C +:10331000491C0370401C521E83070BD00B78491CBC +:103320000370401C521E830704D00B78491C0370A5 +:10333000401C521E8B079B0F05D0C91ADF002023AB +:10334000DE1B08C90AE0FCF7FFFEF8BD1D4608C9F0 +:10335000FD401C46B4402C4310C0121F042AF5D275 +:10336000F308C91A521EF0D40B78491C0370401C94 +:10337000521EEAD40B78491C0370401C012AE4D485 +:1033800009780170F8BD01E004C0091F0429FBD2CF +:103390008B0701D50280801CC90700D002707047DE +:1033A00000290BD0C30702D00270401C491E02291D +:1033B00004D3830702D50280801C891EE3E7002224 +:1033C000EEE70022DFE7002203098B422CD3030A39 +:1033D0008B4211D300239C464EE003460B433CD462 +:1033E000002243088B4231D303098B421CD3030ACA +:1033F0008B4201D394463FE0C3098B4201D3CB01FA +:10340000C01A524183098B4201D38B01C01A524129 +:1034100043098B4201D34B01C01A524103098B422D +:1034200001D30B01C01A5241C3088B4201D3CB0018 +:10343000C01A524183088B4201D38B00C01A5241FB +:1034400043088B4201D34B00C01A5241411A00D2AB +:1034500001465241104670475DE0CA0F00D0494214 +:10346000031000D34042534000229C4603098B4284 +:103470002DD3030A8B4212D3FC22890112BA030A0C +:103480008B420CD3890192118B4208D3890192118E +:103490008B4204D389013AD0921100E08909C30913 +:1034A0008B4201D3CB01C01A524183098B4201D315 +:1034B0008B01C01A524143098B4201D34B01C01A00 +:1034C000524103098B4201D30B01C01A5241C30878 +:1034D0008B4201D3CB00C01A524183088B4201D3E7 +:1034E0008B00C01A5241D9D243088B4201D34B0002 +:1034F000C01A5241411A00D20146634652415B1044 +:10350000104601D34042002B00D549427047634624 +:103510005B1000D3404201B50020C046C04602BD4A +:103520007047704770470000F0B50C46871A9C4101 +:103530000D46861A9D4103D2C01BA141D219634199 +:103540000D0D1F0DC94EEC1BAE435CD07F057F0DEA +:103550000026002F51D02D05AC46A943DD020123E2 +:10356000ED0A1B051D4320231B1B24D41746E740EF +:10357000381871412F46E740CC199D402818314634 +:1035800061410C0D27D161449A4013D50023401CA2 +:10359000594152000ED14008400001224B00520513 +:1035A000D34207D305204007C14201D5B04900E00E +:1035B000B0493046F0BD6B00002A00D001229A18B5 +:1035C0001F23203C1B1B01D5002302E0E5402818E7 +:1035D00071410C0DD7D0012424050919C407CD076A +:1035E00040084908E40F28436144002CD5D000244A +:1035F000401C61419A40D0D1CDE76A05520DD9D126 +:10360000C90FC907D5E79C4D4E00002801D0012401 +:1036100000E0002434195F00002A01D0012600E0F8 +:103620000026BE19954FAC420CD8AE420AD8B4421F +:1036300006D001256D05EC42BCD010461946F0BD00 +:103640009942FCD000203946F0BDF0B51FB40C46BD +:103650000F46811A9F412546861A9D4106D20125B3 +:10366000ED076F40401ABC4152187B41210D1E0DE1 +:103670008D1BAC467D4D8D437ED075056D0D7CD088 +:103680000D05AE46AC431B031B0B794D52429D41C9 +:10369000202366469B1B14D31746F7403818002694 +:1036A0000090744160462F460741E41900989D4000 +:1036B0002818664116D4714671189A4025D5012301 +:1036C00020E093182A466A415200002B00D0521C79 +:1036D0001E23203E9B1B002B61DD3541EE17281871 +:1036E0006641E8D5001876415B1C9A4000D3401C27 +:1036F0004B05F3181524E34010D3002B52D071462C +:103700007118D30FC01802D3491C05B0F0BD0123B6 +:10371000DB079A42F9D140084000F6E70122520542 +:10372000B21801D1002853D00123CC0ADB029943FF +:10373000891E002A08D1020C03D0020C00041039A3 +:1037400002E00246002020390023550B05D1120269 +:103750000823550B01D152010D23550C01D1120143 +:103760001B1DD50C01D192009B1C150D01D15200DF +:103770005B1C2025EE1A01E02CE022E00546F54016 +:1037800015439840CA1AE10769181305C918002A99 +:10379000BBDA032040070818C10FC9070FE07146C4 +:1037A0006118B2E7F10740080843711071444A00FC +:1037B0000CD001235B059A42A7D2C90FC90700208C +:1037C000A3E74905490D26D1002001E00028F4D1E6 +:1037D00000219AE7284D6600002801D0012100E071 +:1037E000002171185F00002A01D0012600E00026A8 +:1037F000BE19224FA94210D8AE420ED8B14208D00D +:1038000001256D05E94206D01946A802414010463F +:103810007BE79C4201D0214677E70020394674E7D8 +:1038200010B50C465C4005D50124E4076340FFF762 +:103830000CFF10BDFFF778FE10BD30B40C465C40A5 +:1038400004D50124E407634030BC6DE630BCFCE6DF +:1038500070B50124E40761400D465D4002D4FFF7D6 +:1038600063FE70BD6340FFF7F0FE70BDFF07000010 +:103870000000F0FF0000F07F0000E0FF0000F87F94 +:1038800030B50346CA02400D1043164D164C0A15BA +:1038900002D02043002A06DBAA1A002A12DDD040FB +:1038A000FF2A0BDC30BD5205520D01D1400040080B +:1038B000AA1A07D4D0404042FF2A01DD002030BDC3 +:1038C0000028FCDD4A00002B01D0012000E0002090 +:1038D000101801225205D042F0D8C817C0436040EA +:1038E00030BD00001E04000000000080F0B58B4CCD +:1038F0000F09254689B0BD437BD01D092646AE433E +:10390000FAD00E465E402740F60F3E43254071D068 +:1039100024012142FBD0FF24AD19A4042D1B0395E3 +:1039200001252D05DB02DB0AC9022B43C90A294305 +:103930001E010901040F130F050121431701880B14 +:10394000820391432D098C46A90B1E438A0395439C +:10395000B30B9A0396433F09BA0B9403A74302960D +:103960002E467E430497B6464E19D7190C4601964B +:10397000544305977E43371B7646BF1B3601B64638 +:10398000BE0B361900967646BC043719009C01D34D +:10399000641C00946400002F01D001263443029E71 +:1039A000049F754366467E430496760034196E0084 +:1039B00034190094029C019E1C196643751BAE4687 +:1039C000069465464519059C05956C435943754613 +:1039D0000891691A0191049E01465143A41B049168 +:1039E000611A009C0791E10605D06109012211438B +:1039F00002E072E06EE06109089D00272C0A2D06A6 +:103A00006918049D7C412A0A2D066918019D6241AE +:103A1000AC0DAD026D185441079A910D92025519E3 +:103A20006141029A644658435443069B059A5A439F +:103A3000121A131B9A0E9B015B187A41010B0005A9 +:103A4000C3185141220A200644195A419A4200D211 +:103A5000491C01204002814203D315230226F6436C +:103A600002E014230326F6432020C51AA940174676 +:103A7000AF40DA400A4320460399D840091473182E +:103A800019055118039A3843D2075140AC4009D068 +:103A90000122944006D30022401C5141002C01D148 +:103AA000400840001E4A934212D301220398920616 +:103AB000904207DB0520400709181A480143C0124D +:103AC000414004E0032040070818C10FC907002047 +:103AD00009B0F0BD0020F107FAE705180C464C418B +:103AE00011486D42A04115D394181A465A410E4808 +:103AF000644290410ED301204A004005824209D31E +:103B00005A00824206D35940C90F084AC90700200B +:103B10001143DDE700200649DAE700000000FF0757 +:103B2000FE070000FFFFFF7F0000E0FF0000F07FC6 +:103B30000000F87F7047FFB504460D4681B0243081 +:103B400000902168880604D51022E0699143216025 +:103B500000E00120A84201DD471B00E00027049897 +:103B6000A1697A191018081AA0612078C00602D439 +:103B70002046C046C046002608E003986268A16857 +:103B8000805D9047206A401C761C20620498864223 +:103B9000F3DB2078C0060AD52046C046C04606E0C2 +:103BA0006268A16830209047206A401C2062384635 +:103BB0007F1E0028F4DC07E000986268A168405D81 +:103BC0009047206A401C206228466D1E0028F3DCC6 +:103BD0002046C046C0462078000602D5022005B027 +:103BE000F0BD0120FBE70000084B70B50D467B449B +:103BF00000F027F804462846FCF70BFD002802D009 +:103C00000020C04370BD204670BD0000F7C9FFFF13 +:103C100001468008081A02091018020A1018020C3E +:103C20001018C008820012185200891A01E0401CC6 +:103C30000A390A29FBD2704701694A1C02610878D7 +:103C4000704700B58FB0029100210591054901939D +:103C500079440391114604906846FFF7BBFA0FB010 +:103C600000BD0000E5FFFFFF754600F025F8AE46F9 +:103C7000050069465346C008C000854618B020B507 +:103C8000FCF79AFC60BC00274908B6460026C0C570 +:103C9000C0C5C0C5C0C5C0C5C0C5C0C5C0C5403D04 +:103CA00049008D46704710B50446C046C0462046C0 +:103CB000FCF743FA10BD000000487047A005002043 +:103CC00022038803A1030D01B503B2017101420271 +:103CD000C701CA038B0029014B026D0075019F00CB +:103CE000210385039C030B01AC03AD016C01390278 +:103CF000BF01B703880022013C026A006A019A00F2 +:103D00001F0000001F0000001D0000000200000056 +:103D1000020000006B046D046F04710474047604E7 +:103D200078047A045B045D045F046104640466043F +:103D300068046A046C046E047004720473047504ED +:103D4000770479045C045E0460046204630465041F +:103D500067046904303132333435363738394142FB +:103D600043444546403058003031323334353637DD +:103D70003839616263646566403078009C3D0000BC +:103D80000000002050000000C4000000EC3D0000D6 +:103D900050000020B0110000E000000000000051C1 +:103DA00000000051000000000000000000000000C2 +:103DB0000000000004102540576057402510040003 +:103DC000F4010000F4010000F4010000F40100001F :103DD000F4010000F4010000F4010000F40100000F -:103DE000F4010000F4010000F4010000F4010000FF -:083DF000F401000000000000D6 +:0C3DE000F4010000F401000000000000ED :0400000500000000F7 :00000001FF diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index c1f0b3cc..998fa0f3 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -19,7 +19,7 @@ #define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes #define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet -#define TIMER_PERIOD 2500 ///< 500 = 1ms@500kHz +#define TIMER_PERIOD 7500 ///< 500 = 1ms@500kHz #define BLE_TX_PERIOD 50 #define BLE_CALIBRATE_LC false @@ -114,11 +114,15 @@ int main(void) { // Initial frequency calibration will tune the frequencies for HCLK, the RX/TX chip clocks, and the LO + // For the LO, calibration for RX channel 11, so turn on AUX, IF, and LO LDOs + // by calling radio rxEnable + radio_rxEnable(); + #if BLE_CALIBRATE_LC optical_enableLCCalibration(); - // Turn on LO, DIV, PA - ANALOG_CFG_REG__10 = 0x68; + // Turn on LO, DIV, PA, and IF + ANALOG_CFG_REG__10 = 0x78; // Turn off polyphase and disable mixer ANALOG_CFG_REG__16 = 0x6; @@ -127,10 +131,6 @@ int main(void) { optical_setLCTarget(250020); #endif - // For the LO, calibration for RX channel 11, so turn on AUX, IF, and LO LDOs - // by calling radio rxEnable - radio_rxEnable(); - // Enable optical SFD interrupt for optical calibration optical_enable(); diff --git a/scm_v3c/ble.c b/scm_v3c/ble.c index 678db04c..4da4dd8f 100644 --- a/scm_v3c/ble.c +++ b/scm_v3c/ble.c @@ -218,7 +218,6 @@ void ble_set_channel(uint8_t channel) { ble_vars.channel = channel; } - void ble_set_name_tx_en(bool name_tx_en) { ble_vars.name_tx_en = name_tx_en; } diff --git a/scm_v3c/optical.c b/scm_v3c/optical.c index 72c9cfd5..7efdd9c1 100644 --- a/scm_v3c/optical.c +++ b/scm_v3c/optical.c @@ -221,8 +221,6 @@ void optical_sfd_isr(){ ++optical_vars.cal_LC_coarse; if (optical_vars.cal_LC_coarse > LC_CAL_COARSE_MAX) { optical_vars.optical_LC_cal_finished = true; - // Turn off divider. - divProgram(480,0,0); printf("coarse: %u, mid: %u, fine: %u\n", optical_vars.LC_coarse, optical_vars.LC_mid, optical_vars.LC_fine); } } From ae36d690baa46d38a32f8efc439bcbbca452b8af Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Mon, 17 Feb 2020 17:07:22 -0800 Subject: [PATCH 08/26] Stop sweeping with 15.4 RX and repeat packet 5 times --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15512 -> 15512 bytes .../applications/ble_tx/Objects/ble_tx.hex | 2 +- scm_v3c/applications/ble_tx/ble_tx.c | 2 +- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15852 -> 15852 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 10 ++++----- .../ble_tx_154_rx/ble_tx_154_rx.c | 20 ++++++++++-------- scm_v3c/ble.c | 2 +- 7 files changed, 19 insertions(+), 17 deletions(-) diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin index 60cc591a2b3ae25433402f3df989d67576061a32..1378d158b355dd5b1cb807427626087908ccf919 100644 GIT binary patch delta 14 VcmbPHIiqre3lpRGW>== Date: Tue, 18 Feb 2020 19:11:49 -0800 Subject: [PATCH 09/26] Add a variable for number of repeats --- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15852 -> 15852 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 2 +- .../ble_tx_154_rx/ble_tx_154_rx.c | 3 ++- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin index a1eae716f954fd557b979d337d6b356a1e395acf..afb65d2a54514adca79a805425a568ca67a03d70 100644 GIT binary patch delta 14 VcmaD;{ib@uB}PWZ&6gP^Z2&nT1~32s delta 14 VcmaD;{ib@uB}PWp&6gP^Z2&nr1~dQw diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex index fa5ea87c..a419ebb0 100644 --- a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex +++ b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex @@ -28,7 +28,7 @@ :1001A0006EFC002415E0754B5A7E197ED87D02F056 :1001B000F6F97248437E027EC17D71A002F0FCFF19 :1001C000002500E06D1C75488542FBDB02F0CDFF89 -:1001D000641C052CE7DB70BD10B586B0044667488B +:1001D000641C012CE7DB70BD10B586B0044667488F :1001E000401C431E7F22811E0090813800F0E7FCF6 :1001F00000F0FBFC61482038C07F162832D100F0A7 :10020000E1FD00282ED000F0E0FD5C49886000F0A0 diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index d563a3d4..85362a59 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -24,6 +24,7 @@ #define BLE_CALIBRATE_LC false #define BLE_SWEEP_FINE false +#define BLE_NUM_REPEAT 1 // Number of times to repeat packet when not sweeping //=========================== variables ======================================= @@ -249,7 +250,7 @@ void cb_timer(void) { ble_transmit(); } #else - for (i = 0; i < 5; ++i) { + for (i = 0; i < BLE_NUM_REPEAT; ++i) { LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); From a831a27978c3106736a82c7437ef4d57aea2c38b Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Tue, 18 Feb 2020 19:24:27 -0800 Subject: [PATCH 10/26] Reduce busy wait time when transmitting from FIFO --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15512 -> 15508 bytes .../applications/ble_tx/Objects/ble_tx.hex | 518 ++++++++--------- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15852 -> 15848 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 522 +++++++++--------- scm_v3c/ble.c | 3 +- 5 files changed, 522 insertions(+), 521 deletions(-) diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin index 1378d158b355dd5b1cb807427626087908ccf919..2cfc86a734dc1d1ada543e132a4a4afd509f4bec 100644 GIT binary patch delta 678 zcmXAlQAkr^6vxlGcezcR-X*z-#O?&!HJ5FO#GJu$x{@$*DSI#k%QumHk@CTZz>=tF z;|OUB@*&G83B63Ex^99I=F6%_iFy$+39k?3rn}xg?GNYse*gc+IdHzwfsujeha=s7 zfT7r8uy#uql>SQY3#a~Kbc+$MmSqG5L_u*R9Ey+-6kb(x){wrlql4O*;Z+m)um?M6 z0v*OnnVNA?93jC{sTETalj6K1H#w28wMF~7w$8S{tn0X@oZ!LfFcmS)9bYue)9sRoaWVIo zwJgw&k|vDPw5^2vHZR_!URw~`nLm$S$}%pZv-VQtW49^?tL`A)pk;RjzL&S$eq_U{ zs+~ARE!8b}SB_W5v3yWW!BE5Qs`*rr*WG){L9ur{lORz+t{(hYJ_U*um1x^Xa@@b delta 682 zcmXAnUr1AN6vxlGcX_wvpSwie2-{ZJuDHx4KCBs-n=2C|&00MKS}%eK_8{a#4?&R; zXQjSe3L+rtOUrcwHM6GyBj)Oyv+hg{)9Fyaswz*>oW>TpPXn`$JGm{rP z@CFT|UAnYYIV5NoXaNsP)tM@0FRh`?<<1zsdpT1wkl0-bG9BaUmuX0V_Baj7-^F_N zZ0ZSNSim{@Y;fXh^|xUIafVj1nvlpVtzt2i80&DGI*hCMh(e}uTq4Q*5T8(=xe=Gt zujUw7620**6=LD6Y$kd{rg&J$pmYhU>+jAOpL4jpR{LccEcCBNQekyIIz8$yIG{PHJ zFPAQ0$roLUWQD=eSuaJi20=Tu3r9N|FalxF=5#S4@V%+}%N`)!rg?V>#?^JV54l-c zxf92!vAhv`)o6JXj~mb5ul>8Mr%HAH8_;h6#}5%$?q+}*4yD;~5rD2$+{7d5n+gx& zn7ZbfFyDSV?i}St%I-C!o9`x)l9FjoEhHTcsUS0}FCz7!C@?YTjUZ{` zKxOlTAButs%j-+j)+Q~Yq*(Q-)`z~7ib0PEO>NiPqy6DL&+q>~Jm-P)t81#u7hD~z z0Qlw~uPF`8OQADcg^wb;$?4n*z2OA16mpHYLehv75?Q})a~p|-0qpL)$cCvL51>MX zxwuGSyzCk?8tX5V32b5sWr0PPKxwF#%f`?4C`Zaf_L$m*&E~*-(}2K;dW9|K9>c@= zJiQQ{xhIWP-@V**7!Y2XZ0B@>|FbU%Y04rL8td70t2OqGgF8T$2 zGcAyJ8Sx}31=;vQt1H-neAvZ81s~JB!bZHJ%@qbPt6Pr1rRv4Fo=|luRJ0o8A0lw& zc>t<-sU8|GK8mNc^lil`prP$4d6HsJ)j<_vAV+FWg=F`s5WrtbtvG}Ibg`lkYe}nk UYr9>!JO|_^enfdqQEz4IKZkrQF#rGn delta 762 zcmXAnZAg<*6vxkb9&=k(+gvXjDSM`r^Q~1Qa9?al8UG{ z4pFuYKNJ{36Cc*AW0On}E6n;*`_h-Pn9!}DS?<}>&Hixi{hj~e+{-=OFQ;Zs1%?;I z-2fkhBeffPXARL~#ljnr-Q;v)p2j(WWQbZL)~F$3h>GlvV)Uq~lnU(btjHdc3)`@e z2um?dG3>TJQN8tNDg-u>K}lev8L&0fOBEx>yKLvTmZ(wtTO zoKMp;!BToe&HC8FvknzvndyC;4)S}pr-6O_4KZM^e}jE)@&NaDkt(>bQg(^o1stQ& zY#Tn6z1iOphpAHQL!zKIiTTv2+lqhaxh{#9D7-L?Q?xth0$!!*94}7E8x}=Sm;AHE zhW!GYrk{)V;A3i864UMAo`HLQ%GY<|GC8EbfmlOMV-LpZmC=VU$(mbK@K`ncn@S%t zd7jLi9?X-K(|t}9$X!8Qx!16n^ri@AwHDF3STY6S(S~q6uaPKuKkS^thGDwr@Zv@Jrz3=`we{y~<`PP(Sm9p{)-C|) zlL%a8et;?-cE7X@fCks?#iO!m{W=uXjO=j^YE3x`*o8@u; Date: Wed, 19 Feb 2020 09:52:30 -0800 Subject: [PATCH 11/26] Turn on IF before LC calibration --- scm_v3c/applications/ble_tx/ble_tx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm_v3c/applications/ble_tx/ble_tx.c b/scm_v3c/applications/ble_tx/ble_tx.c index 1be8324b..21eae0b3 100644 --- a/scm_v3c/applications/ble_tx/ble_tx.c +++ b/scm_v3c/applications/ble_tx/ble_tx.c @@ -85,8 +85,8 @@ int main(void) { #if BLE_CALIBRATE_LC optical_enableLCCalibration(); - // Turn on LO, DIV, PA - ANALOG_CFG_REG__10 = 0x68; + // Turn on LO, DIV, PA, and IF + ANALOG_CFG_REG__10 = 0x78; // Turn off polyphase and disable mixer ANALOG_CFG_REG__16 = 0x6; From 39daf9417bea34ba5d5353ef9754ffefda3aebc5 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Wed, 19 Feb 2020 09:54:41 -0800 Subject: [PATCH 12/26] Remove unnecessary bin and hex files --- .../applications/ble_tx/Objects/ble_tx.bin | Bin 15508 -> 0 bytes .../applications/ble_tx/Objects/ble_tx.hex | 973 ----------------- .../ble_tx_154_rx/Objects/ble_tx_154_rx.bin | Bin 15848 -> 0 bytes .../ble_tx_154_rx/Objects/ble_tx_154_rx.hex | 994 ------------------ 4 files changed, 1967 deletions(-) delete mode 100644 scm_v3c/applications/ble_tx/Objects/ble_tx.bin delete mode 100644 scm_v3c/applications/ble_tx/Objects/ble_tx.hex delete mode 100644 scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.bin delete mode 100644 scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex diff --git a/scm_v3c/applications/ble_tx/Objects/ble_tx.bin b/scm_v3c/applications/ble_tx/Objects/ble_tx.bin deleted file mode 100644 index 2cfc86a734dc1d1ada543e132a4a4afd509f4bec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15508 zcmbt*3w#q*_Wzy9B$=d-q?Je7hBD~`0<_wKV(~f2z;seTpw{1_h^D25mRHkKuqaB) zV=dzTHbvA@&;{L}3Zl!hR{bfJvg%4*{cYOHDs=f7UyH8mZd{d=J~F@Wous9{_Otu{ z2kt%Ro^$S*`#ksDM}0{|sL+xB=U+AQ9!I#6BV_9+Jr4ta8o>g3CIbD<1?&Os9KryC z_6xCnB($(Eet+Icz97q%YkN#yk^Zz?A}^H>yO}N$a`)XMTduRb^}NhXn&Bpafz-$3 zr{x)vt+4!RLbf4TuVQ=ZPu8F4f3Mic^yHn)JHeddD&xJrLVO{UWRYw#$$AyjQ-5Lr z5~L^Z1UVH4uC=Xv3fsko{;pcv*K62cfYk%jh0^-0?L@G)Pi&jmZf&!+>q4QyBv}oI zRT7%rrwj2zy64pJKUCc@5_;_dA-*=f950WP*`Vbu%j?$bte5t8^Ov$cy0>(%^Ve~g z8he&Q+(z2HTDhZ7rK4zzBWd<%5&03vc?7riWb#d>oa6F^pgu$DDHZu zK2yGYKO0)2q6Wb=_5x+Qd!UyMU8J^BuRIgDQR}p~;o#^A_SxU#M{cc@X0XS1tE;tKtl1h$8&dI8PhV{(esDaiOHPbnUt|Rdsb$YgY)>YlZCf(f?+!n=T>5v$m?P zs&sYLo#0=3>7}HRAtb?^`~6>nnfwRj%1bp(zS`;)wWVu>sO)>hXFxdN4#ybg!!%#NdZwQU9IVzQ(v)ceO*=c zTBNURA6?GMqvhY4;m4CdLsB>dwiy7SmZDncpsgUI?N**X4-koMQhultSm!j zJx%{jwaJvi0sjg-Mn+D^b28@H9h9Y*PELv#$o)CdXYk~ue)pkr^Cqjiq8&FT0+ zVM8xQK2YBG@MYs2|EmajOijGQRbz29)==$?aN5)4Bf?3HYQBaDN{vNm0_>2Qym4~t z#+x_VHZq}m@vT27V!f~MZRqh8z6CvGV~3$5(O1|BT#Vtr1KtqB8KHxH&BMd)_zFX9 z%|}S+=aG0n3Hc*&h?^s3#JeIU#1BM_m_NHCJn#o2M#K+A4F1i+6o<#adw;EvdeQzX z%)KdsXfRYBQAnlLZ*3u5LyE=!jAE#KW)vmS|1>C1k5IO!97OuyNP1h!lSn@~l5R*z z@RQh=9>b`85MN`Rcc0zwNo;9yv)%D6VtTy)(P-*4QucU%{GPZLCbT{h*Fr*`NIYV9 zTaQ8#Y>; z6VK9q4;h_SImzJRgo&?%Q zrw#am!9PEm>P9Nv;3pY|Jx26W<&Y6M?i(^7-ih_$D}>L740{q<*oSqy_062$w8z{s zO=g;j|JwcWt%-ZsP}<-ajDi$rMsKp#tGa+yt9xpIj%kahA)ogWAr2#w!D?V>If>rX zmnO6*rM$eYG_mDm>6K`)zJcL!m2@Q3UV{0#y9-W$W)rw#tl|h`5Nrr`1SdicLLS29 z#p?BhoUBhL1^#rhta|<0y4&YTS7F)65#~v^*Ok_;sHhuBmRBubP7~DNFRL!CT~`rh zt*I)HBFn4RY9t7>Saignpd+7}b)>%9Mw-fPM3Jw}F3-&_7X)GY{3x1}U5@`C%#%O> z^u%PSVJWX(tJ!*Mo9ft;ABKgwcksL?thg#VC%Q^4j)uI(Eu!!>=Ke%shaRmW@MYHa zFEm^5xkrIT_zT9dukcgPNyJv65wkpM*&K4*toz8vo-z4Ni~UPNIwk;SH^%tl%=za@mC6BF$*=D~hkc1c(9=l+4dcBkLeb#T_i0a8h@9EzipStv{aGiq?FsuIp3Uh z%AbwzOfcCNByXp>?`ycP(LJu~ZlQzR>o%SxEp9v3pIsz_!JK+!V4DK!8Bo(NQhzhR zV2+&{Ac+4sK(h5MDb6+Bv^@LCMvrN+*WN(xC`wuwEl-_?YeAhgZjFauy!Ho6b3=0J zNNEbYTqw;?-4jmVs*p`_1&!nuWlWy9ShO$pm^RUI^B;8FEW9bky-_LAxQk-k1$6u@ zq~08KbkB`Rd7?Vf3u97qG##^JTz6DQx)|eLr|BS$Yqa(^VqS~zW_hoDWSsj7Md1p~ zLih@&E8-?Pu9=W!z}h|wYmTq5Kp{=!sITzLw#SZ$j^wA<&}aR#9SqioP-nt6Cl>rW_#2hZZg@wR=c% zQDpiKTXO3niI**&NIn~SzQ5GIgD~KeoU707C&>p*i}w@j;xPq{?y21eh#}UVj}cC5 zg(*QovRER#$^z<$5Vc*@PKgNCV$-#R#Di~#ZL4AjpDUygcm z7b1H3PKAV?>Q{wnc_j23z{>%D1$Y5)AK(DslYm2jkM~c}@>Q#9I5PnpYfFq;Wu&{DTQBq}7As6E< zR>V=flA=Z6@iE>arC}6reo-@c))=oy=@`Y6i@Lz0U)@$pODSQTO0jY3_LwSn5O>kS zg(Au!+ONYbx*nL|;H7JU!z-!02JkA4)+80gXjcNx0L|=7?_#nHur2vTNsH-zQ0$|Y z?0kP-axF#HN(>zHxKOB8fF7_ zSi>d)dlJ~3`nrnRwb;aYu#1c;DqQGUFylMw$dAYs{EKq4{zbX`yzdA`>sySH60*Lu zwoa(6|Is?9E5yNgUEW6T39pjw!0w^RYosfCp$#LzSEv&xjbGLvjMdVljm7NyT6JJw z!IqMC3PspxG9nijv*gw`lftbE8aph+X$Wu_f5Zu|!^2lL6zY`O%dG9kV)jua#BFVR z%Mrnu#Gsnw7^Evjna;s18|!c_!>()DiDi8rrhJ^kRi5lehJx* zmA=Bi1Cmv~!Y=?tz|R3206(LAz;l$p+E@4qxcUE?n<^$@6?q%!9b^mt z`&jx-q)iNKIvGnd1~ns@WyNGRNn*`vW*STLv57RVukfojlD#^8T#&TLOY_j~0o5Rr z$#FqJ_Q4);XT0PEk0Nq1)&R1BY_=OO`||7>JJYh={Yg(yQo}E*gY6*)zL>-slQo@h zA+^IgBZC!p5&DfoNPDa|AziGcX^mW_`^et8t&8U}ucb1Xy~dBkR%s`Bc;1H#>CB+q z-QVJ-g8OrgtHNhYl*eQBu>_s6;OfwNp9=``H+gFK167BTQ|xV=PU&*KI7{X7z9n}- z<5D?_{r4!jf^W$UX| zF-ZzTUT ztp8NQ^FOK~Zj^@ek&7Bgn<|_~nf@A4g)rc!fPH`;1JWJ~0@61B9B=^eJ-|W0j{s>; z1psLa_X4Vb??y~Ya*&X>s4ZA&Bfo^*zX`t?_*w9KVZsUSMY1yLE5BAQ|z0; za=Y=LNOwWzAA?jk#r_x4QQhV)OB)oX;j`s~F*U9|>> z57|p9tJVp1rK>8|38i;bR;{jxF%rykii;N%3;BX5l$Mv*R;*hmAa_|+oq#i&+*|>d z1?wvWWX@hpzdkHK{oj(gAT%MIMBtYpjnD+C zj#XcI4npcLo|DT|;ULN}dq5Qq0WKK0-oeAudsH=Q@U{ri;7m0N%W$uwhI0oP#8U^n zh$kbb6*)5j{|Y#9pd3{DKn3EIf#rzD4U{6zz}f1%SQXz@XuLw>#!X@;hu8}YFZFdjf@%;VD5d5^Eil=oK0Nsq6vwr|eZ zA}!M0Q?#pkbLJ9Vt8~}g))lGpu4=Q?x`O)5p-i2aVq%T!kw49p#;hBaJ5%nhPGizc zA3jW|Xx{rSWm}|Mh@} zRDw3vVQvyZm;DSoLCj$+*}1w2Vs4yMx;{IXnIJl)2U(}|Ho^pBZoE_aL|S>n72emS zD#X5a;>_xr=jp8GGLodCqOKK5a%VN0(JU2ectgIalF8^cCP`9J!}KJt3z8n*LmIB4 zl9X%ANCx+6jr&cIab|QCK!%03nK5k~w9OdN_FG8jY0{TMu2K4~rYRaP5M-U1U6W$v z${JNJ$B3pPQp``lzRT=wnAKU$;ESmvylAP$X}S&tb5Fof|Dp60U_e+DhlyNu}l28VWy z#A+}&ssY?ecF-?CNrRm&=CfXJsY0@8lPm?aA z7;W(09-47E79kHLO9O9D^^po};Kn*`08Pfci zvv@Z_$8fy7IeW^a4F-(O`OeDM=TE6j;BsvfyssklYAluQ{Vh_zjittVN%j@qH}0Z*g)br|Mq;6Nsl)ryZ+n`mq;o*)9qAt!e40%#e=Gogin7FP3j zFRt44o(HrqUIN+mG29+4H&!yIfSUxbpq=qhTL0EKbmM64TOw zI!*{``{93b&q=iV1bT09P4OQ!8?zX=P&|>42GY{N=p;eVNiQi|y?V4tL0cqzLu4rI zS0mw9E=0mygoL(TP{X!9l9?)};4MWYyg?k$R6A-4E43!+LkM}JW^FL z&vrTSe^mKcWof1Dn*CMqaU-_x*t0U&tg;b%R*F>Vh&{VPc2?f{Eqhj?*)ux(;)1%$ zy%w(W9Y;wl^^>6l*(vKlFCKCc(bkdDag+g%QanSf zlk}3~(Ug0rDdn}JmK<`n+@2vbdk99ZJwnG*meNqrP|Y|@`XQUa`zuP{EAZjww|nnzma@Ni9%UQ5%{ zWSZtBMoSYikAruImGmx-kSUlC^zMMZtGf7BfW99P5VDG0H%d#g*Dn>Wr8~xYGqJY$ z9Ps7oNsyxtUMb^a9WGz3qtQ3ral+T&U}}Dc*FV{K{lhp;)ZFM`)=7@|JeTh#NX&=C z3`o${fA|QjRn{S4oPVr;jQ`Kj)UdI^(2ywR@qW?qA-?dl!5oL_DH7T-cvHqKd9(ej z;x1XGVeXQ2c75(YdS66- zawl;LfsRr6b))kC3g7nJ$0tX^U88azqBnJ$BJi*;YWy$g5~1t%fPYkeX%xQC<5|Ne zM#6_j<$4%26HBQFMp1WBDo3dgjiTNU>dB*#@cpA`_j-0{I=76XZ2>K+^Nvx}yD3%E zxq1}!4p6DivQe~J+MB4!)d8R4T1(be7y0Junpr;ybq^Vv@peX7<1y|vw31L>gk-Fm zOW(%e)#p%DCN!k?k8aJaqgp_}Ct8AOqrRr!L%*Lfib9ST(|$z>QUm)(BPS9*Nh_8AaooZ>mLW|moZvCXkQZW5IT;I^V6}{b%u_%$vMC89fS4z)d8v}5K1w|2uS9ugOcJgEFl zJW9l))E<;tgBC^PwX(dgm1Szq>0Z1qO_`cuI!Hp*{o`S~@SX>@VmbXK*NBANj1an> zT2|5VN6gWe`zL7gtOs-Rrr3;oCI-*P;G7tIBL-iO!Nge4yyh{NOp4(rfL{{BUjhEx z82&Qw!!i6t;4Lw{4fvHY{3!4jWB9Lt=f&{Dzz@XmgTOmu_!GcCj^U33e;|hM2fjXr zKLY%P7~Trp6~i9}zB-2Q2Hq9Jn}O%X@c#rpT%Mi4>59b32GssuYBfTyT(Gupr*@#m zSGX1MBp{X0Lt?Ws4-(Hng5K%#wZ6hT0hKMj!g>mk-r!Lxe1+>hO^DZl)&yEj(W2$n z<-Wpdq)#GEwQ#`$R^{PX_*P;vox_J65qt?w_!dzMJJ z4rd?>vDVO?4d1sJKFfJ+M;^hgmKrYWSHrjT)3QXu_o(zlClX$Qvxq~0%K@JREbFHy zI}zMc(371=xMpY`w1`7@A)ce1szk8=pQ#MOpPAQxxiSE#;GE)ed{qtS;|o*p1-v(R z@De63;Q;B)|1@m{^ufnrvYiq)NiVlaI8Bei%=u0)abyN3&R>12F~c6rmdCn2H}+b{ zG<_EvlSzdPGfmgUBL8^cJm6RgWBg>`#pz^f@QlYUPC1P?<#@#w{+&7$CPS41U9qDt z1*YQ_iW+`ajizY3Z*%we4uzdV)^NBD{=?Oka_LwT~Gcukg4)=H|w(PYxI zrz}Nx&Sry&h!dx0Vh5cyLmxC4iD{H0P6ehrCCQU~h zgzSU9_Wv{!($~gK&FR@{Ob*1=d+a)&XfICRYK;3dzahMjpfl}s z=k(~zJKae=By*p9Lr^EjN!PqXG9-SdJHLnW?HZry*)3lmd=+V?=l4uUYO!mphVRsH zNyF!AIL*WK#A*1e&;og)$!qvd4X4_fp1B(CN+sQlT7v1u~QzmuW*^XL@O@?t3byX+fHAU)A<%^if13J;OV{0zcEHu0 zvdoo`FfpO?hQFpgE8QB{tlyk~UBqRJ0=fFb@dpE#jW$8^RuNmJqioA#a*y5B* zXOo;$0j$;bQdg@O=z9CyN_}y{>8?&or}5Oeee-XCVPTMu1WDHADYrvEQj?IH^h(Nu z3l6*E-+R_=e(yQAA;4s>(f`$bEMUd{H`KnzJs2RuEMTFwiOfX z_7}!#QA|DNDz@F_awMcD{4DLTeE0mHN%sWS>(?Y~3MA;Cl@Cj4y0o~B^NZb&xP;8* z^4_#DJ>%st+6t}duXB0j%VeYL;}p_D+ibaO+&eXLjjdJ8KE-4T!3S(p<&|hP^kJab zo}MXOw>OPUD?NLK>u=+!^rxqYZG&rxy;a0Ww9nOlWgDCIk!bB9(~1LBPmiU;#`bvZ zbbm%)ZM3>CXzhRg9A0ASkJ^|n;=D1yWWHtYW%o!sV9)t3HeMHC;|XV-#RgewX=jnl zo8t6c$t(}ZbQLoRnK#8VUCB(^gj0aK$X@%{1klM6yO902R3?}c%n0h`Z^W@ui}+^h z2gWMfCHhVqnfme>9eSI$oj|`>f;Dof?dZ8L(TluPW38E8MB-7BCHhwPlijrEi17G1 zkKU6osSB%EkT}2YB97K`&iTuuz3D*zIcjX*?#+w^2i;cmX5xFlcEiS_H$OwKrpQmR zF3~FAb#9-V2{`0C&e2}2J7>kXzg5(qVzNFqE)&&oJl^W4;d;D_&O>kCDsnMS-mx`* z&O0{vXS@%DWT}`SFBRE$)bO&1ubt)#0jfqAaY9dXLz@Yq=eK>E^KhQ|CMzabrE&Ae z%`=Z>1A;`R8hQ_XTvIQqrDbzhu%9mzC-egkRa(;6!B{awe6f|F=fj;j zak6;ca-Ebd)&#N`hkGEPW<8VgOD;D}_aKvltpNLQw9kdLR$WS*B_iJO^19@-!ubJN}J-3i8ZbQ$_VyA^K zqVp+9I*XBS@SHhEhm2~BV9ctj8XK>4-1cqu6{?yi(s(2*kN6#xO$P3iH6vKnEIGU+ z$OuolnX`py7>$#;mIGCHrdVx!>i$xpzQe%2BVbj5k2Hx7>RPBj*040{O>M9XWn9Zo z-Cy-mIrFKgoFPbM@`R|2P*x!0FIAjh|H+7#ZImO%atmcn89PbmSAUA;gU4flmmp|1 zO&CC3__@Be1o^JnBs3X+pXiha!wEz5T_M&v$=8l|ahN9qovO;n4LqO9nyfa~j1X_N zb?{qAGX8L62dozU)@GI&UW%`fsVcIwr95s6NZZeku+7AwZ`OO52R6>uH7CiOpT3fQ zx!-bxK<_7L!1eIAviqKu^`uI^QSRV7$adLwL}(if?;G?UBX~CZJX)pW^>61weG265!%G``7JGh}-<;eP2V> zId$sPsdH;Nb!rJoAbbZ${-1wupzK5~A@?Knjgj*Y;2O|YAl!*Se~$ysK)3oA%WlY zYXZ*=Yo1er|5P-`NWe2dh^JjEMN1PT)*ttF-0SA+&6f`J7%pXdHE(NPH(bwMs_$jq zW?sK?vc_*~nC2+?Y8 zyN__v3R$pVg zZiCdg$+hX1`3akTQP6lzUjy?1yGzr;d2f;%a~m6ocOjtIz&0=&ehDpJQ061e2HpxW zJR5i|L~Jh9aN_nYHg~Qj@C^F51@%5UL~NqW)aZ_wJD60#WvcPy?Xz8vlC%d3A?E>w z4a^x}14lv&WfHIr6-Htva1&(QGt2~*_s<947NrRBMrEE=xq^iakH5=cZ{Q-+v;seh4cuEj2qz_3DW8uT+c&dQw)wEp+b`3T{QYfILyTT@k6 zSG9HpU%i&ks1N@)Vdyqrf^oH~j<2mKtEgIEQBL#ADl^LYjPmfmOEb#D|6?dSajmVY zt14Mtbq8c!dg-O)c9xLS3?WSjF{Z2^|4{4~;4d#xYxmSvuc$3q!&j}Xt5{K6Rkwl4 z=u`+1i$s1wLAZ_>Q(>5G4OMttO%YpDbg^_A9!D_mY%QBz;BwydgR9jXe;M?POxy~eY;qOO8ciqvoaapTOJM2N%X zlnrjDO!Am^hHw1F+)M(=3Q;kp<05TO=qG5yKc)#kQTG0yD0}Zu(6;{st??&l7k;AN zCw_vqr~k+Lc}Ho4Xl0#Cm#;5SZQMu1Py4@#MmoY1*mPnFhlMty&fuZ8P6PX7fdxCS zm|-0jrl;%D8fg0OibbLn4){07Vis#-`j1IqX zuG(qlcDwB(nGL)c`bhrJWhk9!`yZLlW@@5sj+!`IQw^2Q@TXnP9>SmWOymtUgqLgL z_-4RPvDqCZwQab0gJlB~xCeFpNfsJBdGA1uC+}^@Asae%ow1(0F5p50|0D3m2+r`G z>}xIq?71f|(B5){1nv(-dr80>ibC8HG9lg-G9rE;q{mF$9WnraFr-KPP)O(9!cVig zbO!hDWYQp5f9o=MrtyMKS9wGxm1eKGm2i!Tao%TSUF9=lD6!tBL3w(VvOV!2(g#P= zcO^cF^pm6M#>5yeiPZEMM(u;BjkRw&yWbVt+U#U|qFaTOXz!!p)M=!w(cb7iQLRj% zJ`~kT0T0gRnz13yKKU%|SA!&gDywj^ef(M4-v)_*W>8_GJ?bp+SNj=^2ZO|CZ`N6V>KlYFhjn{mTG@v+ zyR}$5jeAV3GbE;kc(2w8YRoaX2_J zSP|?9nF!ekmlr8F5OT61h2(luNLh9L+Pd53iC1F@%H-#Xx7C%@uBfORO_o!Asa;nQ&RSDd9!8c|tyM{2XpPelZ;Xa~Zqks3Y71#Dw-8ynE~7jP>le?@oF7Ir zGs^KFgn1$efUXD+H7w=TYt=Qt+^*R6tRd=qAQ*s|HAsM+_DPhI13nin&H;ZWHA zg{dF9idE`AK@EF#QMNNOQ^#boJ~q?T&H4ZAGHg_We^IplcUA1q3heK3a-4c|)C)|N zrb%zf=4>|L8|(sPY&-OHCcfrocxcdJ=TAaM9sh=^Da$+bR4)tv2c#J_ens}=I$*iw zk`b*LUeFvvz7`|H;O2NnEz{qwM}6a^6e$OmG~4s6+?Y)^@*ck7DW~>>)P}>Z>e;yx z8@O+GA@(F zxryagQ|5PP?a~($yJC!%1qs`!?0XyUZE{ZN-o$s3dz|{Sq}6G~`m>9qGMH1Z4BjP! zdIr>#i`3r_GMHnh1_|On50VURYodKk57lQs+2ArRc3T_C?fLPAVSVacTr0j=&8=}6 z7O(wDZEj2`8Pz7Q+W~Fvc1}8di%d2~7GH#^f<`;C_6fTP7-Xs^R zxeFt?3+VVMq&_8N^b|z6Twxh0c@eI;s*E|2TxVEDiV(@YUX?*?*Q)KW$GjH!tI=!L z(Q)p{6Zk7s3*pI|DGM9vxMl)zgXWIeSaUpixiV=cM?HC8w?B47uq8aj2EG`WV`Bh6 z8<^rsg$*I;4gSYST4WB~2_Gc94$i>p#7rgrEmrgjbB}YNcVvZ3lC_oTSku-y^8+Q;9fUzX$-L(5ev)v|xOhJ?FCLfM41b3Bd=Vw zU(}u*Ajf54u|2!QdM`QVYA!6dl1xMQ0rFp?)E88$IrFYQl1}{PR&(Z1UqWjd+BVSs z`y*N@RwC(w&4v~#MoXCi3kUerLoUNpO3-|PPkqY8=TyQUGF|wMJT7-`#R9b6V=h6p z6(0+v~W)}MpbBFDSQ*2Uyt^$7Njv|_8QuWUsh&GgQMZ_$aCw4tR+$tr2j zl2T%Lx@}3VI?FB@I6%zE*-vbd_7f&IIgMz)yJSHfagUL$wEjYq{{Y#d(!$@rQKix^ ze5P*}zRv?+j(TzzLR#q#?5Um_Q1}_yB=CE{%K?82cmZ%9;2_|WfWv@~4@^_bRVzx+ zKTNF~ylg#J^?DU!D?=MN>PVKsXW;Duv1@$9c59e+oN~=AWqBTSqwh9+E3s>Rw$vhB zVdc{N_{!!yE|Rxc7RKZi=PyK_A(DqZ=9s+s`7OvZNAmLJ&M|pXemC-Ht#_4BEk%q| zF)~h_E@R~m;><5B6rhJ-y&kjZ24K9+AYKO?UPp^C6LQpjkBp;or+X=Y-P%KIR|@Z$eDEIf%lu1pHS&e zOA>7bN$w;mp^^toQE6?WH9|`UWKxS*D|XyT?jmy%(nW;k#^swU__yE&(0N739LyED$bfk>jzLi8PjpenV%2>o zjhJudsf2K3Kuf+N{>G1yZfEy1fj8lg6H-!Mrfv#rYwJCAd|hqTiWL>L73C4%-w3|v z!G}{4V82r_3$Vi~HW}EHz~(m8Rn)G<=FWxPWmr&Np=-gcABZDA!qc%_%amF>Z&u$$i2tr`WK2Xm;!A%ARMz2=L@-cuF&rHS*)t zG-+os`@U6d*jKP6q=P~MHkyp`MMW&Rx!ovptNi-TIAYiNIE+7Hhu7gUR5s>mA&CY)sjBo1+Z7uCfzl{Vt|_g3VEmlZ^6lspnmm z>`?G&cr{;xw{xW@?;n6;r5DJWcZf-=q2Ep1e~uAF!9^1Jb=^YpPB9lN<_`K_8!s5nRM+`0s)w zAs(y9J4o*!TMchT(r+SdWLV?LNSe_psR=AAB(U)!Yf{pZSz3;brDZ*N-?WpA)hQGF zq*Yp$jdu4bI*Ck;^7E1h_J}*Tfs?QXko9DXRe#ynXV+Mn*6q&Edi|mjd{G(d z2-r|#JgZMoWxkEn4)d&3R@g;o9fy#1nHM2lq^9W?IgIy`y#;NH3z*lEn6y6qCqkRJ zlRP}{<3c(!XzuRs~DTK8pS47(Pww#d`gd2Gm@QKa90R_>_*H)6_pH zgcA2b(=gV65{#;8{1{EO_#!3S0M6TSJ~x7ws=Qy~tK$6^wGH!{z*`dGrTDxtycabN z^F|}TAi_)WDXA-eI?XWS)v3dq4Wqo1*PLM zzdUU`l08~}2G)Nn!Su5dqQ*!#AG#=kv@861==8Uc!Uq9A2kZy@6p;3qACR{Bmwu4iyo^);;3*Wh_FL^{4{Z#oi(lOW<{ z9(|E8k8VxOk-mg2KQVM3@hdo$j`oub>T_o=W^4zAX7K>=6t1!IS>N@QTaP&dy(E1S zI4q+a2GtwbPi8HiF4?5NLdxDD0w0NZM`RdAWqhj2_z*HCLq^gV8ERclqi;mcr;u~| z59D0bz_+!Xt6sNAam7u?<8`R5RoO|kz0cUU$(L!f&RlWHSRBhNQPt>r{uZ-FZ&^Pkwk zX#I-qGqnwTpdEGwPm}bQU=tXY;Abz|1>Y~m6l1yxXE^F9{7prU`Fvf)x;lP&ZS@*H zyCGvSUstWdk;C`m%BppIUCFA7b$rR~l~t=NA{jBJxkW__iufE};7iKOYb(~R<59Y_ zstz|1d{!2ZON9Cg9)&X&)7nS)XZ|1gXZ;`fFaJOCU-57AtBqAm8%vDbMbOX0$Ep_| z>)`p0^azXAe-5o5KKr5lM%TQNF%+JcucPON2gCD{;-3$yvrJv{E{?Y_@0-X!7vZIN zPlWg9Apz?avW(D- za1y~#hBQJmxH?yT<2negzq(GADf~g`F=tTW4*@P1yuoIGr}wC$SK+O=fu!jxapy*1 zDeiTYVAddmc>16l@l=#FqhuQ3-vB2MmV;^?tU#PNxE%3>!4kx&I9q)WtKxeyjaR6- zQB&Bd0rmo85PLz>VukE+5u7n8d@LjlVDB6Ucz%G^Iej>QSQ%J`6D1`$IM9XFwSV9Z zbp`%*fZ_iL3H{iyzK)i8PHmZ^KWLfbYRfzW>a%E>XR*s~E`1qo^D^4zWwg!9k+ykB zZJWo@HniS9Lbeiobsz@uuHh+&pBOGg{L=8>5x+3-55&(wQ>yWSh{lf$+y&~v0qvAW zWu4n(qjDaESD*yn7@}XX4>ASK0cae+2_)Usnxrjh+r*oh?FDe^>REw56Ih@y>#_6-m;rYLnQug8IyXG>wpGWcBqZpKMHK z){QBhCiPV(Gs(tJAg{0b67dtrBklB@PznBWpb70*Jb*I~crb+nn^aF`-asS25!!8m zuH6cakE8!@06e4+w6O+rlkl31XV^(XCKH#DrI{pTMcKt0GP0OSf?a%&wTtf{OwwmX z+r`hsl{a4DeqF3W?CBu(^zM1Cu4*ndUd+$$UJ);KRkNurVxEdO<`^rP)E<4jDCRfL zjCVW0=`y%T8x!58%#Lxi1A@llVhP z)6_hlpS7oTPl@Q2K1MIwsHA*SWSE3~m&x5YyQ`W(jY*?pvJUw*_FKCziO7l{ zBP({4pK4`NxsBla{ueT-yYwxhM$Ns;Pgj8>T+k ztWJzubE#h;B)2GTKjps`XB5#0=|x|tYZyKI3n>9`GzrmWw#h=~oZP}Ngz*pqEoUzJ z0#d?v8R7d44(%F>e8JF|FSs!J1x|dyc~!@6fAj@^(6xyFQ1jCLT1fg^MABc!NIEwv ziMGWjD)+}flB7v3LR);G=F)KS*17VlB$7><^d3zI z`<|v^JEB_o-TidM3FBLECPw|n@alKbD^+aItGt_4-Y{Mj;bktl=x&!chx(FBA*CgPOOT?$x)O-^bUWqUuw~cuYy3M@Y;OM#_j&Kxb`UBh z7g9#>G)Q3}g;o9Ci>r2n>jAaKOTb$n!L4Dvv69(&+$6Yp^~A^APHZGK!#2fFQf>a7 z&vXg+950gJ5s^u9h< z3YqrjGv*F@N28TK$Njg)t8MKBWW72SGG0w9PIDCEWdWbW83zOSxPp^ zG!1B`&|nsMN(U5Z+GrLVX&R7@mhDG$>Rr@iX%fzf?k=%p&v9>ezu``DwdR;w4J8K2 zlG|9B?lK4(iJr^6rVxA&=Y=N~d_~1IUOVs?Rh;$a0zazajMvnv1P`k?@p7$=I*q7l z6|@?W#RV7~iZhMS-FO#8yxZk%t0vo=tEe|LUD+nvaznxALUF0lwu!JeZ-+MVgi(So z4=cfkLrU=eP%gZ+ksFOWM(=|fa2q!`dXKSQ<|^0Yq}|Tx5)BepS*PM8k$62CvIn;d z!~GqW_T{oAn^aZIvs_NRpHx0pSyE}ac7GLo+>qr5_N){(t8~l_KeQHD8Ht1ZyZ6HrM&A>ssa#4f5jAd?)iCYrK6?5_(hb;c&%r6ZX|YY3 zzn=tdh1WhM^V?oC?tZpohLI^`>O@}Sy^m)x23cr->+mJnokvL|^~>QH$u4O?FB*0b z!P1%7d6YpOrMQM!JLx0G!zt%*bK+}9<1)$Fa%-x@>>(Jr)({;}>GbVfHDfbsn?)OR zX@(Cpd6Z@ltr1!hXk@j~)}?C}C(@e*oS2Rur5VJ82+ge8@-EIG#=shR@}eW@X3?mo z4M=NjF0NVBs%d(fOw$IDQPYHciuGB+N_r*$WL!9>jM9vggldJ<&ohgZsYSewIBYish%w4LxY+L)R@;`L7kUjHz*6E!#4 zn02BpI@{q{1djROm<0~n`VSw0wMsw4PwKbE(Y=c*@eT*7@HI!*H zK1BjMh8CsHmbO^W%Fg0dD&{QS6oD-fSQCK)PM0w!o^lrdM#Y@P+6VzRoe_HDk*E7InMsH6(2YkVHrv6if@&i52(T39a$^bG4;@OFk@ zfJG*w)-OrUkTn!WzsNQ=4`Vtv_`Pg&Z%U{R$0| zeEY|g9xI9VtL&;&`;{A0c8!%ozmoJEzdmDzALDNsJ$W<;cE`9qUHYy#ophrxu2nFP zN6Hv$5XX7PBQ;@97xsm}V`QNQq4Vf??*vf4j?i*I`bJD1uumJ~+%b3(dLcCyT z>w#4~BrFsRpc)n#ppgMuyP&lS<7C00>hhtg%k<3CeVprL;`CJGK@zAQmnR8iA0T5dt?*%PQFZj5+%9z$A5^^v+m2O{`>;Pnyw5#TRG@HXI%2>vke)e(F*@a_oS0z4~%{|E39eRcw;D-tK^@b&jl zs}XqRg1KWmwF7t$y$$drAmz}4V~acw9M6D*-su}^J$ZKk%3D2o4HP21-X&Lf^6Fj9 zh}VJE3|dY8!sX`Wp1f+LPa;jFager3u7tF^A3-=RAxX4E*YS@go2wDdZH5wF2z~I zA;9H;PXd+>(371IZYk)=PAFJ2JP%TY;X4t}RZmqy*#BQC55b?AH*mQ;2q@#6;&Rlg z1anZsG}M51{5FG#$xApudh(AtahMFd$W75o?IKRoBQR~g-A!z1{>k%K-=a^o z`ZJ{QjxY6naronfZZ^V`1RiFFrkh3iiNFnj<0*{fCjc)>A=CY5TvlP)Y4t@u&SjM0 zAQ`UY>53hGDKHbSP?X@aN;pN^{VwM~-*C`AZ0?|Q?z7Q7F5M5?i?CNCanEU8c+YzX z-ftj&*nG@zj5}fh9Y4OmJyyaVfagnj=_9;~Aogj#4BR1?RvxJ2{U25GxC?F0(~=aQ zU2^0m+S&J+sS3+qF%vI6rn;v|L%}+Q*bP1g`@{2-&Ku4X!JFTzV5dw=%~X(n!k=$ozuLm}83`pZI?fxshpFot8m zVXmYyY|Tb3dnzvfjybG97IEy%H0+?$XKDR9JuzMx_t3Iii(QZ#?B*M=AJS`2d9v_A zWg6pS)8c2M4Fc97Pse|l2nA>$P~?;36r_$-}QWB=t?R|3A}qz@?S@BX8Nb^ z8XFi7-sSnZPUB>5+F;L4v=`ghXzkJyAB#8JWLlK(RXy(ip_MCzoyI{=R^`}{^2s@p z`gep65j4h~&dgqoX{R&3m!$2JZuD!UDDm2NNvder>CEY+`BpWb>D?{e;C~fqruQwT zGpWe2O~rSrxTxXvt~DmUrhi8- z7+i)=>#4Rq{r4*3W_8(5%y@^jHroYa)` zYe$CKO1d5<<12l&AS4}g6j|9ClrNsihu zzsUKBgHKy7?M)unJ5dUvt_mV*Hu@RKHgG zP8ct?3U4NTq_47EqV2Mf=`WwrptlW{6X=&Xe~naPIePAE^rAtmG1tt=C(+PkskY7e zWDo5*!ash_rFF$j>BcJNC-!f?KPh>@czk(ouXR+2T8%+7QeCYtohRaIUJji5ZY5UkdQx`i!>@rOgQy3$| z#a$AoWo+U^ra5Y>rbWy$-X|T5N)hkXJShG?s!j8dc!Tk!sNI?;MfRafrOhJu@bl7* ziSH#wOUy&XqW0m<;#JA(rQ^w0GS5q|L|vIk9$GIQ@Q5G18NN)?e#i>n|}H9wAdROX9~LgBDrgiYHm=z2-2U|r}Sndoy^!j$|6oC&>5s-|_9&g<0oQF~~#;BWNA&IE_R z`7h2G!W-#Mh5uSVa87H9mgYI)w&5}63rGv(*6>@p;O1c%VSl6k2J;L*R)c9tZ`Y` zn_6$>OS#s&o!|6PKGUf%pUzKtviUF%Uz#i7FIDW{exS$8Hku{1j)YBU&< zSfkm(nh>JRmQKS~l7K%P*#WDCzqOfdf|ugSW2*A4Y>5H41*HA{BWw$?XLP< z8m^98&oyv&a7(#m+-+P5SI#ZxD!G;1YHls(;cB^cTs?O?w}HEbyOncurCb?T!L8t` zxa^#nvo62l%Byl`JDlR2xss5*m|Ucll$MoOEElpHNb7Z|5Uy<@qSp{UM;bVPBp%ig fY5W#Of|?kKICF;ZOZP8@3^PZ*Wyrr3XxaY-gxnGY diff --git a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex b/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex deleted file mode 100644 index eb7adbc9..00000000 --- a/scm_v3c/applications/ble_tx_154_rx/Objects/ble_tx_154_rx.hex +++ /dev/null @@ -1,994 +0,0 @@ -:020000040000FA -:1000000000120020BD0400000000000000000000FD -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:10004000C7040000170500008F050000DB04000056 -:100050000000000000000000EF04000003050000A5 -:10006000670500007B05000000000000A3050000FC -:100070002B0500003F0500005305000000000000B4 -:1000800000F002F800F050F80CA030C8083824182E -:100090002D18A246671EAB4654465D46AC4201D1C0 -:1000A00000F042F87E460F3E0FCCB64601263342A2 -:1000B00000D0FB1AA246AB4633431847BC3C0000B5 -:1000C000DC3C0000103A02D378C878C1FAD8520755 -:1000D00001D330C830C101D504680C6070470000FE -:1000E0000023002400250026103A01D378C1FBD854 -:1000F000520700D330C100D50B60704710B564299A -:1001000002D103F09BF810BD752902D103F096F8D7 -:1001100010BD782902D103F0C7F810BD002010BD32 -:100120001FB51FBD10B510BD03F09CFD1146FFF7B4 -:10013000F7FF00F0A4F803F0B4FD03B4FFF7F2FFFB -:1001400003BC00F070FA000070B505460C46164678 -:1001500002E00FCC0FC5103E102EFAD2082E02D3AB -:1001600003CC03C5083E042E07D301CC01C5361FBE -:1001700003E021782970641C6D1C761EF9D270BDD5 -:1001800070B501217D48C1700146897E481C0A2155 -:1001900003F021F979488176807E00281BD102F096 -:1001A0006EFC002415E0754B5A7E197ED87D02F056 -:1001B000F6F97248437E027EC17D71A002F0FAFF1B -:1001C000002500E06D1C75488542FBDB02F0CDFF89 -:1001D000641C012CE7DB70BD10B586B0044667488F -:1001E000401C431E7F22811E0090813800F0E7FCF6 -:1001F00000F0FBFC61482038C07F162832D100F0A7 -:10020000E1FD00282ED000F0E0FD5C49886000F0A0 -:10021000E0FD5A49C8600846807D497D574A127DF5 -:10022000564B803BDB780193029203910490534834 -:10023000803880780090514880384378027801797E -:1002400057A002F0B7FF4D48803802F0CBFE0120E6 -:1002500002F0C4FE002149482038C1777F21603870 -:1002600003F0ADF800F091FC00F09EFC0021434843 -:10027000017106B010BD012240490A7170479C21EE -:100280003E48803803F09BF850A002F093FF02F044 -:1002900044FA02F0B0FE514800F021FC504800F052 -:1002A00021FC504801F053F800F087FD01F066F89A -:1002B0004DA002F07FFF52A002F07CFF5848816BF6 -:1002C000002001F006F904465548C06BA04203D156 -:1002D00054A002F06FFF04E055A002F06BFF00BFD6 -:1002E000FEE763A002F066FF00F04FFC00F0E9F9C2 -:1002F00000BF00F0CEF90028FBD065A002F05AFF45 -:1003000000221146FF20E13001F0EEFE00F04CFD2E -:1003100017211A4801750A2141751221817517218B -:10032000C1750B2101761721417626E01348837DA4 -:10033000427D017D5AA002F03DFF00BF0F480079C9 -:100340000028FBD100F051FC0C4B9A7D597D187DA3 -:1003500002F025F900F019FC00F026FC01F00AF883 -:1003600055494518284600F0FDFF00210348C1709B -:1003700000BF0248C0780028FBD0D7E7D00000209B -:100380005472616E736D697474696E67206F6E204C -:1003900025752025752025750A00000088130000AA -:1003A000706B74207265636569766564206F6E207A -:1003B000636825642025642564256425642E2564EE -:1003C0002E25642E25640D0A00000000496E697414 -:1003D00069616C697A696E672E2E2E0077020000C3 -:1003E000D9010000810100000D0A2D2D2D2D2D2D8C -:1003F0002D2D2D2D2D2D2D2D2D2D2D2D2D0D0A009D -:1004000056616C69646174696E672070726F67729F -:10041000616D20696E746567726974792E2E2E0085 -:10042000C0FF0000435243204F4B0D0A0000000064 -:100430000D0A50726F6772616D6D696E672045724B -:10044000726F72202D2043524320444F4553204E5B -:100450004F54204D41544348202D2048616C74690D -:100460006E6720457865637574696F6E0D0A0000CC -:1004700043616C6962726174696E6720667265714E -:1004800075656E636965732E2E2E0D0A00000000DF -:1004900043616C20636F6D706C6574650D0A0000BC -:1004A000526563656976696E67206F6E20257520D9 -:1004B00025752025750A00004C1D00004149424861 -:1004C00008604248004701B5012080F3108800F021 -:1004D0001BFF002080F3108801BD01B5012080F3CF -:1004E000108800F099FE002080F3108801BD01B54E -:1004F000012080F3108800F099FD002080F310881F -:1005000001BD01B5012080F3108800F040FF0020FC -:1005100080F3108801BD01B5012080F3108800F040 -:100520008FFE002080F3108801BD01B5012080F30B -:10053000108800F08AFE002080F3108801BD01B50C -:10054000012080F3108800F085FE002080F31088E1 -:1005500001BD01B5012080F3108800F080FE00206D -:1005600080F3108801BD01B5012080F3108800F0F0 -:10057000F9FD002080F3108801BD01B5012080F352 -:10058000108800F0A6FD002080F3108801BD01B5A1 -:10059000012080F3108800F099F8002080F3108883 -:1005A00001BD01B5012080F3108800F090F8002013 -:1005B00080F3108801BD000005480649064A074B34 -:1005C0007047000000E100E0000000008100000032 -:1005D0000006002000120020000A0020000A00206F -:1005E000512109060870704710B503460C4618469D -:1005F000FFF7F6FF10BD10B55124240623781846E6 -:10060000FFF7EEFF184610BD10B50446FFF7F3FFE5 -:1006100010BD01460020704710B50446044920462D -:10062000FFF7E2FF10BD03A002F0C4FD00BFFEE72C -:10063000000000200D0A5445535420444F4E450DF0 -:100640000A00000010B52821E14802F0B8FEE14898 -:10065000DF4908621721DE48203001710C21417109 -:100660000F21817110BD10B50120D949887000207B -:10067000C87017200871002048710F208871002071 -:10068000C04388600B469A795979187901F087FF41 -:1006900010BDCF4840787047CD4908627047CC48BC -:1006A00020300079C006C00E7047C948203040791C -:1006B000C006C00E7047C64820308079C006C00E04 -:1006C00070470120C002C449086070477047F0B508 -:1006D00091B000F08FFE0C9000F090FE0B9000F0B7 -:1006E00091FE0A9000F092FE099000F093FE0746FA -:1006F00000F094FE089000F095FE079000F096FE42 -:1007000006907F20292149060860B1480078401CE6 -:10071000AF490870292040060668B048006810906C -:100720001098000480190F90AD480668AD48006825 -:1007300010901098000480190E90AB480668AB48E2 -:1007400000681090109800048519A9480668A94807 -:1007500000681090109800048419A7480668A748FC -:10076000006810901098000480190D900020292135 -:1007700049060860A24808609548007802287DDD97 -:10078000A0490E98884202D20C98401E0C909E49B7 -:100790000E98884202D90C98401C0C900C990B982A -:1007A00001F075FE0B9800F049FE0C9800F042FE37 -:1007B0008748807800287ED08548C07800287AD184 -:1007C0008348006AA04218D38148006A001B804910 -:1007D0008968884211D27E48006A001B7C49886083 -:1007E000084601792030017120384179203041716B -:1007F00020388179203081711BE07548006AA04261 -:1008000017D27348006A201A71498968884210D249 -:100810006F48006A201A6E498860084601792030C6 -:1008200001712038417920304171203881792030A0 -:100830008171674883682146026A74A002F0BAFC9D -:1008400063488079401C62498871084680790F2886 -:100850001FDD0F20887108464079401C487108460A -:1008600040791F2815DD0020487108460079401C9A -:1008700008710846007919280BDD00E06FE00120BF -:10088000C870084620308379427901796AA002F065 -:1008900091FC4F48C078002806D14D4B9A79597980 -:1008A000187901F07CFE06E0494B20339A7959799A -:1008B000187901F074FE6848854203D90A98401CF3 -:1008C0000A900BE06548854203D90998401C0990BD -:1008D00004E062484138854200D97F1C6048854267 -:1008E00003D20A98401E0A900CE05C48A03885426A -:1008F00003D20998401E099004E058485F388542A9 -:1009000000D27F1E00971F210846099B0A9A01F01A -:100910009BFE0A9800F096FD099800F097FD384676 -:1009200000F098FD4F490D98884202D90698401C66 -:1009300006904D490D98884202D20698401E0690B6 -:1009400000220699079801F068FD079800F08AFDDB -:10095000069800F08BFD01F0F3FD01F0EBFD069928 -:100960000D98029703940591049009990A982B46D3 -:10097000019100903DA00C9A0E9902F01BFC1448C6 -:100980000078192822DB12488078002803D010480C -:10099000C07800281AD00120C0020F4980310860B9 -:1009A00000200B490870012048700F98C860084665 -:1009B00005610D984861084684610E98C86137A0AA -:1009C00002F0F8FB002029214906086011B0F0BDB3 -:1009D000EC00002094D1030000E100E0000004528C -:1009E00000001052000014520000185200001C5267 -:1009F0000000285200002C520000305200003452F7 -:100A0000FF3F0000C8781E0038901E00636F756EAF -:100A1000745F4C433A2025752C204C435F746172FF -:100A20006765743A2025752C204C435F64696666BF -:100A30003A2025750A000000636F617273653A20E1 -:100A400025752C206D69643A2025752C2066696E09 -:100A5000653A2025750A0000980F0300900D0300E9 -:100A6000E80A0300786F18008864180048463D259E -:100A7000642D2564202020324D3D25642D25642CD5 -:100A800025642C25642020204C433D256420202013 -:100A900049463D25642D25640D0A0000646F6E658E -:100AA0000D0A000010B5FF219931F74802F087FCCC -:100AB000F649F7484165C91F41610F2180308182A5 -:100AC0004020F44908601F20890548610820086219 -:100AD00010BDED4908607047EB4948607047EA492E -:100AE00088607047E849C860704710208106086038 -:100AF000704710B5044621460B398A00E449143189 -:100B0000885801F0FDFE10BD10B5044621460B3992 -:100B10008A00DF495431885801F0F2FE10BD70B5EB -:100B200005460C460B21DA480174012C02D0022C38 -:100B30000AD104E0D649087CFFF7E6FF05E0D44976 -:100B4000087CFFF7D6FF00E000BF00BF70BD70B5A6 -:100B500005460C4622462946CB48103002F0D0FB11 -:100B6000C94810300121890788600846C460012007 -:100B7000086070BD2820C84908600620C749086081 -:100B8000704702204107086070471820C24908607A -:100B90000120C2490860BE487038412109064861F9 -:100BA000102081060860704701204003BC4908609E -:100BB0000520C00208600420010708607047F8B5EE -:100BC00007460C4615461E463120C0433070AE48DD -:100BD0008030007C20702078A84205DC2278AC4967 -:100BE0006F39384602F08CFBF8BD01204003AC4958 -:100BF00008600020A84908607047F7B584B000BFBE -:100C000000F010FC019000F011FC00909E48803034 -:100C1000007C02909E488030C08A401C81B29C4873 -:100C20008030C1820025029AD1009E4B069A5A4319 -:100C3000104602F0D0FB0390092407E060009A49B7 -:100C4000095A601C4000984A1152641E002CF5DAC3 -:100C5000039800B294490880002407E0600092499C -:100C6000085E9249095D48434519641C0A2CF5DD6C -:100C70002846E917C90D09184F1285488030C18AE6 -:100C8000808A814216D17D20C000874207DD00980E -:100C9000421C014600920022019801F0BEFB8448EC -:100CA000874207DA0098421E01460092002201980E -:100CB00001F0B3FB019800F0D5FB009800F0D6FBE3 -:100CC0000025059819286DD2092407E0A00079496C -:100CD0000958601C8000774A1150641E002CF5DA18 -:100CE000744904980860002407E0A000714908587E -:100CF0006E49095D48434519641C0A2CF5DD2846F8 -:100D0000E917C90D09184E1261488030C18A808ADE -:100D1000814247D14120C00086421DD95C48007CF9 -:100D20000B3881005A4814304058401C5849097CFF -:100D30000B398A005649143188505548007C0B38CD -:100D40008100534854304058401C5149097C0B39AC -:100D50008A004F4954318850FF20E13086421DD22D -:100D60004B48007C0B388100494814304058401EE5 -:100D70004749097C0B398A00454914318850444859 -:100D8000007C0B388100424854304058401E404996 -:100D9000097C0B398A003E495431885000213C4877 -:100DA0008030C18207B0F0BD40203A4908601C2065 -:100DB0008905486108200862704740203549803124 -:100DC000086070473248407C704710B501F00FFB57 -:100DD00010BD3948006870473848008800B2704735 -:100DE000F1B5A2B0402112A802F0E9FA442101A80D -:100DF00002F0E5FA264922984861002478E0A20032 -:100E000023491431885801F07BFD0020292149062F -:100E100008602B480860012700E07F1C7D20C0018E -:100E20008742FAD37F202921490608601A480568BD -:100E30002448066830044019A10012AA5050611CD1 -:100E40004900124AFE328918129A514308460F4946 -:100E5000FE3102F0B6FA611C890001AA5050002C44 -:100E60003BDDA00012A90958A00010581438814297 -:100E70002AD2A100064814304058401CA200044960 -:100E80001431885029E00000BC020020C302000099 -:100E9000BC03002000E100E00000285200004052A6 -:100EA00000001052093D0000A4020020180000209C -:100EB00018FCFFFF24000020000054520000645280 -:100EC000FF3F000000002C52A100BF4840582830CE -:100ED000611C8A00BC498850641C002C08D1A10008 -:100EE000B94840582830611C8A00B7498850641CB2 -:100EF000102C84DB002400E0641C102CFCDB129816 -:100F000023B0F0BDF0B5B3B005460E460024402135 -:100F100021A802F054FA442110A802F050FA20222D -:100F2000AA4908A8FFF710F92022A84920316846ED -:100F3000FFF70AF9A448143845654FE0A200A2491A -:100F40004031885801F0DCFC002029214906086066 -:100F50009F4808600120319002E03198401C319098 -:100F60007D21C90131988842F7DB7F20292149067C -:100F700008609848076898480068329032980004E2 -:100F8000C019A10021AA505062006B46995A620014 -:100F900008AB9A5A7243104602F013FAA10010AA45 -:100FA0005050A00021A90958A0001058401F8142AC -:100FB00009D2A100844840304058401CA200824918 -:100FC000403188500AE0A1007F4840304058283026 -:100FD000611C8A007C4940318850641C102CADDBB8 -:100FE00033B0F0BD70B504462046FFF7F9FE054664 -:100FF0007A4800F0A8FAFF202B3000F0B3FAFF2067 -:10100000343000F0AFFAFF20F93000F09CFAFF20F6 -:10101000FB3000F0A7FAFF20FD3000F0A3FA2946CC -:101020002046FFF76FFFFFF7E0FD70BD70B50120B0 -:1010300080070469C5690121634814384174002D93 -:1010400008D008202840002803D000215E4814382A -:10105000417400BF01208007456202202040002823 -:1010600009D05F480068002805D021225206506848 -:101070005B4A1168884704202040002809D058485E -:101080004068002805D0212252065068544A516811 -:10109000884708202040002809D05148806800284F -:1010A00005D02122520650684D4A91688847102089 -:1010B0002040002809D04A48C068002805D02122D5 -:1010C00052065068464AD1688847012080078461EB -:1010D00070BD70B543480568434806683004401940 -:1010E000424909688900424A505040480068401C03 -:1010F0003E4908603F480068202108433D49086098 -:10110000084600683C4908603A4800682021884346 -:101110003849086008460068374908603348006865 -:101120000A281ED1012406E0A000314A115833A03C -:1011300002F040F8641C0A2CF6D3FF20013031493C -:10114000086040002F498039086000202749086066 -:10115000002400E0641C2C488442FBD32B482C491B -:10116000C86070BD10B5234A126860231A43214B32 -:101170001A601A461268204B1A601E4A12686023D1 -:101180009A431C4B1A601A4612681B4B1A600122C4 -:1011900052021C4B803B1A6052101A4B1A605200CC -:1011A0001C4B1A600F4A10680F4A11680A04121883 -:1011B0000E4B1B689B000E4CE2500C4A1268521CEE -:1011C0000A4B1A6010BD0000D0030020BC3C000098 -:1011D000FF3F00000000285200002C52CB0300000B -:1011E000BC020020000044520000485208000020C9 -:1011F000140100201400002000000C5225580D0A94 -:101200000000000080E100E0102700000400FA0563 -:1012100000ED00E080E200E010B502A001F0CAFF9E -:1012200010BD000061646320696E74657272757030 -:1012300074207472696767657265640D0A00000046 -:1012400010B509A001F0B6FF10BD10B510A001F057 -:10125000B1FF10BD10B518A001F0ACFF10BD10B566 -:101260001FA001F0A7FF10BD45787465726E616C18 -:1012700020496E74657272757074204750494F33FF -:10128000207472696767657265640D0A000000006A -:1012900045787465726E616C20496E746572727502 -:1012A0007074204750494F382074726967676572BF -:1012B00065640D0A0000000045787465726E616C0B -:1012C00020496E74657272757074204750494F39A9 -:1012D000207472696767657265640D0A000000001A -:1012E00045787465726E616C20496E7465727275B2 -:1012F0007074204750494F313020747269676765B8 -:101300007265640D0A00000010B502A001F052FFE2 -:1013100010BD00007561727420727820696E74656A -:101320007272757074207472696767657265640D96 -:101330000A0000001E480021016041608160C16018 -:10134000481E212149068860072008607047184917 -:101350000860704703202121490608638020154951 -:101360000860704700B50246FFF7F4FF21204006F1 -:10137000026100BD21204006406870470020212105 -:101380004906086380200B4980310860704710B51A -:101390000948046BE007C00F002806D00448006825 -:1013A000002802D00249086880470348446310BD02 -:1013B0005404002000E100E04000004210B5CC21C0 -:1013C000FE4801F0FCFF1121FC488030C16203217E -:1013D0000163152141630F218163C163F8490164F1 -:1013E00016214164122181641422F6491830FEF757 -:1013F000ABFE10BDF1488030C06A7047EF488030C6 -:10140000006B7047ED488030406B7047EB48803090 -:10141000806B7047E9488030C06B7047E748803088 -:10142000006C7047E5488030406C7047E34880307E -:10143000806C7047E1498031C8627047DF49803174 -:1014400008637047DD49803148637047DB4980316C -:1014500088637047D9498031C8637047D749803164 -:1014600008647047D549803148647047D34980315A -:101470008864704710B5044698222146CF48FEF78D -:1014800063FE10BDD049014049004208CE4B1A40CE -:1014900011430846CD49014089008208CB4B1A40D0 -:1014A00011430846CA49014009010209C84B1A40C4 -:1014B000114308460106FF221202024012021143A4 -:1014C000020AFF231B021A401143020E1143084671 -:1014D0007047F3B500256C1E16E00098465D304657 -:1014E000FFF7D0FF064600270BE02046704000289B -:1014F00004DA6000B7494840044600E06400760022 -:101500007F1C072FF1DD6D1C01988542E5D3E04378 -:10151000FFF7B8FFFCBDF021014009110207120ED0 -:1015200011430846CC210140891033220240920029 -:1015300011430846AA210140491055220240520099 -:1015400011430846704710B541098A009B4B9A58D1 -:101550004B01C41A0123DB07E3409A438B00974CED -:10156000E25010BD10B541098A00944B9A584B01C6 -:10157000C41A0123DB07E3401A438B008F4CE2506F -:1015800010BDFFB505460E46174600240FE028465D -:101590002041C007C00F002804D02046F530FFF7D7 -:1015A000E1FF03E02046F530FFF7CDFF641C032C7C -:1015B000EDDD00240FE030462041C007C00F0028B9 -:1015C00004D02046F930FFF7CDFF03E02046F93084 -:1015D000FFF7B9FF641C032CEDDD00240FE0384653 -:1015E0002041C007C00F002804D02046FD30FFF77F -:1015F000B9FF03E02046FD30FFF7A5FF641C032C74 -:10160000EDDD00240FE003982041C007C00F002843 -:1016100004D0E01DFA30FFF7A5FF03E0E01DFA302B -:10162000FFF791FF641C032CEDDDFFBDFFB5054600 -:101630000E46174600240FE028462041C007C00F81 -:10164000002804D0E01DFE30FFF78CFF03E0E01D12 -:10165000FE30FFF778FF641C012CEDDD002411E063 -:1016600030462041C007C00F002805D02046FF307B -:101670000830FFF777FF04E02046FF300830FFF71F -:1016800062FF641C012CEBDD002411E03846204190 -:10169000C007C00F002805D02046FF300A30FFF7F2 -:1016A00061FF04E02046FF300A30FFF74CFF641C66 -:1016B000012CEBDD002411E003982041C007C00F8E -:1016C000002805D02046FF300C30FFF74BFF04E028 -:1016D0002046FF300C30FFF736FF641C012CEBDD99 -:1016E000FFBD30B589B0054620223B4901A8FEF771 -:1016F0002BFD002411E02846E040C007C00F002861 -:1017000005D0610001AA505AFFF71DFF04E06100F7 -:1017100001AA505AFFF726FF641C0F2CEBD909B021 -:1017200030BD30B589B0054620222B49203101A8B3 -:10173000FEF70AFD002411E02846E040C007C00F74 -:10174000002805D0610001AA505AFFF70BFF04E002 -:10175000610001AA505AFFF7F6FE641C0F2CEBD96A -:1017600009B030BD00B5FF20F630FFF7ECFEFF20DA -:10177000F730FFF7E8FEFF20F830FFF7E4FEFF2028 -:10178000F930FFF7E0FEFF20FA30FFF7EBFEFF2015 -:10179000FB30FFF7D8FEFF20FC30FFF7E3FEFF2011 -:1017A000FD30FFF7D0FEFF20FE30FFF7DBFEFF200D -:1017B000FF30FFF7D7FE094812E000006404002064 -:1017C000006A1800FC3C000055555555333333333F -:1017D0000F0F0F0FB71DC104103D0000FF010000E7 -:1017E000FFF7C0FE01204002FFF7BCFEF848FFF7FC -:1017F000AAFEF748401CFFF7A6FEF548801CFFF73D -:10180000B1FE81208000FFF7ADFE0020F1490860A5 -:10181000F148FFF7A7FE00BDF3B581B00F460020E9 -:101820000090019EB800019E82193146EBA001F0A4 -:10183000C1FCF6A001F0BEFC00240CE0002507E08E -:10184000A00030580121A9408843A10070506D1CB0 -:10185000202DF5DB641CBC42F0D300241DE00025E4 -:1018600018E0A00030580121A9400840002809D004 -:10187000A00033582A462146EAA001F09BFC0098BC -:10188000401C0090A00030580121A9400843A1004D -:1018900070506D1C202DE4DB641CBC42DFD300249F -:1018A0001FE000251AE0A00030580121A94008409F -:1018B0000121A940884209D0A00033582A46214678 -:1018C000E4A001F077FC0098401C0090A000305884 -:1018D0000121A9408843A10070506D1C202DE2DB3E -:1018E000641CBC42DDD37C1E1DE01F2518E0A00057 -:1018F00030580121A9400840002809D0A0003358E1 -:101900002A462146DFA001F055FC0098401C0090BB -:10191000A00030580121A9400843A10070506D1E5D -:10192000002DE4DA641E002CDFDA7C1E1FE01F2588 -:101930001AE0A00030580121A94008400121A94027 -:10194000884209D0A00033582A462146D9A001F088 -:1019500031FC0098401C0090A00030580121A940A3 -:101960008843A10070506D1E002DE2DA641E002C29 -:10197000DDDA002416E0002511E0A0003058012136 -:10198000A9400840002809D0A00033582A46214623 -:10199000D4A001F00FFC0098401C00906D1C202D7D -:1019A000EBDB641CBC42E6D3DAA0009901F002FC38 -:1019B0000098FEBD30B50546002411E028462041C0 -:1019C000C007C00F002805D02046FF30ED30FFF7DC -:1019D000C9FD04E02046FF30ED30FFF7B4FD641C84 -:1019E000062CEBD930BD30B50546002411E0284661 -:1019F0002041C007C00F002805D077497539081B62 -:101A0000FFF7B0FD04E074497539081BFFF79BFD33 -:101A1000641C042CEBD9052411E028462041C007A2 -:101A2000C00F002805D06C497539081BFFF78BFDE6 -:101A300004E069497539081BFFF794FD641C062C06 -:101A4000EBD930BD30B50546002411E028462041D1 -:101A5000C007C00F002805D05F49C91C6018FFF7F8 -:101A600081FD04E05C49C91C6018FFF76CFD641C33 -:101A7000042CEBD9052411E028462041C007C00FF3 -:101A8000002805D05449C91C6018FFF75CFD04E02C -:101A90005149C91C6018FFF765FD641C062CEBD981 -:101AA00030BD30B50546002411E028462041C0076E -:101AB000C00F002805D048490F31081BFFF752FD21 -:101AC00004E045490F31081BFFF73DFD641C042C61 -:101AD000EBD9A806C00F002804D0E7208000FFF74C -:101AE00032FD03E0E7208000FFF73CFD6806C00FF1 -:101AF000002804D036482C30FFF725FD03E0344899 -:101B00002C30FFF72FFD30BD30B5054600240FE027 -:101B10002846E040C007C00F002804D020466B30A4 -:101B2000FFF720FD03E020466B30FFF70CFD641C3F -:101B30000F2CEDDD30BD30B5054600240FE0284602 -:101B4000E040C007C00F002804D020467C30FFF7DB -:101B500009FD03E020467C30FFF7F5FC641C072CF0 -:101B6000EDDD30BD30B5054600240FE02846E040ED -:101B7000C007C00F002804D02046D130FFF7F2FC88 -:101B800003E02046D130FFF7DEFC641C0F2CEDDDB6 -:101B900030BD70B505460E4600240AE02046FF30F1 -:101BA000D930FFF7D0FC2046FF301730FFF7CBFCD1 -:101BB000641C0D2CF2DB002405E0FF21E531081B3D -:101BC000FFF7D0FC641CAC42F7D90024BAE0000057 -:101BD0000102000000002852920300000D0A0D0AC5 -:101BE0005374617274696E67205352414D2074655D -:101BF00073742066726F6D203078255820746F20C2 -:101C0000307825582E2E2E0D0A0000005468697376 -:101C10002074616B657320617768696C652E2E2E68 -:101C20000D0A00000D0A4552524F5220312040202B -:101C3000616464726573732025582062697420257D -:101C400064202D2D2056616C756520697320255800 -:101C5000000000000D0A4552524F52203220402011 -:101C6000616464726573732025582062697420254D -:101C700064202D2D2056616C7565206973202558D0 -:101C8000000000000D0A4552524F522033204020E0 -:101C9000616464726573732025582062697420251D -:101CA00064202D2D2056616C7565206973202558A0 -:101CB000000000000D0A4552524F522034204020AF -:101CC00061646472657373202558206269742025ED -:101CD00064202D2D2056616C756520697320255870 -:101CE000000000000D0A4552524F5220352040207E -:101CF00061646472657373202558206269742025BD -:101D000064202D2D2056616C75652069732025583F -:101D1000000000000D0A5352414D20546573742099 -:101D2000436F6D706C657465202D2D2025642045F2 -:101D300072726F72730D0A002046FF301730FFF782 -:101D400002FC641CB442F7D970BD70B505460E465E -:101D5000002411E03046E040C007C00F002805D045 -:101D60002046FF30C530FFF7FDFB04E02046FF3082 -:101D7000C530FFF7E8FB641C042CEBDD002411E008 -:101D80002846E040C007C00F002805D02046FF309D -:101D9000CA30FFF7E7FB04E02046FF30CA30FFF708 -:101DA000D2FB641C042CEBDD70BD70B505460E46FD -:101DB000002411E03046E040C007C00F002805D0E5 -:101DC000FF215931081BFFF7CDFB04E0FF215931FA -:101DD000081BFFF7B8FB641C042CEBDD002411E0AA -:101DE0002846E040C007C00F002805D0FF2154312D -:101DF000081BFFF7B7FB04E0FF215431081BFFF776 -:101E0000A2FB641C042CEBDD70BD70B505460E46CC -:101E1000002411E02846E040C007C00F002805D08C -:101E20002046FF30E630FFF79DFB04E02046FF3000 -:101E3000E630FFF788FB641C042CEBDD002411E086 -:101E40003046E040C007C00F002805D0FF21163102 -:101E5000081BFFF787FB04E0FF211631081BFFF783 -:101E600072FB641C052CEBDD70BDF8B5FA4C650DFA -:101E7000FA48006A2040F94908620846C06B2840C9 -:101E8000C8630846006AF649A1430843F34908625B -:101E9000F4484862F4488862F448C862F448086329 -:101EA000F4484863F44888630846C06BF349A94383 -:101EB0000843EA49C863FF20A930FFF744FBFF202D -:101EC000AA30FFF74FFB3F210846FFF79EFF07218F -:101ED0000846FFF75EFE00210846FFF736FF0021A7 -:101EE0000846FFF762FF0020FFF72DFB0120FFF7F8 -:101EF0002AFB6020FFF727FBFF201030FFF723FBB2 -:101F0000FF20EC30FFF71FFB6420FFF71CFB652070 -:101F1000FFF719FB6620FFF716FB6120FFF722FB96 -:101F20000020D7490860D748D74908606720FFF7E5 -:101F300019FB0B260227F002F9010843D349086078 -:101F400005200090D24900980860FF200E30FFF76E -:101F5000FAFAFF200F30FFF7F6FA0020FFF72AFD0C -:101F6000F020FFF7FFFA5D20C000FFF7FBFAC94839 -:101F7000FFF7F8FAC748401CFFF7F4FA0120C649FA -:101F80000860F8BD70B5C54C650DB448006A2040C6 -:101F9000B24908620846C06B2840C8630846006A18 -:101FA000BF49A1430843AD490862AE484862AE4804 -:101FB00040308862BB48C862BB480863BB4848637E -:101FC000BB4888630846C06BBA49A9430843A34984 -:101FD000C8630020FFF7C6FA0120FFF7C3FA0D20FF -:101FE000FFF792FD2620FFF7A6FD5020FFF7BAFD70 -:101FF000EE20FFF7B7FAEF20FFF7B4FAFF200E301C -:10200000FFF7A1FAFF200F30FFF79DFA8420FFF7BA -:10201000A9FA05269E4806600A210020FFF795FED2 -:102020000020FFF7C7FCF020FFF79CFA01204003D7 -:10203000A1490860F002086070BD10B50A467F2310 -:1020400083435901854B9B6F7F246401A343834CD9 -:10205000A36723469B6F0B43A36710BD7F22824378 -:1020600051037E4A926F7F235B039A437B4B9A67AF -:102070001A46926F0A439A67704710B5F0230340DF -:1020800019090207754B9B6F1B091B01734CA36752 -:1020900023469B6F0B43A3672346DB6F1B011B0982 -:1020A000E3672346DB6F1343E36710BD00B57D2074 -:1020B000C000FFF757FA8148FFF754FA7F48401CE9 -:1020C000FFF750FA7D48801CFFF74CFA80207C49CE -:1020D00008607F20FFF7D1FF7F20FFF7BFFF0021BF -:1020E0003F20FFF7AAFF00BD70B503460024002083 -:1020F0000325AD021D402C010F252D031D402D0B86 -:1021000028433F252D011D40284395022843CD0239 -:1021100028431D072D0C2843E5436A4E3560C5430F -:10212000694E356070BD002824D14C49C96F042226 -:1021300011434A4AD1671146C96F02229143474A67 -:10214000D1671146803109680122D2071143434A01 -:10215000803211604149C96F49084900803AD1670E -:102160001146803109680722120711433B4A803229 -:102170001160F5E0012822D13849C96F02221143CC -:10218000364AD1671146C96F04229143334AD16759 -:10219000114680310968C2071143304A803211600C -:1021A0002E49C96F8143803AD16711468031096851 -:1021B000072212071143294A80321160D0E0022819 -:1021C00023D12649C96F04221143244AD1671146FD -:1021D000C96F02229143214AD167114680310968B3 -:1021E0004A0052081D4980310A608039C96F0122B6 -:1021F00011431A4AD1671146803109680722120734 -:102200001143164A80321160AAE003285ED11349B7 -:10221000C96F04221143114AD1671146C96F0222C6 -:1022200091430E4AD167114680310968C2071143B4 -:102230000A4A803211600949C96F49084900803A49 -:10224000D167114680310968012292079143034A00 -:102250008032116084E000000000FCFF6404002074 -:10226000E0FF5040882142003100048881403B114A -:1022700002817E024448ED0300000160032EE0FF6E -:10228000000038520FA0000000003C5200000C5229 -:1022900000002452E9020000000040520000FEFF4E -:1022A000F0FF000081400C100281180044C87F013B -:1022B000010001700008E0FF00001052E903000077 -:1022C00000002C520000145200001852042822D1A1 -:1022D000FE49C96F04221143FC4AD1671146C96FF8 -:1022E00002229143F94AD1671146803109684207B9 -:1022F0001143F64A80321160F449C96F4908490018 -:10230000803AD167114680310968C2069143EF4A8D -:102310008032116024E0052822D1EC49C96F0422E3 -:102320001143EA4AD1671146C96F02229143E74A35 -:10233000D167114680310968C2071143E34A8032F0 -:102340001160E249C96F49084900803AD1671146D6 -:1023500080310968032252079143DC4A80321160C0 -:10236000704710B50A467F2383435903D74BDB6F71 -:102370007F246403A343D54CE3672346DB6F0B4301 -:10238000E36710BD10B5044600217F20FFF7E9FF89 -:102390000420FFF7C8FE01221146FF20E130FFF7BD -:1023A000A3FEFD208000FFF7DDF810BD70B50346E9 -:1023B0000C467F25292676063560C54D2868C54D13 -:1023C00029680D042D181D60C34D2868C34D296868 -:1023D0000D042D182560C24D2868C24D29680D04D2 -:1023E0002D18156000253560BF4D356070BDBF48A4 -:1023F0000068012189020840002804D0BB480088F9 -:102400008005800D70470020FCE7B94800787047D0 -:10241000B84800780007000F7047F0B505460E4633 -:102420001746002411E028462041C007C00F0028AD -:1024300005D0FF21B031081BFFF794F804E0FF211D -:10244000B031081BFFF77FF8641C042CEBD9002483 -:1024500011E030462041C007C00F002805D0FF2101 -:10246000B631081BFFF77EF804E0FF21B631081BE8 -:10247000FFF769F8641C042CEBD9012F03D19E48A7 -:10248000FFF770F802E09C48FFF75DF8F0BD70B50B -:1024900005460E46002411E03046E040C007C00F5C -:1024A000002805D0944990316018FFF75BF804E0EC -:1024B000914990316018FFF746F8641C032CEBDD5E -:1024C000F006C00F002804D08B489430FFF73BF88B -:1024D00003E089489430FFF745F8002411E02846CE -:1024E000E040C007C00F002805D0D7218900601840 -:1024F000FFF738F804E0D72189006018FFF723F8C8 -:10250000641C012CEBDD022411E02846E040C007EA -:10251000C00F002805D0784993316018FFF713F8F1 -:1025200004E0754993316018FFF71CF8641C042C13 -:10253000EBDD70BD282071490860202008607047DD -:1025400010B500210022252126E0002221E08B0089 -:102550005E4CE358012494402340002B01D12120FC -:1025600000E02020654B186002240346A343184670 -:10257000624B186004231843604B18600424034620 -:10258000A34318465D4B1860022318435B4B186049 -:10259000521C202ADBDB491E0029D6DA10BDF7B514 -:1025A00084B00546E806C00E03900598C006C00E2C -:1025B00002900698C006C00E01900398FEF7ABFF8C -:1025C00000900298FEF7A7FF06460198FEF7A3FFCA -:1025D00004460023002700BF00BF00980090782029 -:1025E000204040020343F00003430098C008034327 -:1025F00080202040C00907433648036040480760F8 -:1026000007B0F0BD01460020CA07120E1043022297 -:102610000A405201104304220A40D200104308220B -:102620000A405200104310220A4052081043202250 -:102630000A40D208104340220A4052091043802227 -:102640000A40D20910437047F0B585B006460C46E3 -:1026500015461F461D4880308661183044608560ED -:10266000C7601A4998310A98086108461838806886 -:102670002449084003463046FFF7C4FF0006C00E59 -:1026800004902046FFF7BEFF0006C00E03902846C8 -:10269000FFF7B8FF0006C00E02903846FFF7B2FF02 -:1026A0000006C00E01900A98FFF7ACFF0006C00EAE -:1026B0000090049880060343039840050343029862 -:1026C000000403430198C00203431DE0640400209A -:1026D0000000185200001C520000285200002C522A -:1026E0000000305200003452FF3F00000000405212 -:1026F0000000545200003C52D60200000000585224 -:10270000000020521F000080009880010343202019 -:102710000343BA48836005B0F0BD38B5FEF74EFEFE -:10272000FDF790FFFEF7BEF9FEF704FE00F084F916 -:10273000FFF718F800231A4619461846FEF776FFE9 -:102740000023062211461046FEF71BFF0020FEF76D -:10275000E8FFAB48FEF7C5FFAA48FEF703FFA74A0C -:10276000D16A106BFFF793FEA648001DFEF7FAFE34 -:10277000A548FEF7F7FE3120FEF7F4FE3020FEF705 -:10278000F1FE2F20FEF7DFFE2E20FEF7EBFE2D20C0 -:10279000FEF7D9FE2C20FEF7E5FE2B20FEF7E2FE29 -:1027A0002A20FEF7DFFE97480930FEF7DBFE964849 -:1027B0004630FEF7D7FE2920FEF7D4FE022403E0C0 -:1027C0002046FEF7CFFE641C092CF9DBFFF74DFB1A -:1027D000FFF76CFC894A916C506C0022FFF71DFEDC -:1027E0008648C06B00908548836B1F21426B08466A -:1027F000FFF72AFF83482138FEF7B4FE0F220C2191 -:102800001720FFF7CCFE7D200001FFF7BBFDFFF78F -:1028100097FEFFF78FFE38BDF8B500202921490645 -:1028200008607A480860012700E07F1C78488742EA -:10283000FBDB7F202921490608607648046876483A -:1028400005682804061908460468744805682804C1 -:10285000001900907003009900F0B3FDF8BD18B5A1 -:10286000664818300069654C18340090E368A26827 -:102870006168183CA069FFF7E7FE18BD70B5034614 -:102880000C467F25292676063560624D2868624D04 -:1028900029680D042D181D60614D2868614D296857 -:1028A0000D042D182560354628685C4D29680D04F7 -:1028B0002D18156000253560544D356070BD10B57C -:1028C00000210BE003689B0F0468E40E6340DA0705 -:1028D000D20F03685B0013430360491C0829F1DB36 -:1028E00010BD10B5002408E0A000444980390A5802 -:1028F00021464DA000F05EFC641C262CF4D310BDD4 -:10290000F0B585B0054600260027172003908C20DF -:1029100002902846029900F05EFD1330C0B200908C -:102920002846029900F057FD0D462846039900F00D -:1029300052FD41004018C019C0B2019028460399C9 -:1029400000F049FD022800DB00BF2846039900F093 -:1029500042FD8819C4B20F2C00DD641C2246019987 -:102960000098FFF71CFE05B0F0BD24488038806F4A -:1029700001210905884321498039886770471F482C -:102980008038806F0121090508431C498039886718 -:1029900070471A488038006C0921C90688431749D6 -:1029A00080390864704715488038006C0921C906D1 -:1029B00008431249803908647047104800680121B3 -:1029C000C90408430D49086070470C48006801219C -:1029D000C904884309490860704708480068032112 -:1029E000490488430549086070470448006803218A -:1029F000490408430149086070470000E4040020CE -:102A0000FFFF00007B04000029020000FF3F0000E0 -:102A100050C300000000185200001C520000045275 -:102A200000002052000024524153435B25755D2075 -:102A30003D20307825780A0010B57021FA4800F062 -:102A4000BEFC0021F8484030017002214170722123 -:102A500081703221C17080210171C621417125210F -:102A600081710121C1715321017343210C304170E7 -:102A7000552181704D21C1703321017110BDF0B518 -:102A800097B000270024AA20169015901490E648CD -:102A9000403080798006800E403008904021E24826 -:102AA00000F08DFC2C2109A800F089FC5522394644 -:102AB0007F1CDD4842546B2239467F1C42547D22E4 -:102AC00039467F1C4254912239467F1C4254712260 -:102AD00039467F1C425440222146641C09A84254B6 -:102AE000A4222146641C425405250AE0CE49403107 -:102AF000485DFEF710FD2146621CD4B209AA50546D -:102B00006D1E002DF2DAC8484030C07900281AD076 -:102B100060222146601CC4B209A8425410222046FB -:102B2000611CCCB209A90A5400250AE0BE494C3107 -:102B3000485DFEF7F0FC2146621CD4B209AA50544D -:102B40006D1C052DF2DBB8484030007A002820D0FB -:102B5000C0222146601CC4B209A842540322204668 -:102B6000611CCCB209A90A54AF494031498A081204 -:102B7000FEF7D1FC2146621CD4B209AA5054AA49DE -:102B80004031887CFEF7C7FC2146621CD4B209AAFA -:102B90005054A5484030407A00285FD0902220460B -:102BA000611CCCB209A90A5443222046611CCCB254 -:102BB00009A90A549C49496D080EFEF7ACFC214650 -:102BC000621CD4B209AA50549749496D0902080EF3 -:102BD000FEF7A1FC2146621CD4B209AA50549249C6 -:102BE000496D0904080EFEF796FC2146621CD4B21A -:102BF00009AA50548C49496DC8B2FEF78CFC214695 -:102C0000621CD4B209AA50548749896D080EFEF798 -:102C100082FC2146621CD4B209AA50548249896DB3 -:102C20000902080EFEF777FC2146621CD4B209AAFD -:102C300050547D49896D0904080EFEF76CFC21464D -:102C4000621CD4B209AA50547749896DC8B2FEF704 -:102C500062FC2146621CD4B209AA5054724840302A -:102C6000807A00283BD07048416E006E6F4A704BEE -:102C70000391029000F0D2FD0791069000206D496B -:102C8000079B069A00F030FE00226B4B01910090EA -:102C900000F0C4FD0391029000F0F0FD0590C02209 -:102CA0002146601CC4B209A8425483222046611CFC -:102CB000CCB209A90A5405990904080EFEF72BFCA9 -:102CC0002146621CD4B209AA50540599C8B2FEF735 -:102CD00022FC2146621CD4B209AA505400BF5248BB -:102CE0004030C07A00281AD0A0222046611CCCB205 -:102CF00009A90A5483222046611CCCB209A90A54AE -:102D000000250AE048496831485DFEF704FC214689 -:102D1000621CD4B209AA50546D1C042DF2DB0024AD -:102D200031E007252BE009A8005D0121A9400840FA -:102D300028411499C907C90F06464E4014984010FF -:102D40001599C907090E0843149015984010169953 -:102D5000C9010843B101484071014840C0B2159013 -:102D600016984010F1010843B10148403101484034 -:102D7000F100484071004840C0B216906D1E002D11 -:102D8000D1DA601CC4B2272CCBDB1498FEF7C3FB4E -:102D900014901598FEF7BFFB15901698FEF7BBFB35 -:102DA00016902146621CD4B209AA149850542146A8 -:102DB000621CD4B209AA159850542146621CD4B2A0 -:102DC00009AA16985054002423E007251DE009A8FD -:102DD000005D0121A940884309A9095D0122AA409B -:102DE0001140089AD207D20FAA405140084309A9BE -:102DF0000855089840100899C907490E08430899D2 -:102E0000C907490F484008906D1E002DDFDA601C8D -:102E1000C4B22A2CD9DB0449C8192A2209A900F016 -:102E20006FFA17B0F0BD00003005002066666666D8 -:102E300066127140000059400000F03F10B50024B8 -:102E40004021D64800F0BBFA1D222146641CD3481D -:102E5000425455222146641C4254AD222146641C32 -:102E60004254F6222146641C425445222146641CE9 -:102E70004254C7222146641C4254C5222146641C88 -:102E800042540E222046611CCCB2C4490A54262268 -:102E90002046611CCCB2C1490A5413222046611C51 -:102EA000CCB2BE490A54C2222046611CCCB2BB49F6 -:102EB0000A54AC222046611CCCB2B8490A5498226C -:102EC0002046611CCCB2B5490A5437222046611C09 -:102ED000CCB2B2490A54B8222046611CCCB2AF49E8 -:102EE0000A5430222046611CCCB2AC490A54A122BB -:102EF0002046611CCCB2A9490A54C9222046611C53 -:102F0000CCB2A6490A54E4222046611CCCB2A349A3 -:102F10000A5493222046611CCCB2A0490A5475225F -:102F20002046611CCCB29D490A54B7222046611C40 -:102F3000CCB29A490A5441222046611CCCB297492E -:102F40000A546C222046611CCCB294490A54D12206 -:102F50002046611CCCB291490A542D222046611CA6 -:102F6000CCB28E490A54B8222046611CCCB28B499F -:102F70000A5410BD10B50446062221468748403049 -:102F800000F0BEF910BD8549403188717047834912 -:102F90004031C871704710B50446052221467F486C -:102FA0004C3000F0ADF910BD7C49403108727047DB -:102FB0007A494031488270477849403148727047B9 -:102FC000764948657047754988657047734940314F -:102FD00088727047714A5166106670476F49403178 -:102FE000C872704710B50446042221466B48683009 -:102FF00000F086F910BD10B5F9208000FEF7B2FA96 -:103000006748FEF7A0FA6648401CFEF79CFA644841 -:10301000801CFEF798FA7D20C000FEF794FA604805 -:10302000001DFEF790FA5E48401DFEF78CFA5C48E2 -:10303000801DFEF788FA5A481030FEF793FA584878 -:103040002C30FEF78FFA56482D30FEF78BFAF12020 -:103050008000FEF778FA52485430FEF774FA0020E8 -:10306000504908607F20FFF708F87F20FEF7F6FF41 -:1030700000213F20FEF7E1FFFFF762FAFFF75AFA5F -:1030800010BD10B5FEF77EFFFF20A930FEF75BFAFA -:10309000FF20AA30FEF766FAFF20A730FEF762FA9B -:1030A0003F210846FEF7B1FE07210846FEF771FDF5 -:1030B0004C20FEF740FD7B20FEF745FA5D20C00066 -:1030C000FEF750FA3648FC38FEF74CFA3448FB3825 -:1030D000FEF748FA012034490860FFF731FAFFF79C -:1030E00029FA10BD002010210843400840000421A7 -:1030F0000843202108432B490860704770B5002021 -:103100000125284304260546B543284620260546C2 -:10311000B5432846234D2860002123E01F4D6C5CF9 -:1031200007221CE025461541EB07DB0F002B05D1DC -:1031300002260546B54328461A4D2860012B03D1C7 -:1031400002252843174D286008252843154D28607F -:1031500008260546B5432846124D2860521E002A0F -:10316000E0DA491C4029D9DB70BD10B5FFF7C6FF76 -:10317000FDF700FD68200D490860002400E0641C94 -:10318000322CFCDBFFF7AEFF002400E0641C7D2046 -:10319000C0008442FADBFDF728FD10BD3005002099 -:1031A000E503000000002C520000405200002852AD -:1031B000704700000FB4054910B503AA029800F04B -:1031C00011FD10BC08BC04B018470000000000202E -:1031D000F8B50E460446002020622046E168884784 -:1031E000002829D0252802D06268A16820E0E16883 -:1031F00020460027884705001ED028464138192858 -:1032000002D80127FF022035324620462760294692 -:10321000FCF774FF002808D0012804D0F61DF6083A -:10322000F6000836D9E7361DD7E762682846A16858 -:103230009047206A401CCFE7206AF8BDF7B500250B -:1032400075291068009914A611D0C046C046002800 -:1032500002DA404211A608E0009909688A0701D500 -:103260000FA602E0490704D50EA6012501E0C046DD -:10327000C046009F0024243704E000F0C7FC303132 -:103280003955641C0028F8D12B4632462146009857 -:1032900000F04FFCFEBD0000000000002D0000000B -:1032A0002B0000002000000070B504460D462146AA -:1032B0001068C046C0462188090502D50F4A7A44E5 -:1032C00002E00E4A7A440E3223460021243305E000 -:1032D00006070009360F965D5E54491C0028F7D199 -:1032E00020780023000705D5702D03D0002901D0D8 -:1032F00002231132204600F01CFC70BD8E0A000033 -:10330000F8B5042A2CD3830712D00B78491C03701C -:10331000401C521E83070BD00B78491C0370401CC5 -:10332000521E830704D00B78491C0370401C521EA8 -:103330008B079B0F05D0C91ADF002023DE1B08C9AD -:103340000AE0FCF701FFF8BD1D4608C9FD401C4618 -:10335000B4402C4310C0121F042AF5D2F308C91A36 -:10336000521EF0D40B78491C0370401C521EEAD444 -:103370000B78491C0370401C012AE4D409780170C1 -:10338000F8BD01E004C0091F0429FBD28B0701D559 -:103390000280801CC90700D00270704700290BD042 -:1033A000C30702D00270401C491E022904D38307C0 -:1033B00002D50280801C891EE3E70022EEE700228E -:1033C000DFE7002203098B422CD3030A8B4211D37F -:1033D00000239C464EE003460B433CD400224308A6 -:1033E0008B4231D303098B421CD3030A8B4201D396 -:1033F00094463FE0C3098B4201D3CB01C01A52412E -:1034000083098B4201D38B01C01A524143098B427D -:1034100001D34B01C01A524103098B4201D30B0166 -:10342000C01A5241C3088B4201D3CB00C01A52418B -:1034300083088B4201D38B00C01A524143088B4250 -:1034400001D34B00C01A5241411A00D201465241E9 -:10345000104670475DE0CA0F00D04942031000D308 -:103460004042534000229C4603098B422DD3030A5D -:103470008B4212D3FC22890112BA030A8B420CD36D -:10348000890192118B4208D3890192118B4204D396 -:1034900089013AD0921100E08909C3098B4201D316 -:1034A000CB01C01A524183098B4201D38B01C01A50 -:1034B000524143098B4201D34B01C01A52410309C7 -:1034C0008B4201D30B01C01A5241C3088B4201D376 -:1034D000CB00C01A524183088B4201D38B00C01A23 -:1034E0005241D9D243088B4201D34B00C01A5241FA -:1034F000411A00D20146634652415B10104601D387 -:103500004042002B00D54942704763465B1000D310 -:10351000404201B50020C046C04602BD704770471A -:1035200070470000F0B50C46871A9C410D46861A7C -:103530009D4103D2C01BA141D21963410D0D1F0D46 -:10354000C94EEC1BAE435CD07F057F0D0026002FDB -:1035500051D02D05AC46A943DD020123ED0A1B0520 -:103560001D4320231B1B24D41746E7403818714104 -:103570002F46E740CC199D402818314661410C0D7B -:1035800027D161449A4013D50023401C5941520071 -:103590000ED14008400001224B005205D34207D310 -:1035A00005204007C14201D5B04900E0B04930468E -:1035B000F0BD6B00002A00D001229A181F23203C86 -:1035C0001B1B01D5002302E0E540281871410C0DBA -:1035D000D7D0012424050919C407CD07400849089C -:1035E000E40F28436144002CD5D00024401C6141E5 -:1035F0009A40D0D1CDE76A05520DD9D1C90FC9077C -:10360000D5E79C4D4E00002801D0012400E00024A5 -:1036100034195F00002A01D0012600E00026BE19FF -:10362000954FAC420CD8AE420AD8B44206D0012520 -:103630006D05EC42BCD010461946F0BD9942FCD055 -:1036400000203946F0BDF0B51FB40C460F46811A74 -:103650009F412546861A9D4106D20125ED076F4000 -:10366000401ABC4152187B41210D1E0D8D1BAC46EA -:103670007D4D8D437ED075056D0D7CD00D05AE461C -:10368000AC431B031B0B794D52429D4120236646E0 -:103690009B1B14D31746F74038180026009074413E -:1036A00060462F460741E41900989D40281866415E -:1036B00016D4714671189A4025D5012320E093183D -:1036C0002A466A415200002B00D0521C1E23203E85 -:1036D0009B1B002B61DD3541EE1728186641E8D5AC -:1036E000001876415B1C9A4000D3401C4B05F31830 -:1036F0001524E34010D3002B52D071467118D30F1C -:10370000C01802D3491C05B0F0BD0123DB079A4263 -:10371000F9D140084000F6E701225205B21801D164 -:10372000002853D00123CC0ADB029943891E002ACA -:1037300008D1020C03D0020C0004103902E002464A -:10374000002020390023550B05D112020823550B08 -:1037500001D152010D23550C01D112011B1DD50CB5 -:1037600001D192009B1C150D01D152005B1C20253C -:10377000EE1A01E02CE022E00546F54015439840A2 -:10378000CA1AE10769181305C918002ABBDA032011 -:1037900040070818C10FC9070FE071466118B2E76A -:1037A000F10740080843711071444A000CD001230E -:1037B0005B059A42A7D2C90FC9070020A3E74905B4 -:1037C000490D26D1002001E00028F4D100219AE71C -:1037D000284D6600002801D0012100E00021711869 -:1037E0005F00002A01D0012600E00026BE19224F0A -:1037F000A94210D8AE420ED8B14208D001256D05BD -:10380000E94206D01946A802414010467BE79C4297 -:1038100001D0214677E70020394674E710B50C4601 -:103820005C4005D50124E4076340FFF70CFF10BDA1 -:10383000FFF778FE10BD30B40C465C4004D501247F -:10384000E407634030BC6DE630BCFCE670B5012493 -:10385000E40761400D465D4002D4FFF763FE70BD92 -:103860006340FFF7F0FE70BDFF0700000000F0FFAF -:103870000000F07F0000E0FF0000F87F30B5034655 -:10388000CA02400D1043164D164C0A1502D02043B3 -:10389000002A06DBAA1A002A12DDD040FF2A0BDC20 -:1038A00030BD5205520D01D140004008AA1A07D47C -:1038B000D0404042FF2A01DD002030BD0028FCDD61 -:1038C0004A00002B01D0012000E000201018012246 -:1038D0005205D042F0D8C817C043604030BD000048 -:1038E0001E04000000000080F0B58B4C0F09254637 -:1038F00089B0BD437BD01D092646AE43FAD00E46A3 -:103900005E402740F60F3E43254071D024012142FE -:10391000FBD0FF24AD19A4042D1B039501252D0513 -:10392000DB02DB0AC9022B43C90A29431E01090134 -:10393000040F130F050121431701880B82039143E4 -:103940002D098C46A90B1E438A039543B30B9A039A -:1039500096433F09BA0B9403A74302962E467E4333 -:103960000497B6464E19D7190C460196544305974D -:103970007E43371B7646BF1B3601B646BE0B361953 -:1039800000967646BC043719009C01D3641C009451 -:103990006400002F01D001263443029E049F75432A -:1039A00066467E430496760034196E0034190094FE -:1039B000029C019E1C196643751BAE460694654623 -:1039C0004519059C05956C43594375460891691A3C -:1039D0000191049E01465143A41B0491611A009C6D -:1039E0000791E10605D061090122114302E072E06E -:1039F0006EE06109089D00272C0A2D066918049DB8 -:103A00007C412A0A2D066918019D6241AC0DAD0268 -:103A10006D185441079A910D920255196141029A0D -:103A2000644658435443069B059A5A43121A131B83 -:103A30009A0E9B015B187A41010B0005C318514196 -:103A4000220A200644195A419A4200D2491C0120F8 -:103A50004002814203D315230226F64302E01423D9 -:103A60000326F6432020C51AA9401746AF40DA4086 -:103A70000A4320460399D8400914731819055118B0 -:103A8000039A3843D2075140AC4009D001229440F8 -:103A900006D30022401C5141002C01D140084000B7 -:103AA0001E4A934212D3012203989206904207DBEA -:103AB0000520400709181A480143C012414004E09C -:103AC000032040070818C10FC907002009B0F0BD46 -:103AD0000020F107FAE705180C464C4111486D42E9 -:103AE000A04115D394181A465A410E486442904199 -:103AF0000ED301204A004005824209D35A00824277 -:103B000006D35940C90F084AC90700201143DDE711 -:103B100000200649DAE700000000FF07FE0700006A -:103B2000FFFFFF7F0000E0FF0000F07F0000F87F54 -:103B30007047FFB504460D4681B0243000902168DF -:103B4000880604D51022E0699143216000E001203D -:103B5000A84201DD471B00E000270498A1697A19FB -:103B60001018081AA0612078C00602D42046C0466A -:103B7000C046002608E003986268A168805D90470F -:103B8000206A401C761C206204988642F3DB207871 -:103B9000C0060AD52046C046C04606E06268A16855 -:103BA00030209047206A401C206238467F1E002843 -:103BB000F4DC07E000986268A168405D9047206AE5 -:103BC000401C206228466D1E0028F3DC2046C046BB -:103BD000C0462078000602D5022005B0F0BD0120C5 -:103BE000FBE70000084B70B50D467B4400F027F85A -:103BF00004462846FCF70DFD002802D00020C043F3 -:103C000070BD204670BD0000FBC9FFFF0146800863 -:103C1000081A02091018020A1018020C1018C0081D -:103C2000820012185200891A01E0401C0A390A2940 -:103C3000FBD2704701694A1C02610878704700B5E1 -:103C40008FB00291002105910549019379440391B8 -:103C5000114604906846FFF7BBFA0FB000BD0000A4 -:103C6000E5FFFFFF754600F025F8AE460500694602 -:103C70005346C008C000854618B020B5FCF79CFC30 -:103C800060BC00274908B6460026C0C5C0C5C0C5EF -:103C9000C0C5C0C5C0C5C0C5C0C5403D49008D46F2 -:103CA000704710B50446C046C0462046FCF745FAAA -:103CB00010BD000000487047A005002022038803C3 -:103CC000A1030D01B503B20171014202C701CA038C -:103CD0008B0029014B026D0075019F0021038503B4 -:103CE0009C030B01AC03AD016C013902BF01B703AA -:103CF000880022013C026A006A019A001F0000004D -:103D00001F0000001D000000020000000200000073 -:103D10006B046D046F0471047404760478047A04EF -:103D20005B045D045F0461046404660468046A045F -:103D30006C046E04700472047304750477047904CF -:103D40005C045E046004620463046504670469043F -:103D500030313233343536373839414243444546C1 -:103D600040305800303132333435363738396162BB -:103D70006364656640307800983D000000000020D4 -:103D800050000000C4000000E83D0000500000208A -:103D9000B0110000E00000000000005100000051E0 -:103DA0000000000000000000000000000000000013 -:103DB000041025405760574025100400F40100000E -:103DC000F4010000F4010000F4010000F40100001F -:103DD000F4010000F4010000F4010000F40100000F -:083DE000F401000000000000E6 -:0400000500000000F7 -:00000001FF From 73b5cfc2d181db07c5689a847f061b5bed2205d3 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Thu, 20 Feb 2020 13:22:11 -0800 Subject: [PATCH 13/26] Change data GAP code --- scm_v3c/ble.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm_v3c/ble.h b/scm_v3c/ble.h index 5af08021..a42e554c 100644 --- a/scm_v3c/ble.h +++ b/scm_v3c/ble.h @@ -40,7 +40,7 @@ // Custom data. #define CUSTOM_DATA_LENGTH 4 #define CUSTOM_DATA_HEADER 0xA0 // Custom data is 5 bytes long (1 byte GAP code + 4 bytes data). -#define CUSTOM_DATA_GAP_CODE 0x83 // Custom GAP code for custom data (0xC1 LSB first) - same as temperature. +#define CUSTOM_DATA_GAP_CODE 0xC3 // Custom GAP code for custom data (0xC3 LSB first). #define ADVA_LENGTH 6 // Advertiser address is 6 bytes long. #define PDU_LENGTH 39 // 2 byte PDU header + 37 bytes PDU. From 36e61d482f0e7ee5fb7929fe32ef09c4cb49a193 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Thu, 20 Feb 2020 21:05:01 -0800 Subject: [PATCH 14/26] Adjust RX frequency and period --- scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index 85362a59..807a3b24 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -19,8 +19,8 @@ #define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes #define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet -#define TIMER_PERIOD 7500 ///< 500 = 1ms@500kHz -#define BLE_TX_PERIOD 10 +#define TIMER_PERIOD 200000 ///< 500 = 1ms@500kHz +#define BLE_TX_PERIOD 1 #define BLE_CALIBRATE_LC false #define BLE_SWEEP_FINE false @@ -148,8 +148,8 @@ int main(void) { // Configure coarse, mid, and fine codes for RX. app_vars.rx_coarse = 23; - app_vars.rx_mid = 10; - app_vars.rx_fine = 18; + app_vars.rx_mid = 11; + app_vars.rx_fine = 19; // Configure coarse, mid, and fine codes for TX. #if BLE_CALIBRATE_LC From 04f541e8ba011b77b97b25b00611e369c9ff30df Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sun, 23 Feb 2020 14:08:53 -0800 Subject: [PATCH 15/26] Change RX frequency with divider on --- scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index 89f365c1..ea2f9bdd 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -148,8 +148,8 @@ int main(void) { // Configure coarse, mid, and fine codes for RX. app_vars.rx_coarse = 23; - app_vars.rx_mid = 11; - app_vars.rx_fine = 19; + app_vars.rx_mid = 15; + app_vars.rx_fine = 15; // Configure coarse, mid, and fine codes for TX. #if BLE_CALIBRATE_LC From 8720c88b7dd72d94562884a1442892d218bfe8fc Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Tue, 25 Feb 2020 22:03:03 -0800 Subject: [PATCH 16/26] More code cleanup --- scm_v3c/applications/ble_tx/ble_tx.c | 7 +- .../ble_tx_154_rx/ble_tx_154_rx.c | 64 +++++++++++-------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/scm_v3c/applications/ble_tx/ble_tx.c b/scm_v3c/applications/ble_tx/ble_tx.c index 21eae0b3..c524910a 100644 --- a/scm_v3c/applications/ble_tx/ble_tx.c +++ b/scm_v3c/applications/ble_tx/ble_tx.c @@ -36,6 +36,7 @@ app_vars_t app_vars; //=========================== prototypes ====================================== void cb_timer(void); +void transmit_ble_packet(void); //=========================== main ============================================ @@ -121,6 +122,7 @@ int main(void) { ble_gen_packet(); while (1) { + transmit_ble_packet(); rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); app_vars.txNext = false; while (!app_vars.txNext); @@ -132,8 +134,11 @@ int main(void) { //=========================== private ========================================= void cb_timer(void) { - int tx_fine, t; app_vars.txNext = true; +} + +void transmit_ble_packet(void) { + int t, tx_fine; #if BLE_SWEEP_FINE for (tx_fine = 0; tx_fine < 32; ++tx_fine) { diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index ea2f9bdd..346a1a23 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -19,7 +19,7 @@ #define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes #define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet -#define TIMER_PERIOD 200000 ///< 500 = 1ms@500kHz +#define TIMER_PERIOD 200000 ///< 500 = 1ms@500kHz #define BLE_TX_PERIOD 1 #define BLE_CALIBRATE_LC false @@ -52,7 +52,7 @@ typedef struct { uint8_t tx_mid; uint8_t tx_fine; - uint8_t rx_iteration; + uint16_t rx_iteration; } app_vars_t; app_vars_t app_vars; @@ -62,6 +62,8 @@ app_vars_t app_vars; void cb_startFrame_rx(uint32_t timestamp); void cb_endFrame_rx(uint32_t timestamp); void cb_timer(void); +void receive_154_packet(void); +void transmit_ble_packet(void); //=========================== main ============================================ @@ -164,15 +166,15 @@ int main(void) { #endif while (1) { - printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); - while (app_vars.rxFrameStarted); - radio_rfOff(); - LC_FREQCHANGE(app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); - radio_rxEnable(); - radio_rxNow(); + receive_154_packet(); rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); app_vars.changeConfig = false; while (!app_vars.changeConfig); + + ++app_vars.rx_iteration; + if (app_vars.rx_iteration % BLE_TX_PERIOD == 0) { + transmit_ble_packet(); + } } } @@ -231,34 +233,42 @@ void cb_endFrame_rx(uint32_t timestamp){ } void cb_timer(void) { - int tx_fine, t, i; app_vars.changeConfig = true; +} - app_vars.rx_iteration = (app_vars.rx_iteration + 1) % BLE_TX_PERIOD; +void receive_154_packet(void) { + printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + while (app_vars.rxFrameStarted); + radio_rfOff(); + LC_FREQCHANGE(app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + radio_rxEnable(); + radio_rxNow(); +} - if (app_vars.rx_iteration == 0) { - ble_gen_packet(); +void transmit_ble_packet(void) { + int i, t, tx_fine; + + ble_gen_packet(); #if BLE_SWEEP_FINE - for (tx_fine = 0; tx_fine < 32; ++tx_fine) { - LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, tx_fine); - printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + for (tx_fine = 0; tx_fine < 32; ++tx_fine) { + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, tx_fine); - // Wait for frequency to settle. - for (t = 0; t < 5000; ++t); + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); - ble_transmit(); - } + ble_transmit(); + } #else - for (i = 0; i < BLE_NUM_REPEAT; ++i) { - LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); - printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + for (i = 0; i < BLE_NUM_REPEAT; ++i) { + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); - // Wait for frequency to settle. - for (t = 0; t < 5000; ++t); + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); - ble_transmit(); - } -#endif + ble_transmit(); } +#endif } From c5d0f48ebf31b7a17eb5ca83e68687f3e9fb9cb5 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Tue, 25 Feb 2020 23:13:45 -0800 Subject: [PATCH 17/26] Fix typos in the other projects --- .../freq_sweep_lc_count/freq_sweep_lc_count.c | 2 +- .../freq_sweep_lc_count.uvoptx | 24 +++++++++++++++++++ .../freq_sweep_lc_count.uvprojx | 10 ++++++++ .../freq_sweep_rx/freq_sweep_rx.c | 2 +- .../freq_sweep_rx/freq_sweep_rx.uvoptx | 24 +++++++++++++++++++ .../freq_sweep_rx/freq_sweep_rx.uvprojx | 10 ++++++++ .../freq_sweep_tx/freq_sweep_tx.c | 2 +- .../freq_sweep_tx/freq_sweep_tx.uvoptx | 24 +++++++++++++++++++ .../freq_sweep_tx/freq_sweep_tx.uvprojx | 10 ++++++++ .../pingpong_test/pingpong_test.c | 2 +- .../pingpong_test/pingpong_test.uvoptx | 24 +++++++++++++++++++ .../pingpong_test/pingpong_test.uvprojx | 10 ++++++++ 12 files changed, 140 insertions(+), 4 deletions(-) diff --git a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.c b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.c index 16d95dcb..15ef1572 100644 --- a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.c +++ b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.c @@ -114,7 +114,7 @@ int main(void) { optical_enable(); // Wait for optical cal to finish - while(optical_getCalibrationFinshed() == 0); + while(optical_getCalibrationFinished() == 0); printf("Cal complete\r\n"); diff --git a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvoptx b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvoptx index 06ebca09..3b08ccac 100644 --- a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvoptx +++ b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvoptx @@ -411,6 +411,30 @@ 0 0 + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + diff --git a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvprojx b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvprojx index fe5e6fb2..21f65979 100644 --- a/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvprojx +++ b/scm_v3c/applications/freq_sweep_lc_count/freq_sweep_lc_count.uvprojx @@ -481,6 +481,16 @@ 1 ..\..\scm3c_hw_interface.c + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + diff --git a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c index cd766239..bd05cc64 100644 --- a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c +++ b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c @@ -121,7 +121,7 @@ int main(void) { optical_enable(); // Wait for optical cal to finish - while(optical_getCalibrationFinshed() == 0); + while(optical_getCalibrationFinished() == 0); printf("Cal complete\r\n"); diff --git a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvoptx b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvoptx index ea55370c..44c6aa13 100644 --- a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvoptx +++ b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvoptx @@ -411,6 +411,30 @@ 0 0 + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + diff --git a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvprojx b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvprojx index cf5d8db9..ffea37d3 100644 --- a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvprojx +++ b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.uvprojx @@ -481,6 +481,16 @@ 1 ..\..\scm3c_hw_interface.c + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + diff --git a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.c b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.c index 56d13358..33d7d328 100644 --- a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.c +++ b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.c @@ -108,7 +108,7 @@ int main(void) { optical_enable(); // Wait for optical cal to finish - while(optical_getCalibrationFinshed() == 0); + while(optical_getCalibrationFinished() == 0); printf("Cal complete\r\n"); diff --git a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvoptx b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvoptx index 1bb251ac..5740c3fb 100644 --- a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvoptx +++ b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvoptx @@ -411,6 +411,30 @@ 0 0 + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + diff --git a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvprojx b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvprojx index 06aed430..132e3e32 100644 --- a/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvprojx +++ b/scm_v3c/applications/freq_sweep_tx/freq_sweep_tx.uvprojx @@ -481,6 +481,16 @@ 1 ..\..\scm3c_hw_interface.c + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + diff --git a/scm_v3c/applications/pingpong_test/pingpong_test.c b/scm_v3c/applications/pingpong_test/pingpong_test.c index 610acb1a..21798a8c 100644 --- a/scm_v3c/applications/pingpong_test/pingpong_test.c +++ b/scm_v3c/applications/pingpong_test/pingpong_test.c @@ -117,7 +117,7 @@ int main(void) { optical_enable(); // Wait for optical cal to finish - while(optical_getCalibrationFinshed() == 0); + while(optical_getCalibrationFinished() == 0); printf("Cal complete\r\n"); diff --git a/scm_v3c/applications/pingpong_test/pingpong_test.uvoptx b/scm_v3c/applications/pingpong_test/pingpong_test.uvoptx index 114421e5..eeb3897a 100644 --- a/scm_v3c/applications/pingpong_test/pingpong_test.uvoptx +++ b/scm_v3c/applications/pingpong_test/pingpong_test.uvoptx @@ -411,6 +411,30 @@ 0 0 + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + diff --git a/scm_v3c/applications/pingpong_test/pingpong_test.uvprojx b/scm_v3c/applications/pingpong_test/pingpong_test.uvprojx index d05664e9..dbb4b43d 100644 --- a/scm_v3c/applications/pingpong_test/pingpong_test.uvprojx +++ b/scm_v3c/applications/pingpong_test/pingpong_test.uvprojx @@ -481,6 +481,16 @@ 1 ..\..\scm3c_hw_interface.c + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + From c987435261cf2a2c922040e49bc5b828b25c149d Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Tue, 25 Feb 2020 23:24:54 -0800 Subject: [PATCH 18/26] Track 15.4 RX frequency using weighted mean --- .../ble_tx_154_rx_track/ble_tx_154_rx_track.c | 318 ++++++++++ .../ble_tx_154_rx_track.uvoptx | 440 ++++++++++++++ .../ble_tx_154_rx_track.uvprojx | 549 ++++++++++++++++++ 3 files changed, 1307 insertions(+) create mode 100644 scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c create mode 100644 scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx create mode 100644 scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c new file mode 100644 index 00000000..7a09bd1b --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c @@ -0,0 +1,318 @@ +/** +\brief This program lets SCuM receive 15.4 packets and broadcast them as a BLE packet. +It tracks the RX frequency to set the TX frequency settings. +*/ + +#include + +#include "scm3c_hw_interface.h" +#include "memory_map.h" +#include "ble.h" +#include "rftimer.h" +#include "radio.h" +#include "optical.h" + +//=========================== defines ========================================= + +#define CRC_VALUE (*((unsigned int *) 0x0000FFFC)) +#define CODE_LENGTH (*((unsigned int *) 0x0000FFF8)) + +#define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes +#define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet + +#define TIMER_PERIOD 200000 ///< 500 = 1ms@500kHz + +#define BLE_TX_PERIOD 1 +#define BLE_CALIBRATE_LC false + +#define CALIBRATE_PERIOD 20 +#define CALIBRATE_RX_DIFF 5 / 2 ///< calibrate up to +-2 fine codes +#define CALIBRATE_MIN_SUCCESS 10 ///< total number of received frames for calibration success + +//=========================== variables ======================================= + +typedef struct { + uint8_t packet[LENGTH_PACKET]; + uint8_t packet_len; + int8_t rxpk_rssi; + uint8_t rxpk_lqi; + + volatile bool rxpk_crc; + // a flag to mark when to change configure + volatile bool changeConfig; + // a flag to avoid change configure during receiving frame + volatile bool rxFrameStarted; + + volatile uint32_t IF_estimate; + volatile uint32_t LQI_chip_errors; + volatile uint32_t cdr_tau_value; + + uint8_t rx_coarse; + uint8_t rx_mid; + uint8_t rx_fine; + + uint8_t tx_coarse; + uint8_t tx_mid; + uint8_t tx_fine; + + uint16_t rx_iteration; + bool rx_received; + uint8_t rx_num_received; +} app_vars_t; + +app_vars_t app_vars; + +//=========================== prototypes ====================================== + +void cb_startFrame_rx(uint32_t timestamp); +void cb_endFrame_rx(uint32_t timestamp); +void cb_timer(void); +void receive_154_packet(void); +void transmit_ble_packet(void); +void calibrate_fine_code(void); + +//=========================== main ============================================ + +int main(void) { + + uint32_t calc_crc; + + uint8_t i; + uint8_t j; + uint8_t offset; + int t; + + memset(&app_vars, 0, sizeof(app_vars_t)); + + printf("Initializing..."); + + // Set up mote configuration + // This function handles all the analog scan chain setup + initialize_mote(); + ble_init_tx(); + + radio_setStartFrameRxCb(cb_startFrame_rx); + radio_setEndFrameRxCb(cb_endFrame_rx); + rftimer_set_callback(cb_timer); + + // Disable interrupts for the radio and rftimer + radio_disable_interrupts(); + rftimer_disable_interrupts(); + + // Check CRC to ensure there were no errors during optical programming + printf("\r\n-------------------\r\n"); + printf("Validating program integrity..."); + + calc_crc = crc32c(0x0000,CODE_LENGTH); + + if (calc_crc == CRC_VALUE){ + printf("CRC OK\r\n"); + } else { + printf("\r\nProgramming Error - CRC DOES NOT MATCH - Halting Execution\r\n"); + while(1); + } + + // Debug output + // printf("\r\nCode length is %u bytes",code_length); + // printf("\r\nCRC calculated by SCM is: 0x%X",calc_crc); + + //printf("done\r\n"); + + // After bootloading the next thing that happens is frequency calibration using optical + printf("Calibrating frequencies...\r\n"); + + // Initial frequency calibration will tune the frequencies for HCLK, the RX/TX chip clocks, and the LO + + // For the LO, calibration for RX channel 11, so turn on AUX, IF, and LO LDOs + // by calling radio rxEnable + radio_rxEnable(); + +#if BLE_CALIBRATE_LC + optical_enableLCCalibration(); + + // Turn on LDOs for calibration + radio_txEnable(); + + // Turn on LO, DIV, PA, and IF + ANALOG_CFG_REG__10 = 0x78; + + // For TX, LC target freq = 2.402G - 0.25M = 2.40175 GHz. + optical_setLCTarget(250020); +#endif + + // Enable optical SFD interrupt for optical calibration + optical_enable(); + + // Wait for optical cal to finish + while(!optical_getCalibrationFinished()); + + printf("Cal complete\r\n"); + + // Disable static divider to save power + divProgram(480, 0, 0); + + // Enable interrupts for the radio FSM + radio_enable_interrupts(); + + // Configure coarse, mid, and fine codes for RX. + app_vars.rx_coarse = 23; + app_vars.rx_mid = 15; + app_vars.rx_fine = 15; + + // Configure coarse, mid, and fine codes for TX. +#if BLE_CALIBRATE_LC + app_vars.tx_coarse = optical_getLCCoarse(); + app_vars.tx_mid = optical_getLCMid(); + app_vars.tx_fine = optical_getLCFine(); +#else + // CHANGE THESE VALUES AFTER LC CALIBRATION. + app_vars.tx_coarse = 23; + app_vars.tx_mid = 11; + app_vars.tx_fine = 23; +#endif + + while (1) { + receive_154_packet(); + rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); + app_vars.changeConfig = false; + while (!app_vars.changeConfig); + + ++app_vars.rx_iteration; + if (app_vars.rx_iteration % BLE_TX_PERIOD == 0) { + transmit_ble_packet(); + } + if (app_vars.rx_iteration % CALIBRATE_PERIOD == 0) { + calibrate_fine_code(); + } + } +} + +//=========================== public ========================================== + +//=========================== private ========================================= + +void cb_startFrame_rx(uint32_t timestamp){ + app_vars.rxFrameStarted = true; +} + +void cb_endFrame_rx(uint32_t timestamp){ + + uint8_t i; + + radio_getReceivedFrame( + &(app_vars.packet[0]), + &app_vars.packet_len, + sizeof(app_vars.packet), + &app_vars.rxpk_rssi, + &app_vars.rxpk_lqi + ); + + radio_rfOff(); + + if ( + app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) + ) { + // Only record IF estimate, LQI, and CDR tau for valid packets + app_vars.IF_estimate = radio_getIFestimate(); + app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + + printf( + "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", + app_vars.packet[4], + app_vars.packet[0], + app_vars.packet[1], + app_vars.packet[2], + app_vars.packet[3], + app_vars.rx_coarse, + app_vars.rx_mid, + app_vars.rx_fine + ); + + ble_set_data(app_vars.packet); + ble_set_data_tx_en(true); + + app_vars.packet_len = 0; + memset(&app_vars.packet[0], 0, LENGTH_PACKET); + + app_vars.rx_received = true; + ++app_vars.rx_num_received; + } + + radio_rxEnable(); + radio_rxNow(); + + app_vars.rxFrameStarted = false; +} + +void cb_timer(void) { + app_vars.changeConfig = true; +} + +void receive_154_packet(void) { + printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + while (app_vars.rxFrameStarted); + radio_rfOff(); + app_vars.rx_received = false; + app_vars.rx_num_received = 0; + LC_FREQCHANGE(app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + radio_rxEnable(); + radio_rxNow(); +} + +void transmit_ble_packet(void) { + int t; + + ble_gen_packet(); + + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); +} + +void calibrate_fine_code(void) { + uint8_t fine, current_fine; + int diff_fine; + uint16_t cumulative_fines, received_frames; + + // Find the middle of the set of fines codes to calibrate with. + if (app_vars.rx_fine > 31 - CALIBRATE_RX_DIFF) { + fine = 31 - CALIBRATE_RX_DIFF; + } else if (app_vars.rx_fine < CALIBRATE_RX_DIFF) { + fine = CALIBRATE_RX_DIFF; + } else { + fine = app_vars.rx_fine; + } + + // Listen for 2 * TIMER_PERIOD at +-CALIBRATE_RX_DIFF fine codes for packets. + // Note the fine codes where packets were received and set the new fine code as their mean. + // Adjust the TX fine code by the same amount. + // Note that fine code adjustment only works if at least CALIBRATE_MIN_SUCCESS packets were received. + current_fine = app_vars.rx_fine; + cumulative_fines = 0; + received_frames = 0; + for (app_vars.rx_fine = fine - CALIBRATE_RX_DIFF; app_vars.rx_fine <= fine + CALIBRATE_RX_DIFF; ++app_vars.rx_fine) { + printf("Calibrating on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + receive_154_packet(); + rftimer_setCompareIn(rftimer_readCounter() + 2 * TIMER_PERIOD); + app_vars.changeConfig = false; + while (!app_vars.changeConfig); + if (app_vars.rx_received) { + cumulative_fines += app_vars.rx_num_received * app_vars.rx_fine; + received_frames += app_vars.rx_num_received; + } + } + printf("Cumulative fines: %u, received frames: %u\n", cumulative_fines, received_frames); + + if (received_frames >= CALIBRATE_MIN_SUCCESS) { + app_vars.rx_fine = cumulative_fines / received_frames; + diff_fine = (int) app_vars.rx_fine - current_fine; + app_vars.tx_fine += diff_fine; + printf("Diff fine: %d, RX fine: %u, TX fine: %u\n", diff_fine, app_vars.rx_fine, app_vars.tx_fine); + } else { + app_vars.rx_fine = current_fine; + } +} diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx new file mode 100644 index 00000000..7a69621f --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx @@ -0,0 +1,440 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ble_tx_154_rx_track + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + app + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 1 + 0 + 0 + .\ble_tx_154_rx_track.c + ble_tx_154_rx_track.c + 0 + 0 + + + + + drv + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + ..\..\cm0dsasm.s + cm0dsasm.s + 0 + 0 + + + 2 + 3 + 5 + 0 + 0 + 0 + ..\..\Memory_Map.h + Memory_Map.h + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\retarget.c + retarget.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\optical.c + optical.c + 0 + 0 + + + 2 + 6 + 5 + 0 + 0 + 0 + ..\..\optical.h + optical.h + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\radio.c + radio.c + 0 + 0 + + + 2 + 8 + 5 + 0 + 0 + 0 + ..\..\radio.h + radio.h + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\adc.c + adc.c + 0 + 0 + + + 2 + 10 + 5 + 0 + 0 + 0 + ..\..\adc.h + adc.h + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\gpio.c + gpio.c + 0 + 0 + + + 2 + 12 + 5 + 0 + 0 + 0 + ..\..\gpio.h + gpio.h + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ..\..\uart.c + uart.c + 0 + 0 + + + 2 + 14 + 5 + 0 + 0 + 0 + ..\..\uart.h + uart.h + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ..\..\rftimer.c + rftimer.c + 0 + 0 + + + 2 + 16 + 5 + 0 + 0 + 0 + ..\..\rftimer.h + rftimer.h + 0 + 0 + + + 2 + 17 + 5 + 0 + 0 + 0 + ..\..\scum_defs.h + scum_defs.h + 0 + 0 + + + 2 + 18 + 5 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.h + scm3c_hw_interface.h + 0 + 0 + + + 2 + 19 + 1 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.c + scm3c_hw_interface.c + 0 + 0 + + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + + + +
diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx new file mode 100644 index 00000000..c6eb1404 --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx @@ -0,0 +1,549 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_tx_154_rx_track + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.0 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + ble_tx_154_rx_track + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin .\Objects\ble_tx_154_rx_track.axf -o .\Objects\ble_tx_154_rx_track.bin + fromelf -cvf .\Objects\ble_tx_154_rx_track.axf -o .\Objects\disasm.txt + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 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 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ../../ + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + freq_sweep_rx.sct + + + + + + + + + + + app + + + ble_tx_154_rx_track.c + 1 + .\ble_tx_154_rx_track.c + + + + + drv + + + cm0dsasm.s + 2 + ..\..\cm0dsasm.s + + + Memory_Map.h + 5 + ..\..\Memory_Map.h + + + retarget.c + 1 + ..\..\retarget.c + + + optical.c + 1 + ..\..\optical.c + + + optical.h + 5 + ..\..\optical.h + + + radio.c + 1 + ..\..\radio.c + + + radio.h + 5 + ..\..\radio.h + + + adc.c + 1 + ..\..\adc.c + + + adc.h + 5 + ..\..\adc.h + + + gpio.c + 1 + ..\..\gpio.c + + + gpio.h + 5 + ..\..\gpio.h + + + uart.c + 1 + ..\..\uart.c + + + uart.h + 5 + ..\..\uart.h + + + rftimer.c + 1 + ..\..\rftimer.c + + + rftimer.h + 5 + ..\..\rftimer.h + + + scum_defs.h + 5 + ..\..\scum_defs.h + + + scm3c_hw_interface.h + 5 + ..\..\scm3c_hw_interface.h + + + scm3c_hw_interface.c + 1 + ..\..\scm3c_hw_interface.c + + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + + + + + + + + + + + + + RTE\CMSIS\RTX_Conf_CM.c + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + RTE\Drivers\NAND_MemBus_Config.h + + + + + + RTE\Drivers\OneNAND_Config.h + + + + + + RTE\File_System\FS_Config.c + + + + + + RTE\File_System\FS_Config_RAM.h + + + + + + + +
From cd9a6d7c376c2ecdb68bf47744adda17364d73fb Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sat, 29 Feb 2020 17:32:51 -0800 Subject: [PATCH 19/26] Rename project to ble_tx_154_rx_track_mean --- .../ble_tx_154_rx_track_mean.c} | 3 ++- .../ble_tx_154_rx_track_mean.uvoptx} | 6 +++--- .../ble_tx_154_rx_track_mean.uvprojx} | 12 ++++++------ 3 files changed, 11 insertions(+), 10 deletions(-) rename scm_v3c/applications/{ble_tx_154_rx_track/ble_tx_154_rx_track.c => ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c} (98%) rename scm_v3c/applications/{ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx => ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvoptx} (98%) rename scm_v3c/applications/{ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx => ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvprojx} (98%) diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c similarity index 98% rename from scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c rename to scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c index 7a09bd1b..8fdd6e51 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c @@ -1,6 +1,7 @@ /** \brief This program lets SCuM receive 15.4 packets and broadcast them as a BLE packet. -It tracks the RX frequency to set the TX frequency settings. +It tracks the RX frequency by averaging over received packets in a a range around the current +fine code. It then finds the difference in the RX fine code and adjusts the TX fine code. */ #include diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvoptx similarity index 98% rename from scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx rename to scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvoptx index 7a69621f..1f663724 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvoptx +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvoptx @@ -22,7 +22,7 @@ - ble_tx_154_rx_track + ble_tx_154_rx_track_mean 0x4 ARM-ADS @@ -182,8 +182,8 @@ 1 0 0 - .\ble_tx_154_rx_track.c - ble_tx_154_rx_track.c + .\ble_tx_154_rx_track_mean.c + ble_tx_154_rx_track_mean.c 0 0 diff --git a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvprojx similarity index 98% rename from scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx rename to scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvprojx index c6eb1404..5cce121f 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track/ble_tx_154_rx_track.uvprojx +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.uvprojx @@ -7,7 +7,7 @@ - ble_tx_154_rx_track + ble_tx_154_rx_track_mean 0x4 ARM-ADS 5060750::V5.06 update 6 (build 750)::ARMCC @@ -49,7 +49,7 @@ 1 .\Objects\ - ble_tx_154_rx_track + ble_tx_154_rx_track_mean 1 0 1 @@ -82,8 +82,8 @@ 1 1 - fromelf --bin .\Objects\ble_tx_154_rx_track.axf -o .\Objects\ble_tx_154_rx_track.bin - fromelf -cvf .\Objects\ble_tx_154_rx_track.axf -o .\Objects\disasm.txt + fromelf --bin .\Objects\ble_tx_154_rx_track_mean.axf -o .\Objects\ble_tx_154_rx_track_mean.bin + fromelf -cvf .\Objects\ble_tx_154_rx_track_mean.axf -o .\Objects\disasm.txt 0 0 0 @@ -382,9 +382,9 @@ app - ble_tx_154_rx_track.c + ble_tx_154_rx_track_mean.c 1 - .\ble_tx_154_rx_track.c + .\ble_tx_154_rx_track_mean.c From 9c978e165db5ae065414d443584e4a2ca37183ce Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Tue, 3 Mar 2020 13:57:40 -0800 Subject: [PATCH 20/26] Initial attempt at estimating IF offset --- .../ble_tx_154_rx_track_if.c | 295 ++++++++++ .../ble_tx_154_rx_track_if.uvoptx | 440 ++++++++++++++ .../ble_tx_154_rx_track_if.uvprojx | 549 ++++++++++++++++++ scm_v3c/radio.c | 59 +- scm_v3c/radio.h | 3 + 5 files changed, 1341 insertions(+), 5 deletions(-) create mode 100644 scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c create mode 100644 scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvoptx create mode 100644 scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvprojx diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c new file mode 100644 index 00000000..cbca4317 --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -0,0 +1,295 @@ +/** +\brief This program lets SCuM receive 15.4 packets and broadcast them as a BLE packet. +It tracks the RX frequency by averaging over received packets in a a range around the current +fine code. It then finds the difference in the RX fine code and adjusts the TX fine code. +*/ + +#include + +#include "scm3c_hw_interface.h" +#include "memory_map.h" +#include "ble.h" +#include "rftimer.h" +#include "radio.h" +#include "optical.h" + +//=========================== defines ========================================= + +#define CRC_VALUE (*((unsigned int *) 0x0000FFFC)) +#define CODE_LENGTH (*((unsigned int *) 0x0000FFF8)) + +#define LENGTH_PACKET 125 + LENGTH_CRC ///< maximum length is 127 bytes +#define LEN_RX_PKT 20 + LENGTH_CRC ///< length of rx packet + +#define TIMER_PERIOD 200000 ///< 500 = 1ms@500kHz + +#define BLE_TX_PERIOD 1 +#define BLE_CALIBRATE_LC false + +#define CALIBRATE_PERIOD 20 +#define CALIBRATE_RX_DIFF 5 / 2 ///< calibrate up to +-2 fine codes +#define CALIBRATE_MIN_SUCCESS 10 ///< total number of received frames for calibration success + +//=========================== variables ======================================= + +typedef struct { + uint8_t packet[LENGTH_PACKET]; + uint8_t packet_len; + int8_t rxpk_rssi; + uint8_t rxpk_lqi; + + volatile bool rxpk_crc; + // a flag to mark when to change configure + volatile bool changeConfig; + // a flag to avoid change configure during receiving frame + volatile bool rxFrameStarted; + + volatile uint32_t IF_estimate; + volatile uint32_t LQI_chip_errors; + volatile uint32_t cdr_tau_value; + + uint8_t rx_coarse; + uint8_t rx_mid; + uint8_t rx_fine; + + uint8_t tx_coarse; + uint8_t tx_mid; + uint8_t tx_fine; + + uint16_t rx_iteration; + bool rx_received; + uint8_t rx_num_received; +} app_vars_t; + +app_vars_t app_vars; + +//=========================== prototypes ====================================== + +void cb_startFrame_rx(uint32_t timestamp); +void cb_endFrame_rx(uint32_t timestamp); +void cb_timer(void); +void receive_154_packet(void); +void transmit_ble_packet(void); +void calibrate_fine_code(void); + +//=========================== main ============================================ + +int main(void) { + + uint32_t calc_crc; + + uint8_t i; + uint8_t j; + uint8_t offset; + int t; + + memset(&app_vars, 0, sizeof(app_vars_t)); + + printf("Initializing..."); + + // Set up mote configuration + // This function handles all the analog scan chain setup + initialize_mote(); + ble_init_tx(); + + radio_setStartFrameRxCb(cb_startFrame_rx); + radio_setEndFrameRxCb(cb_endFrame_rx); + rftimer_set_callback(cb_timer); + + // Disable interrupts for the radio and rftimer + radio_disable_interrupts(); + rftimer_disable_interrupts(); + + // Check CRC to ensure there were no errors during optical programming + printf("\r\n-------------------\r\n"); + printf("Validating program integrity..."); + + calc_crc = crc32c(0x0000,CODE_LENGTH); + + if (calc_crc == CRC_VALUE){ + printf("CRC OK\r\n"); + } else { + printf("\r\nProgramming Error - CRC DOES NOT MATCH - Halting Execution\r\n"); + while(1); + } + + // Debug output + // printf("\r\nCode length is %u bytes",code_length); + // printf("\r\nCRC calculated by SCM is: 0x%X",calc_crc); + + //printf("done\r\n"); + + // After bootloading the next thing that happens is frequency calibration using optical + printf("Calibrating frequencies...\r\n"); + + // Initial frequency calibration will tune the frequencies for HCLK, the RX/TX chip clocks, and the LO + + // For the LO, calibration for RX channel 11, so turn on AUX, IF, and LO LDOs + // by calling radio rxEnable + radio_rxEnable(); + +#if BLE_CALIBRATE_LC + optical_enableLCCalibration(); + + // Turn on LDOs for calibration + radio_txEnable(); + + // Turn on LO, DIV, PA, and IF + ANALOG_CFG_REG__10 = 0x78; + + // For TX, LC target freq = 2.402G - 0.25M = 2.40175 GHz. + optical_setLCTarget(250020); +#endif + + // Enable optical SFD interrupt for optical calibration + optical_enable(); + + // Wait for optical cal to finish + while(!optical_getCalibrationFinished()); + + printf("Cal complete\r\n"); + + // Disable static divider to save power + divProgram(480, 0, 0); + + // Enable interrupts for the radio FSM + radio_enable_interrupts(); + + // Configure coarse, mid, and fine codes for RX. + app_vars.rx_coarse = 23; + app_vars.rx_mid = 15; + app_vars.rx_fine = 15; + + // Configure coarse, mid, and fine codes for TX. +#if BLE_CALIBRATE_LC + app_vars.tx_coarse = optical_getLCCoarse(); + app_vars.tx_mid = optical_getLCMid(); + app_vars.tx_fine = optical_getLCFine(); +#else + // CHANGE THESE VALUES AFTER LC CALIBRATION. + app_vars.tx_coarse = 23; + app_vars.tx_mid = 11; + app_vars.tx_fine = 23; +#endif + + while (1) { + receive_154_packet(); + rftimer_setCompareIn(rftimer_readCounter() + TIMER_PERIOD); + app_vars.changeConfig = false; + while (!app_vars.changeConfig); + + ++app_vars.rx_iteration; + if (false && (app_vars.rx_iteration % BLE_TX_PERIOD == 0)) { + transmit_ble_packet(); + } + if (app_vars.rx_iteration % CALIBRATE_PERIOD == 0) { + calibrate_fine_code(); + } + } +} + +//=========================== public ========================================== + +//=========================== private ========================================= + +void cb_startFrame_rx(uint32_t timestamp){ + app_vars.rxFrameStarted = true; +} + +void cb_endFrame_rx(uint32_t timestamp){ + + uint8_t i; + + radio_getReceivedFrame( + &(app_vars.packet[0]), + &app_vars.packet_len, + sizeof(app_vars.packet), + &app_vars.rxpk_rssi, + &app_vars.rxpk_lqi + ); + + radio_rfOff(); + + if ( + app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) + ) { + // Only record IF estimate, LQI, and CDR tau for valid packets + app_vars.IF_estimate = radio_getIFestimate(); + app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + + printf( + "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", + app_vars.packet[4], + app_vars.packet[0], + app_vars.packet[1], + app_vars.packet[2], + app_vars.packet[3], + app_vars.rx_coarse, + app_vars.rx_mid, + app_vars.rx_fine + ); + printf("IF estimate: %u, LQI: %d\n", app_vars.IF_estimate, app_vars.LQI_chip_errors); + + ble_set_data(app_vars.packet); + ble_set_data_tx_en(true); + + app_vars.packet_len = 0; + memset(&app_vars.packet[0], 0, LENGTH_PACKET); + + app_vars.rx_received = true; + ++app_vars.rx_num_received; + + radio_update_IF_estimate(app_vars.IF_estimate, app_vars.LQI_chip_errors); + } + + radio_rxEnable(); + radio_rxNow(); + + app_vars.rxFrameStarted = false; +} + +void cb_timer(void) { + app_vars.changeConfig = true; +} + +void receive_154_packet(void) { + printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + while (app_vars.rxFrameStarted); + radio_rfOff(); + app_vars.rx_received = false; + app_vars.rx_num_received = 0; + LC_FREQCHANGE(app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); + radio_rxEnable(); + radio_rxNow(); +} + +void transmit_ble_packet(void) { + int t; + + ble_gen_packet(); + + LC_FREQCHANGE(app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + printf("Transmitting on %u %u %u\n", app_vars.tx_coarse, app_vars.tx_mid, app_vars.tx_fine); + + // Wait for frequency to settle. + for (t = 0; t < 5000; ++t); + + ble_transmit(); +} + +void calibrate_fine_code(void) { + if (radio_get_IF_estimate_ready()) { + int IF_offset = radio_get_IF_estimate(); + + if (IF_offset < -20) { + --app_vars.rx_fine; + --app_vars.tx_fine; + } else if (IF_offset > 20) { + ++app_vars.rx_fine; + ++app_vars.tx_fine; + } + printf("IF offset: %d, ", IF_offset); + } + + printf("RX fine: %u, TX fine: %u\n", app_vars.rx_fine, app_vars.tx_fine); +} diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvoptx b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvoptx new file mode 100644 index 00000000..24f3cc31 --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvoptx @@ -0,0 +1,440 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ble_tx_154_rx_track_if + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + app + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 1 + 0 + 0 + .\ble_tx_154_rx_track_if.c + ble_tx_154_rx_track_if.c + 0 + 0 + + + + + drv + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + ..\..\cm0dsasm.s + cm0dsasm.s + 0 + 0 + + + 2 + 3 + 5 + 0 + 0 + 0 + ..\..\Memory_Map.h + Memory_Map.h + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\retarget.c + retarget.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\optical.c + optical.c + 0 + 0 + + + 2 + 6 + 5 + 0 + 0 + 0 + ..\..\optical.h + optical.h + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\radio.c + radio.c + 0 + 0 + + + 2 + 8 + 5 + 0 + 0 + 0 + ..\..\radio.h + radio.h + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\adc.c + adc.c + 0 + 0 + + + 2 + 10 + 5 + 0 + 0 + 0 + ..\..\adc.h + adc.h + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\gpio.c + gpio.c + 0 + 0 + + + 2 + 12 + 5 + 0 + 0 + 0 + ..\..\gpio.h + gpio.h + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ..\..\uart.c + uart.c + 0 + 0 + + + 2 + 14 + 5 + 0 + 0 + 0 + ..\..\uart.h + uart.h + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ..\..\rftimer.c + rftimer.c + 0 + 0 + + + 2 + 16 + 5 + 0 + 0 + 0 + ..\..\rftimer.h + rftimer.h + 0 + 0 + + + 2 + 17 + 5 + 0 + 0 + 0 + ..\..\scum_defs.h + scum_defs.h + 0 + 0 + + + 2 + 18 + 5 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.h + scm3c_hw_interface.h + 0 + 0 + + + 2 + 19 + 1 + 0 + 0 + 0 + ..\..\scm3c_hw_interface.c + scm3c_hw_interface.c + 0 + 0 + + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\ble.c + ble.c + 0 + 0 + + + 2 + 21 + 5 + 0 + 0 + 0 + ..\..\ble.h + ble.h + 0 + 0 + + + +
diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvprojx b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvprojx new file mode 100644 index 00000000..ace3c9d2 --- /dev/null +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.uvprojx @@ -0,0 +1,549 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_tx_154_rx_track_if + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.0 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + ble_tx_154_rx_track_if + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin .\Objects\ble_tx_154_rx_track_if.axf -o .\Objects\ble_tx_154_rx_track_if.bin + fromelf -cvf .\Objects\ble_tx_154_rx_track_if.axf -o .\Objects\disasm.txt + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 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 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ../../ + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + freq_sweep_rx.sct + + + + + + + + + + + app + + + ble_tx_154_rx_track_if.c + 1 + .\ble_tx_154_rx_track_if.c + + + + + drv + + + cm0dsasm.s + 2 + ..\..\cm0dsasm.s + + + Memory_Map.h + 5 + ..\..\Memory_Map.h + + + retarget.c + 1 + ..\..\retarget.c + + + optical.c + 1 + ..\..\optical.c + + + optical.h + 5 + ..\..\optical.h + + + radio.c + 1 + ..\..\radio.c + + + radio.h + 5 + ..\..\radio.h + + + adc.c + 1 + ..\..\adc.c + + + adc.h + 5 + ..\..\adc.h + + + gpio.c + 1 + ..\..\gpio.c + + + gpio.h + 5 + ..\..\gpio.h + + + uart.c + 1 + ..\..\uart.c + + + uart.h + 5 + ..\..\uart.h + + + rftimer.c + 1 + ..\..\rftimer.c + + + rftimer.h + 5 + ..\..\rftimer.h + + + scum_defs.h + 5 + ..\..\scum_defs.h + + + scm3c_hw_interface.h + 5 + ..\..\scm3c_hw_interface.h + + + scm3c_hw_interface.c + 1 + ..\..\scm3c_hw_interface.c + + + ble.c + 1 + ..\..\ble.c + + + ble.h + 5 + ..\..\ble.h + + + + + + + + + + + + + RTE\CMSIS\RTX_Conf_CM.c + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + RTE\Drivers\NAND_MemBus_Config.h + + + + + + RTE\Drivers\OneNAND_Config.h + + + + + + RTE\File_System\FS_Config.c + + + + + + RTE\File_System\FS_Config_RAM.h + + + + + + + +
diff --git a/scm_v3c/radio.c b/scm_v3c/radio.c index ffe8a5f5..07bafb0e 100644 --- a/scm_v3c/radio.c +++ b/scm_v3c/radio.c @@ -17,9 +17,11 @@ unsigned int acfg3_val; // These coefficients are used for filtering frequency feedback information // These are no necessarily the ideal values to use; situationally dependent -unsigned char FIR_coeff[11] = {4,16,37,64,87,96,87,64,37,16,4}; -unsigned int IF_estimate_history[11] = {500,500,500,500,500,500,500,500,500,500}; -signed short cdr_tau_history[11] = {0}; +#define FILTER_WINDOWS_LEN 11 + +uint8_t FIR_coeff[FILTER_WINDOWS_LEN] = {4,16,37,64,87,96,87,64,37,16,4}; +uint32_t IF_estimate_history[FILTER_WINDOWS_LEN] = {500,500,500,500,500,500,500,500,500,500}; +int16_t cdr_tau_history[FILTER_WINDOWS_LEN] = {0}; //=========================== definition ====================================== @@ -47,7 +49,6 @@ signed short cdr_tau_history[11] = {0}; #define IF_FREQ_UPDATE_TIMEOUT 10 #define LO_FREQ_UPDATE_TIMEOUT 10 -#define FILTER_WINDOWS_LEN 11 #define FIR_COEFF_SCALE 512 // determined by FIR_coeff #define LC_CODE_RX 700 //Board Q3: tested at Inria A102 room (Oct, 16 2019) @@ -78,11 +79,14 @@ typedef struct { uint32_t rx_channel_codes[NUM_CHANNELS]; uint32_t tx_channel_codes[NUM_CHANNELS]; - + // How many packets must be received before adjusting RX clock rates // Should be at least as long as the FIR filters volatile uint16_t frequency_update_rate; volatile uint16_t frequency_update_cooldown_timer; + + int IF_est_filtered; + bool IF_est_filtered_ready; } radio_vars_t; radio_vars_t radio_vars; @@ -272,6 +276,51 @@ void radio_rfOff(){ ANALOG_CFG_REG__10 = 0x0000; } +int radio_update_IF_estimate(uint32_t IF_estimate, uint32_t LQI_chip_errors) { + int sum = 0; + int i; + + if (LQI_chip_errors < 25) { + // When updating LO and IF clock frequncies, must wait long enough for the changes to propagate before changing again + // Need to receive as many packets as there are taps in the FIR filter + ++radio_vars.frequency_update_cooldown_timer; + + // Shift old samples + for (i = 9; i >= 0; --i){ + IF_estimate_history[i + 1] = IF_estimate_history[i]; + } + + // New sample + IF_estimate_history[0] = IF_estimate; + + // Do FIR convolution + for (i = 0; i < FILTER_WINDOWS_LEN; ++i){ + sum = sum + IF_estimate_history[i] * FIR_coeff[i]; + } + + // Divide by 512 (sum of the coefficients) to scale output + radio_vars.IF_est_filtered = sum / 512; + + if (radio_vars.frequency_update_cooldown_timer >= radio_vars.frequency_update_rate) { + radio_vars.IF_est_filtered_ready = true; + } + } +} + +bool radio_get_IF_estimate_ready(void) { + return radio_vars.IF_est_filtered_ready; +} + +int radio_get_IF_estimate(void) { + radio_vars.IF_est_filtered_ready = false; + radio_vars.frequency_update_cooldown_timer = 0; + + // Reset IF_est_filtered until as many packets arrive as there are taps in the FIR filter + // The IF estimate reports how many zero crossings (both pos and neg) there were in a 100us period + // The IF should on average be 2.5 MHz, which means the IF estimate will return ~500 when there is no IF error + return radio_vars.IF_est_filtered - 500; +} + void radio_frequency_housekeeping( uint32_t IF_estimate, uint32_t LQI_chip_errors, diff --git a/scm_v3c/radio.h b/scm_v3c/radio.h index be657e6f..8393e383 100644 --- a/scm_v3c/radio.h +++ b/scm_v3c/radio.h @@ -39,6 +39,9 @@ uint32_t radio_getLQIchipErrors(void); int16_t radio_get_cdr_tau_value(void); //==== frequency +int radio_update_IF_estimate(uint32_t IF_estimate, uint32_t LQI_chip_errors); +bool radio_get_IF_estimate_ready(void); +int radio_get_IF_estimate(void); void radio_frequency_housekeeping( uint32_t IF_estimate, uint32_t LQI_chip_errors, From be20cf924a9fed8b4ab40a0e1400f7f2f25ee766 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Thu, 5 Mar 2020 16:51:29 -0800 Subject: [PATCH 21/26] Read IF estimate and LQI before turning the radio off --- scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c | 9 +++++++-- .../ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c | 9 +++++++-- .../ble_tx_154_rx_track_mean.c | 9 +++++++-- scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c | 13 +++++++++---- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c index 346a1a23..96e6c24b 100644 --- a/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c +++ b/scm_v3c/applications/ble_tx_154_rx/ble_tx_154_rx.c @@ -189,6 +189,7 @@ void cb_startFrame_rx(uint32_t timestamp){ void cb_endFrame_rx(uint32_t timestamp){ uint8_t i; + uint32_t IF_estimate, LQI_chip_errors; radio_getReceivedFrame( &(app_vars.packet[0]), @@ -198,14 +199,18 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); + // Read IF estimate, and LQI + IF_estimate = radio_getIFestimate(); + LQI_chip_errors = radio_getLQIchipErrors(); + radio_rfOff(); if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { // Only record IF estimate, LQI, and CDR tau for valid packets - app_vars.IF_estimate = radio_getIFestimate(); - app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + app_vars.IF_estimate = IF_estimate; + app_vars.LQI_chip_errors = LQI_chip_errors; printf( "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c index cbca4317..120776cc 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -199,6 +199,7 @@ void cb_startFrame_rx(uint32_t timestamp){ void cb_endFrame_rx(uint32_t timestamp){ uint8_t i; + uint32_t IF_estimate, LQI_chip_errors; radio_getReceivedFrame( &(app_vars.packet[0]), @@ -208,14 +209,18 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); + // Read IF estimate, and LQI + IF_estimate = radio_getIFestimate(); + LQI_chip_errors = radio_getLQIchipErrors(); + radio_rfOff(); if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { // Only record IF estimate, LQI, and CDR tau for valid packets - app_vars.IF_estimate = radio_getIFestimate(); - app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + app_vars.IF_estimate = IF_estimate; + app_vars.LQI_chip_errors = LQI_chip_errors; printf( "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", diff --git a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c index 8fdd6e51..7539e482 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c @@ -199,6 +199,7 @@ void cb_startFrame_rx(uint32_t timestamp){ void cb_endFrame_rx(uint32_t timestamp){ uint8_t i; + uint32_t IF_estimate, LQI_chip_errors; radio_getReceivedFrame( &(app_vars.packet[0]), @@ -208,14 +209,18 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); + // Read IF estimate, and LQI + IF_estimate = radio_getIFestimate(); + LQI_chip_errors = radio_getLQIchipErrors(); + radio_rfOff(); if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { // Only record IF estimate, LQI, and CDR tau for valid packets - app_vars.IF_estimate = radio_getIFestimate(); - app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + app_vars.IF_estimate = IF_estimate; + app_vars.LQI_chip_errors = LQI_chip_errors; printf( "pkt received on ch%d %d%d%d%d.%d.%d.%d\r\n", diff --git a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c index bd05cc64..5da26c30 100644 --- a/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c +++ b/scm_v3c/applications/freq_sweep_rx/freq_sweep_rx.c @@ -168,7 +168,8 @@ void cb_startFrame_rx(uint32_t timestamp){ void cb_endFrame_rx(uint32_t timestamp){ uint8_t i; - + uint32_t IF_estimate, LQI_chip_errors; + radio_getReceivedFrame( &(app_vars.packet[0]), &app_vars.packet_len, @@ -176,15 +177,19 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_rssi, &app_vars.rxpk_lqi ); - + + // Read IF estimate, and LQI + IF_estimate = radio_getIFestimate(); + LQI_chip_errors = radio_getLQIchipErrors(); + radio_rfOff(); if( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ){ // Only record IF estimate, LQI, and CDR tau for valid packets - app_vars.IF_estimate = radio_getIFestimate(); - app_vars.LQI_chip_errors = radio_getLQIchipErrors(); + app_vars.IF_estimate = IF_estimate; + app_vars.LQI_chip_errors = LQI_chip_errors; printf( "pkt received on ch%d %c%c%c%c.%d.%d.%d\r\n", From bf6cf2bdf59f2acf9eec2f44dec7cf206940a4a5 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Fri, 6 Mar 2020 19:16:20 -0800 Subject: [PATCH 22/26] Verify frequency tracking using IF estimate --- .../ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c | 10 ++++------ scm_v3c/radio.c | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c index 120776cc..3b87ee77 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -26,9 +26,7 @@ fine code. It then finds the difference in the RX fine code and adjusts the TX f #define BLE_TX_PERIOD 1 #define BLE_CALIBRATE_LC false -#define CALIBRATE_PERIOD 20 -#define CALIBRATE_RX_DIFF 5 / 2 ///< calibrate up to +-2 fine codes -#define CALIBRATE_MIN_SUCCESS 10 ///< total number of received frames for calibration success +#define CALIBRATE_PERIOD 2 //=========================== variables ======================================= @@ -179,7 +177,7 @@ int main(void) { while (!app_vars.changeConfig); ++app_vars.rx_iteration; - if (false && (app_vars.rx_iteration % BLE_TX_PERIOD == 0)) { + if ((app_vars.rx_iteration % BLE_TX_PERIOD == 0)) { transmit_ble_packet(); } if (app_vars.rx_iteration % CALIBRATE_PERIOD == 0) { @@ -209,7 +207,7 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); - // Read IF estimate, and LQI + // Read IF estimate and LQI chip errors IF_estimate = radio_getIFestimate(); LQI_chip_errors = radio_getLQIchipErrors(); @@ -218,7 +216,7 @@ void cb_endFrame_rx(uint32_t timestamp){ if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { - // Only record IF estimate, LQI, and CDR tau for valid packets + // Only record IF estimate, LQI chip errors, and CDR tau for valid packets app_vars.IF_estimate = IF_estimate; app_vars.LQI_chip_errors = LQI_chip_errors; diff --git a/scm_v3c/radio.c b/scm_v3c/radio.c index 07bafb0e..49bcf4f6 100644 --- a/scm_v3c/radio.c +++ b/scm_v3c/radio.c @@ -280,6 +280,7 @@ int radio_update_IF_estimate(uint32_t IF_estimate, uint32_t LQI_chip_errors) { int sum = 0; int i; + // Only make adjustments when the chip error rate is <10% (this value was picked as an arbitrary choice) if (LQI_chip_errors < 25) { // When updating LO and IF clock frequncies, must wait long enough for the changes to propagate before changing again // Need to receive as many packets as there are taps in the FIR filter @@ -475,7 +476,7 @@ uint32_t radio_getIFestimate(void){ } uint32_t radio_getLQIchipErrors(void){ - return ANALOG_CFG_REG__21; + return read_LQI(); } int16_t radio_get_cdr_tau_value(void){ From 95eebd0bc4b67f396e0495032977e47f4f2b3287 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sat, 14 Mar 2020 19:22:08 -0700 Subject: [PATCH 23/26] Change calibration period and averaging calculation --- .../ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c index 7539e482..69be1e3e 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c @@ -26,7 +26,7 @@ fine code. It then finds the difference in the RX fine code and adjusts the TX f #define BLE_TX_PERIOD 1 #define BLE_CALIBRATE_LC false -#define CALIBRATE_PERIOD 20 +#define CALIBRATE_PERIOD 10 #define CALIBRATE_RX_DIFF 5 / 2 ///< calibrate up to +-2 fine codes #define CALIBRATE_MIN_SUCCESS 10 ///< total number of received frames for calibration success @@ -314,7 +314,7 @@ void calibrate_fine_code(void) { printf("Cumulative fines: %u, received frames: %u\n", cumulative_fines, received_frames); if (received_frames >= CALIBRATE_MIN_SUCCESS) { - app_vars.rx_fine = cumulative_fines / received_frames; + app_vars.rx_fine = (uint8_t) ((((double) cumulative_fines) / received_frames) + 0.5); diff_fine = (int) app_vars.rx_fine - current_fine; app_vars.tx_fine += diff_fine; printf("Diff fine: %d, RX fine: %u, TX fine: %u\n", diff_fine, app_vars.rx_fine, app_vars.tx_fine); From ae21ecf1c546805b8bf58d0160cc32c93cff6908 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Sun, 15 Mar 2020 17:02:35 -0700 Subject: [PATCH 24/26] Store IF offset and previous IF offset in app_vars --- .../ble_tx_154_rx_track_if.c | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c index 3b87ee77..69856d11 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -57,6 +57,9 @@ typedef struct { uint16_t rx_iteration; bool rx_received; uint8_t rx_num_received; + + int IF_offset; + int IF_offset_prev; } app_vars_t; app_vars_t app_vars; @@ -282,16 +285,15 @@ void transmit_ble_packet(void) { void calibrate_fine_code(void) { if (radio_get_IF_estimate_ready()) { - int IF_offset = radio_get_IF_estimate(); - - if (IF_offset < -20) { - --app_vars.rx_fine; - --app_vars.tx_fine; - } else if (IF_offset > 20) { - ++app_vars.rx_fine; - ++app_vars.tx_fine; - } - printf("IF offset: %d, ", IF_offset); + int diff; + + app_vars.IF_offset_prev = app_vars.IF_offset; + app_vars.IF_offset = radio_get_IF_estimate(); + + diff = app_vars.IF_offset / 12; // empiracally tuned + app_vars.rx_fine += diff; + app_vars.tx_fine += diff; + printf("IF offset: %d, previous IF offset: %d, ", app_vars.IF_offset, app_vars.IF_offset_prev); } printf("RX fine: %u, TX fine: %u\n", app_vars.rx_fine, app_vars.tx_fine); From cd038d50d78736b3339264ef0b8bb6157a738a65 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Wed, 15 Apr 2020 10:58:42 -0700 Subject: [PATCH 25/26] Change application description for IF tracking --- .../ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c index 69856d11..5eb91c47 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -1,7 +1,7 @@ /** \brief This program lets SCuM receive 15.4 packets and broadcast them as a BLE packet. -It tracks the RX frequency by averaging over received packets in a a range around the current -fine code. It then finds the difference in the RX fine code and adjusts the TX fine code. +It tracks the RX frequency by tuning the RX fine code, such that the IF frequency is +at 2.5MHz (IF offset of 500). It then adjusts the TX fine code by the same difference. */ #include From 483cea44ce66808409eeed8b5d9f2ab0ec53ae10 Mon Sep 17 00:00:00 2001 From: tryuan99 Date: Fri, 1 May 2020 18:59:43 -0700 Subject: [PATCH 26/26] Fix typos and formatting --- .../ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c | 10 +++++----- .../ble_tx_154_rx_track_mean.c | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c index 5eb91c47..ad8cac12 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_if/ble_tx_154_rx_track_if.c @@ -210,7 +210,7 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); - // Read IF estimate and LQI chip errors + // Read IF estimate and LQI chip errors. IF_estimate = radio_getIFestimate(); LQI_chip_errors = radio_getLQIchipErrors(); @@ -219,7 +219,7 @@ void cb_endFrame_rx(uint32_t timestamp){ if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { - // Only record IF estimate, LQI chip errors, and CDR tau for valid packets + // Only record IF estimate, LQI chip errors, and CDR tau for valid packets. app_vars.IF_estimate = IF_estimate; app_vars.LQI_chip_errors = LQI_chip_errors; @@ -258,7 +258,7 @@ void cb_timer(void) { app_vars.changeConfig = true; } -void receive_154_packet(void) { +void receive_154_packet(void) { printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); while (app_vars.rxFrameStarted); radio_rfOff(); @@ -269,7 +269,7 @@ void receive_154_packet(void) { radio_rxNow(); } -void transmit_ble_packet(void) { +void transmit_ble_packet(void) { int t; ble_gen_packet(); @@ -290,7 +290,7 @@ void calibrate_fine_code(void) { app_vars.IF_offset_prev = app_vars.IF_offset; app_vars.IF_offset = radio_get_IF_estimate(); - diff = app_vars.IF_offset / 12; // empiracally tuned + diff = app_vars.IF_offset / 12; // empirically tuned app_vars.rx_fine += diff; app_vars.tx_fine += diff; printf("IF offset: %d, previous IF offset: %d, ", app_vars.IF_offset, app_vars.IF_offset_prev); diff --git a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c index 69be1e3e..84cf2443 100644 --- a/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c +++ b/scm_v3c/applications/ble_tx_154_rx_track_mean/ble_tx_154_rx_track_mean.c @@ -209,7 +209,7 @@ void cb_endFrame_rx(uint32_t timestamp){ &app_vars.rxpk_lqi ); - // Read IF estimate, and LQI + // Read IF estimate, and LQI. IF_estimate = radio_getIFestimate(); LQI_chip_errors = radio_getLQIchipErrors(); @@ -218,7 +218,7 @@ void cb_endFrame_rx(uint32_t timestamp){ if ( app_vars.packet_len == LEN_RX_PKT && (radio_getCrcOk()) ) { - // Only record IF estimate, LQI, and CDR tau for valid packets + // Only record IF estimate, LQI, and CDR tau for valid packets. app_vars.IF_estimate = IF_estimate; app_vars.LQI_chip_errors = LQI_chip_errors; @@ -254,7 +254,7 @@ void cb_timer(void) { app_vars.changeConfig = true; } -void receive_154_packet(void) { +void receive_154_packet(void) { printf("Receiving on %u %u %u\n", app_vars.rx_coarse, app_vars.rx_mid, app_vars.rx_fine); while (app_vars.rxFrameStarted); radio_rfOff(); @@ -265,7 +265,7 @@ void receive_154_packet(void) { radio_rxNow(); } -void transmit_ble_packet(void) { +void transmit_ble_packet(void) { int t; ble_gen_packet();