diff --git a/Core/Inc/main.h b/Core/Inc/main.h index c4eaede..06b3ff8 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -78,8 +78,10 @@ void Error_Handler(void); /* Private defines -----------------------------------------------------------*/ #define LED_BLUE_Pin LL_GPIO_PIN_13 #define LED_BLUE_GPIO_Port GPIOC -#define PWMA_Pin LL_GPIO_PIN_1 -#define PWMA_GPIO_Port GPIOA +#define AIN1_Pin LL_GPIO_PIN_4 +#define AIN1_GPIO_Port GPIOA +#define AIN2_Pin LL_GPIO_PIN_5 +#define AIN2_GPIO_Port GPIOA #define OLED_SDA_Pin LL_GPIO_PIN_12 #define OLED_SDA_GPIO_Port GPIOB #define OLDE_SCK_Pin LL_GPIO_PIN_13 diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 164a159..b70c885 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -1,21 +1,21 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file gpio.c - * @brief This file provides code for the configuration - * of all used GPIO pins. - ****************************************************************************** - * @attention - * - * Copyright (c) 2024 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file gpio.c + * @brief This file provides code for the configuration + * of all used GPIO pins. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ @@ -56,7 +56,7 @@ void MX_GPIO_Init(void) LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin); /**/ - LL_GPIO_ResetOutputPin(PWMA_GPIO_Port, PWMA_Pin); + LL_GPIO_ResetOutputPin(GPIOA, AIN1_Pin|AIN2_Pin); /**/ LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin); @@ -69,23 +69,33 @@ void MX_GPIO_Init(void) LL_GPIO_Init(LED_BLUE_GPIO_Port, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = LL_GPIO_PIN_14|LL_GPIO_PIN_15; + GPIO_InitStruct.Pin = LL_GPIO_PIN_14; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2|LL_GPIO_PIN_3|LL_GPIO_PIN_4 - |LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8 - |LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_15; + GPIO_InitStruct.Pin = LL_GPIO_PIN_15; + GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; + LL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /**/ + GPIO_InitStruct.Pin = LL_GPIO_PIN_0; + GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /**/ + GPIO_InitStruct.Pin = LL_GPIO_PIN_2|LL_GPIO_PIN_3|LL_GPIO_PIN_6|LL_GPIO_PIN_7 + |LL_GPIO_PIN_8|LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_15; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = PWMA_Pin; + GPIO_InitStruct.Pin = AIN1_Pin|AIN2_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - LL_GPIO_Init(PWMA_GPIO_Port, &GPIO_InitStruct); + GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /**/ GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10 diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index 66671fe..237d314 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -67,8 +67,8 @@ /* Cortex-M3 Processor Interruption and Exception Handlers */ /******************************************************************************/ /** - * @brief This function handles Non maskable interrupt. - */ + * @brief This function handles Non maskable interrupt. + */ void NMI_Handler(void) { /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ @@ -82,8 +82,8 @@ void NMI_Handler(void) } /** - * @brief This function handles Hard fault interrupt. - */ + * @brief This function handles Hard fault interrupt. + */ void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ @@ -97,8 +97,8 @@ void HardFault_Handler(void) } /** - * @brief This function handles Memory management fault. - */ + * @brief This function handles Memory management fault. + */ void MemManage_Handler(void) { /* USER CODE BEGIN MemoryManagement_IRQn 0 */ @@ -112,8 +112,8 @@ void MemManage_Handler(void) } /** - * @brief This function handles Prefetch fault, memory access fault. - */ + * @brief This function handles Prefetch fault, memory access fault. + */ void BusFault_Handler(void) { /* USER CODE BEGIN BusFault_IRQn 0 */ @@ -127,8 +127,8 @@ void BusFault_Handler(void) } /** - * @brief This function handles Undefined instruction or illegal state. - */ + * @brief This function handles Undefined instruction or illegal state. + */ void UsageFault_Handler(void) { /* USER CODE BEGIN UsageFault_IRQn 0 */ @@ -142,8 +142,8 @@ void UsageFault_Handler(void) } /** - * @brief This function handles System service call via SWI instruction. - */ + * @brief This function handles System service call via SWI instruction. + */ void SVC_Handler(void) { /* USER CODE BEGIN SVCall_IRQn 0 */ @@ -155,8 +155,8 @@ void SVC_Handler(void) } /** - * @brief This function handles Debug monitor. - */ + * @brief This function handles Debug monitor. + */ void DebugMon_Handler(void) { /* USER CODE BEGIN DebugMonitor_IRQn 0 */ @@ -168,8 +168,8 @@ void DebugMon_Handler(void) } /** - * @brief This function handles Pendable request for system service. - */ + * @brief This function handles Pendable request for system service. + */ void PendSV_Handler(void) { /* USER CODE BEGIN PendSV_IRQn 0 */ @@ -181,8 +181,8 @@ void PendSV_Handler(void) } /** - * @brief This function handles System tick timer. - */ + * @brief This function handles System tick timer. + */ void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ @@ -202,8 +202,8 @@ void SysTick_Handler(void) /******************************************************************************/ /** - * @brief This function handles DMA1 channel4 global interrupt. - */ + * @brief This function handles DMA1 channel4 global interrupt. + */ void DMA1_Channel4_IRQHandler(void) { /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */ @@ -216,8 +216,8 @@ void DMA1_Channel4_IRQHandler(void) } /** - * @brief This function handles DMA1 channel5 global interrupt. - */ + * @brief This function handles DMA1 channel5 global interrupt. + */ void DMA1_Channel5_IRQHandler(void) { /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */ @@ -230,8 +230,8 @@ void DMA1_Channel5_IRQHandler(void) } /** - * @brief This function handles TIM1 update interrupt. - */ + * @brief This function handles TIM1 update interrupt. + */ void TIM1_UP_IRQHandler(void) { /* USER CODE BEGIN TIM1_UP_IRQn 0 */ @@ -248,21 +248,25 @@ void TIM1_UP_IRQHandler(void) } /** - * @brief This function handles TIM2 global interrupt. - */ + * @brief This function handles TIM2 global interrupt. + */ void TIM2_IRQHandler(void) { /* USER CODE BEGIN TIM2_IRQn 0 */ /* USER CODE END TIM2_IRQn 0 */ /* USER CODE BEGIN TIM2_IRQn 1 */ - + if (IS_TIM_IT_FLAG(PWM_TIM)) + { + TIM_IRQ_HANDLER(PWM_TIM); + // GPIO_TOGGLE(PWM_GPIO_Port, PWM_Pin); + } /* USER CODE END TIM2_IRQn 1 */ } /** - * @brief This function handles USART1 global interrupt. - */ + * @brief This function handles USART1 global interrupt. + */ void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 3a5e897..3044bb4 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -1,21 +1,21 @@ /* USER CODE BEGIN Header */ /** - ****************************************************************************** - * @file tim.c - * @brief This file provides code for the configuration - * of the TIM instances. - ****************************************************************************** - * @attention - * - * Copyright (c) 2024 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ + ****************************************************************************** + * @file tim.c + * @brief This file provides code for the configuration + * of the TIM instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "tim.h" @@ -68,7 +68,9 @@ void MX_TIM2_Init(void) /* USER CODE END TIM2_Init 0 */ LL_TIM_InitTypeDef TIM_InitStruct = {0}; + LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0}; + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* Peripheral clock enable */ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2); @@ -79,18 +81,35 @@ void MX_TIM2_Init(void) /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ - TIM_InitStruct.Prescaler = 7199; + TIM_InitStruct.Prescaler = 0; TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; - TIM_InitStruct.Autoreload = 99; + TIM_InitStruct.Autoreload = 7199; TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; LL_TIM_Init(TIM2, &TIM_InitStruct); LL_TIM_DisableARRPreload(TIM2); LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL); + LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH2); + TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM2; + TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.CompareValue = 0; + TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW; + LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct); + LL_TIM_OC_EnableFast(TIM2, LL_TIM_CHANNEL_CH2); LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET); LL_TIM_DisableMasterSlaveMode(TIM2); /* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */ + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + /**TIM2 GPIO Configuration + PA1 ------> TIM2_CH2 + */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_1; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); } diff --git a/MDK-ARM/motor.uvoptx b/MDK-ARM/motor.uvoptx index 6c8ed85..fe03e32 100644 --- a/MDK-ARM/motor.uvoptx +++ b/MDK-ARM/motor.uvoptx @@ -155,6 +155,26 @@ 1 buffer + + 1 + 1 + app,0x0A + + + 2 + 1 + 0x00000E0F,0x0A + + + 3 + 1 + 0x0000270F,0x0A + + + 4 + 1 + 0x000003E7,0x0A + 0 @@ -200,9 +220,17 @@ - System Viewer\TIM1 + System Viewer\GPIOA 35905 + + System Viewer\GPIOC + 35903 + + + System Viewer\TIM2 + 35904 + diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex index c18fd8c..8aca44a 100644 --- a/MDK-ARM/motor/motor.hex +++ b/MDK-ARM/motor/motor.hex @@ -1,490 +1,597 @@ :020000040800F2 -:10000000801C002005010008C50B0008B301000892 -:10001000C10B0008710100083D0F0008000000003E -:10002000000000000000000000000000490D000872 -:10003000B101000800000000490C00084B0D000849 +:10000000801C002005010008490E000803020008BA +:10001000450E0008C1010008891400080000000016 +:10002000000000000000000000000000E9110008CE +:100030000102000800000000E9100008EB110008B0 :100040001F0100081F0100081F0100081F01000810 :100050001F0100081F0100081F0100081F01000800 :100060001F0100081F0100081F0100081F010008F0 -:100070001F0100081F01000891010008A1010008EC +:100070001F0100081F010008E1010008F10100084C :100080001F0100081F0100081F0100081F010008D0 :100090001F0100081F0100081F0100081F010008C0 -:1000A0001F010008410E00081F0100081F01000881 -:1000B000290F00081F0100081F0100081F01000888 +:1000A0001F010008E11200081F0100081F010008DD +:1000B000B11300081F0100081F0100081F010008FC :1000C0001F0100081F0100081F0100081F01000890 -:1000D0001F0100082D0F00081F0100081F01000864 +:1000D0001F010008791400081F0100081F01000813 :1000E0001F0100081F0100081F010008DFF810D0E1 -:1000F00000F02CF80048004769130008AFF30080B7 +:1000F00000F054F800480047CD190008AFF3008025 :10010000801C00200648804706480047FEE7FEE7BF :10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7 -:100120003D0E0008ED000008D2B201E000F8012BFE +:10012000DD120008ED000008D2B201E000F8012B5A :10013000491EFBD270470022F6E710B513460A4667 -:1001400004461946FFF7F0FF204610BD064C074D48 -:1001500006E0E06840F0010394E807009847103497 -:10016000AC42F6D3FFF7C6FFD81D0008F81D000803 -:1001700000BFFEE770B504460D4600BF2CB901F084 -:1001800089FA01E000BF00BFFCE700BF012070BD9D -:1001900010B50248006801F00CFB10BD640000209F -:1001A00010B50248006801F004FB10BD6400002097 -:1001B000704700BFFEE7000008B5054989690143A3 -:1001C000034A9161114689690140009100BF08BD51 -:1001D0000010024008B5054989690143034A91614D -:1001E000114689690140009100BF08BD001002401E -:1001F00010B54A1E044B9A5C825822F001034A1E35 -:10020000014CA25C835010BD7E1D000810B54A1E33 -:10021000044B9A5C825842F001034A1E014CA25CD6 -:10022000835010BD7E1D000810B54A1E044B9A5C19 -:10023000825842F002034A1E014CA25C835010BD5A -:100240007E1D000830B54B1E054CE35CC35823F4FB -:10025000405313434C1E024D2C5D035130BD000032 -:100260003C1D000830B54B1E064CE35C03445B6844 -:100270006FF30F0313434C1E024D2C5D0444636067 -:1002800030BD00007E1D000830B54B1E054CE35C00 -:10029000C35844F21004A34313434C1E014D2C5D7C -:1002A000035130BD3C1D000810B54B1E024CE35CF1 -:1002B0000344DA6010BD00007E1D000830B54B1EFF -:1002C000054CE35CC35823F0800313434C1E024DDE -:1002D0002C5D035130BD00003C1D000830B54B1EA5 -:1002E000054CE35CC35823F4406313434C1E024D9A -:1002F0002C5D035130BD00003C1D000830B54B1E85 -:10030000054CE35CC35823F0200313434C1E024DFD -:100310002C5D035130BD00003C1D000810B54B1E84 -:10032000024CE35C03449A6010BD00007E1D00088F -:1003300030B54B1E054CE35CC35823F04003134318 -:100340004C1E024D2C5D035130BD00003C1D0008C9 -:1003500030B54B1E054CE35CC35823F44073134384 -:100360004C1E024D2C5D035130BD00003C1D0008A9 -:100370002DE9F04102460B461868C0F30F2595FAA7 -:10038000A5F0B0FA80F480E00120A04028400028C9 -:100390007AD0082C04D240F2011000FA04F106E0F1 -:1003A000A4F108004FF00116864046F080615868BD -:1003B00008280ED11869D66826EA11260F0A97FA7E -:1003C000A7F7B7FA87F700FA07F73E43D66000BFF2 -:1003D00000BF586802EB116691FAA1FCBCFA8CFCD4 -:1003E0004FEA8C084FF00F0C0CFA08FC376827EA2C -:1003F0000C0791FAA1FCBCFA8CFC4FEA8C0C00FAB9 -:100400000CFC47EA0C07376000BF5868012802D08F -:100410005868092838D1986802EB116691FAA1FC56 -:10042000BCFA8CFC4FEA8C084FF0030C0CFA08FC69 -:10043000376827EA0C0791FAA1FCBCFA8CFC4FEA5A -:100440008C0C00FA0CFC47EA0C07376000BFD86838 -:1004500002EB116691FAA1FCBCFA8CFC4FEA8C0805 -:100460004FF0040C0CFA08FC376827EA0C0791FAE5 -:10047000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EA9D -:100480000C07376000BF00BF641C25FA04F0002889 -:100490007FF47AAFBDE8F08102469068C1F30F2384 -:1004A0001840C1F30F23984201D10120704700206A -:1004B000FCE7C1F30F2242617047C1F30F22426192 -:1004C0007047C1F30F220261704770B500EB1163F2 -:1004D00091FAA1F5B5FA85F5AE000F25B5401C6877 -:1004E000AC4391FAA1F5B5FA85F5AD0002FA05F530 -:1004F0002C431C6070BD000002480068401C01498C -:1005000008607047100000204FF47A71B0FBF1F2E0 -:10051000521E4FF0E0235A6100229A6105221A61AF -:1005200000BF704710B5044600F0C4FB206020688F -:1005300000F08CFB6060606800F098FBA060606871 -:1005400000F0A6FBE06010BD0149086070470000A4 -:1005500000000020016821F080010160704781687F -:1005600021F080018160704710B5024613681C4875 -:10057000824208D0B2F1804F05D01A48824202D0A0 -:100580001948824204D123F070004C6840EA040309 -:100590001348824208D0B2F1804F05D01148824200 -:1005A00002D01148824204D123F44070CC6840EA62 -:1005B000040313608868D06200BF0888906200BF9F -:1005C0000748824203D10869106300BF00BF00BF23 -:1005D000506940F00100506100BF002010BD0000D4 -:1005E000002C01400004004000080040014608695A -:1005F00000F001007047826844F207039A430A43FF -:1006000082607047426822F070020A43426070477D -:1006100008B50168009100BF4168009100BF08BDA6 -:100620006FF04001016070472DE9FF4104460D461F -:1006300001270026204600F055F8002833D1E9684C -:100640006868084329690843E16841F20C629143F4 -:100650000843E060A868216921F440510143216109 -:1006600000BF6869616921F440710143616100BFA5 -:100670006846FFF757FF0E48844201D1039E08E009 -:100680000C48844201D1029E03E00B48844200D111 -:10069000029E46B1286830B10027314620462A68BC -:1006A00000F025F800BF384604B0BDE8F081000036 -:1006B00000380140004400400048004001460868FE -:1006C000C0F34000704701460868C0F380007047DF -:1006D00001460868C0F3C000704701460868C0F3CF -:1006E000801070470146C868C0F34030704770B54D -:1006F00001EBC10303EB01139400B3FBF4F301EB33 -:10070000C10404EB01149500B4FBF5F46425B4FBBB -:10071000F5F404EBC40505EB0414A3EB84033224C5 -:1007200004EB03136424B3FBF4F303F0F00301EBD5 -:10073000C10404EB01149500B4FBF5F46425B4FB8B -:10074000F5F403EB041401EBC10303EB0113950073 -:10075000B3FBF5F301EBC10505EB01159600B5FB05 -:10076000F6F56426B5FBF6F505EBC50606EB0515B3 -:10077000A3EB8503322505EB03136425B3FBF5F3E7 -:1007800003F00F0323449BB2836070BD38B5012092 -:10079000144949690143134A5161114649690140AD -:1007A000009100BF00BF00F0E5FB054600221146A6 -:1007B00000F00AFA044621460E2000F0EBFB0E2062 -:1007C00000F0BEFB00F0D6FB05460022114600F00B -:1007D000FBF9044621460F2000F0DCFB0F2000F05F -:1007E000AFFB38BD0010024000B585B0142168464B -:1007F000FFF7A1FC1020FFF7DFFC2020FFF7DCFC57 -:100800000420FFF7D9FC0820FFF7D6FC254926482D -:10081000FFF74FFE40F202212448FFF74AFE244929 -:100820002448FFF746FE1F48009001200190022057 -:1008300002900020039069461B48FFF799FD1E486F -:1008400000900020019069461748FFF791FD1B4872 -:1008500000900020019069461448FFF789FD40F29E -:1008600002200090012001900220029000200390BD -:1008700069460E48FFF77CFD11480090002001906A -:1008800069460C48FFF774FD09480090012001906B -:10089000032002900020039069460648FFF768FD98 -:1008A00005B000BD200020040010014000080140F8 -:1008B00030003004000C0140C000C004FDFD99046C -:1008C000FFFFCF0430B587B0142102A8FFF733FC37 -:1008D0004FF400601C49896901431B4A916111462C -:1008E00089690140019100BF00BF00F04BFB054644 -:1008F0000022114600F088F904462146192000F034 -:100900005DFB192000F029FB41F61F40ADF80800FF -:10091000002003906320049000200590069002A917 -:100920000A48FFF721FE0948FFF714FE0021074897 -:10093000FFF761FE00210548FFF764FE0348FFF75B -:100940000EFE07B030BD000000100240002C014038 -:1009500030B587B0142102A8FFF7EDFB01201E4936 -:10096000C96901431C4AD1611146C969014001911D -:1009700000BF00BF00F006FB054600220F2100F07B -:1009800043F9044621461C2000F018FB1C2000F00F -:10099000E4FA41F61F40ADF8080000200390632000 -:1009A00004900020059002A94FF08040FFF7DCFD85 -:1009B0004FF08040FFF7CEFD00214FF08040FFF761 -:1009C0001AFE00214FF08040FFF71CFE4FF08040E0 -:1009D000FFF7C5FD07B030BD001002402DE9F04122 -:1009E0008CB01C2105A8FFF7A6FB14216846FFF771 -:1009F000A2FB4FF48040FFF7EDFB0420FFF7EAFB7A -:100A00006848009009200190032002900020039084 -:100A100069466548FFF7ACFC6448009004200190EB -:100A200069466148FFF7A4FC002205216048FFF7F2 -:100A30002BFC002205215E48FFF704FC0022052163 -:100A40005B48FFF75BFC002205215948FFF770FC6B -:100A5000802205215648FFF731FC00220521544829 -:100A6000FFF776FC002205215148FFF737FC1022E2 -:100A700004214F48FFF708FC002204214C48FFF7EF -:100A8000E1FB002204214A48FFF738FC0022042140 -:100A90004748FFF74DFC802204214548FFF70EFC34 -:100AA000002204214248FFF753FC00220421404861 -:100AB000FFF714FC25213F4B1B68C3F302200024E1 -:100AC00025460346C3F1070CBCF1040F02D94FF0D1 -:100AD000040C01E0C3F1070C674603F1040CBCF100 -:100AE000070F02D24FF0000C01E0A3F1030C6646A1 -:100AF0004FF0010C0CFA07FCACF1010C0CEA040CF1 -:100B00000CFA06FC4FF0010808FA06F8A8F10108F3 -:100B100008EA05084CEA080200BF002904DB1007B8 -:100B2000030E2548435407E01007040E21480C30FB -:100B300001F00F031B1FC45400BF2520002809DB50 -:100B400000F01F02012191404209920002F1E022CF -:100B5000C2F8001100BF4FF4E1300590002006906C -:100B6000079008900C20099000200A900B9005A98E -:100B70001248FFF759FD00BF1048006920F490406B -:100B80000E4908610846406920F02A00486100BF0C -:100B900000BF0846C06840F40050C86000BF0CB0F9 -:100BA000BDE8F081020002040008014004000404D2 -:100BB000000002400CED00E000E400E000380140DD -:100BC00000BFFEE700BFFEE7F0B503460C4603F0AA -:100BD0000701C1F10700042801D9042001E0C1F197 -:100BE00007000646081D072801D2002000E0C81EA5 -:100BF00005460120B040401E2040A8400127AF40DC -:100C00007F1E17403843F0BDF0B503460C4603F095 -:100C10000701C1F10700042801D9042001E0C1F156 -:100C200007000646081D072801D2002000E0C81E64 -:100C300005460120B040401E2040A8400127AF409B -:100C40007F1E17403843F0BD70470000014600BFCB -:100C50000448406800F0F0000009034A125C21FAE1 -:100C600002F0704700100240661D0008014600BFF8 -:100C70000548406800F4E060044A02EB1020027866 -:100C800021FA02F07047000000100240761D0008B3 -:100C9000014600BF0548406800F46050044A02EB7A -:100CA000D020027821FA02F07047000000100240C4 -:100CB000761D000810B5002400BF0B48406800F006 -:100CC0000C0020B1042804D0082808D103E0074C08 -:100CD00007E0064C05E000F00BF8044601E0034C89 -:100CE00000BF00BF204610BD0010024000127A0075 -:100CF0000021002200BF1148406800F48030024605 -:100D00001AB1B2F5803F0CD101E00D490BE000BFF4 -:100D10000A484068C0F34040401C0A4BB3FBF0F166 -:100D200001E0074900BF00BF00BF0448406800F46D -:100D30007010022303EB90404843704700100240BC -:100D400000093D0000127A007047704710B502207C -:100D50003749096821F007010143354A116000BF96 -:100D600000BF00BF3248006800F007000228F8D139 -:100D700000BF3048006840F480302E49086000BF52 -:100D800000BF00BF2B480068C0F340400028F8D0E7 -:100D90004FF480304FF4E011264A526822F47C125E -:100DA00000F440330B431A43224B5A6000BF00BF8C -:100DB0001846006840F080701946086000BF00BF08 -:100DC00000BF1C480068C0F340600028F8D0002035 -:100DD0001849496821F0F0010143164A516000BFEB -:100DE00010151146496821F4E0610143516000BFCC -:100DF00000201146496821F460510143516000BF51 -:100E000002201146496821F003010143516000BFEF -:100E100000BF00BF0748406800F00C000828F8D168 -:100E20000548FFF771FB0448FFF78EFB10BD00007B -:100E3000002002400010024000A24A047047000057 -:100E400010B53748FFF7D2FB012868D100BF00BFBB -:100E500033480069C0F3400060B100BF3048C0684B -:100E6000C0F3400030B100BF6FF002002C490861B0 -:100E700000BF00BF00BF2A480069C0F3800060B116 -:100E800000BF2748C068C0F3800030B100BF6FF0DA -:100E900004002349086100BF00BF00BF204800696B -:100EA000C0F3C00060B100BF1D48C068C0F3C000FF -:100EB00030B100BF6FF008001949086100BF00BFE2 -:100EC00000BF17480069C0F3001060B100BF1448AC -:100ED000C068C0F3001030B100BF6FF010001049BF -:100EE000086100BF00BF0E48FFF780FB01280CD14E -:100EF00000BF0B48C06800F0010030B100BF6FF0C8 -:100F000001000749086100BF00BF00BFFFF7F4FA06 -:100F100000BF04480068401C0249086000BF10BDC3 -:100F2000002C0140600000207047000010B502480E -:100F3000006800F069FD10BD6400002000BFFEE7FE -:100F4000002809DB00F01F020121914042099200B4 -:100F500002F1E022C2F800117047002809DB00F01E -:100F60001F02012191404209920002F1E022C2F8E1 -:100F70000011704702480068C0F30220704700006B -:100F80000CED00E002480068C0F30220704700004A -:100F90000CED00E010B5002804DB0A07130E054A2B -:100FA000135406E00A07140E034A00F00F031B1F38 -:100FB000D45410BD00E400E018ED00E010B50028A6 -:100FC00004DB0A07130E054A135406E00A07140E41 -:100FD000034A00F00F031B1FD45410BD00E400E0CF -:100FE00018ED00E002E008C8121F08C1002AFAD17B -:100FF00070477047002001E001C1121F002AFBD199 -:1010000070470000014601F1100000E0001D026879 -:101010001AB9024A12689042F8D37047240000209F -:1010200010B50648046803E02046FFF7EBFF0446CE -:10103000034800688442F7D310BD00002000002060 -:101040002400002010B504462146002000F07EFA5E -:1010500010BD10B501E000F8011B131EA2F1010440 -:10106000A2B2F8D110BD10B501E000F8011B131EAB -:10107000A2F10104A2B2F8D110BD000000200A497B -:10108000086000BF00BF0948006840F00100074940 -:10109000086000BF00BF0846C06840F00100C8609B -:1010A00000BF00BF7047000004000020002C01407A -:1010B00010B5024800F022F910BD00000400002025 -:1010C00010B500F071FC00F06DFA10BD0149086028 -:1010D000704700000C00002070B5034600224FF05E -:1010E000E02675690D4E366803FB06F44FF0E026E6 -:1010F000B16910E04FF0E026B06988420BD0884219 -:1011000002D20E1A324402E02E1A0E443244014634 -:10111000A24200D300E0EDE700BF70BD0C0000204C -:1011200010B500BF01220E490E48FFF7CEF900BFEF -:101130000B490C48FFF7C5F90B490A48FFF7C1F9FD -:101140000420FFF7C9FF06490648FFF7B6F9042057 -:10115000FFF7C2FF04490348FFF7AFF910BD0000D5 -:1011600010001004000C01402000200410B500BF46 -:1011700001220E490E48FFF7A8F900BF0D490C489F -:10118000FFF79BF909490A48FFF797F90420FFF791 -:10119000A3FF08490648FFF794F904490448FFF7FC -:1011A00090F90420FFF798FF10BD00001000100414 -:1011B000000C01402000200410B50024082213492F -:1011C0001348FFF782F911491148FFF77AF9042013 -:1011D000FFF782FF0F490E48FFF773F90420FFF76E -:1011E0007BFF07E0601CC4B2FA2C03DDFFF7BEFFF3 -:1011F000002010BD05490648FFF74EF90028F1D13F -:1012000004490348FFF759F90120F2E710001004E0 -:10121000000C01402000200470B50446002500BFEA -:10122000012217491748FFF750F900BF1649154822 -:10123000FFF743F900BF1FE0E00920B11049114852 -:10124000FFF73FF903E00E490E48FFF736F9600655 -:10125000040E0220FFF740FF0B490A48FFF731F95F -:101260000220FFF739FF08490648FFF726F9022058 -:10127000FFF732FF681CC5B2082DDDDB70BD000032 -:1012800010001004000C01402000200438B5044672 -:1012900000208DF800008DF80140FFF741FF782015 -:1012A000FFF7BAFFFFF788FF9DF80000FFF7B4FFD4 -:1012B000FFF782FF9DF80100FFF7AEFFFFF77CFF0D -:1012C000FFF754FF38BD38B5044640208DF80000C4 -:1012D0008DF80140FFF724FF7820FFF79DFFFFF70F -:1012E0006BFF9DF80000FFF797FFFFF765FF9DF884 -:1012F0000100FFF791FFFFF75FFF38BD38B50146EA -:1013000000200090086810B1152821D116E000BF18 -:10131000124B134CE068C3F30F2222EA000400EAE8 -:10132000020544EA05440E4D2C6100BF00BF0D4884 -:101330000068486000BF1520086000BF094A48687F -:101340001268101A642801D2002038BD00BFDFE700 -:101350000020086000900320F7E700002000200430 -:10136000001001406000002008B50120264989696D -:101370000143254A9161114689690140009100BFEE -:1013800000BF00071146C9690143D1611146C9690F -:101390000140009100BF00BF032002461B4B1968AB -:1013A0004FF6FF0319401A4B0B4343EA0221174B38 -:1013B000196000BF00BF1748406820F0E06040F0AF -:1013C00000701449486000BFFFF7C0FC1248006875 -:1013D0001249B0FBF1F084B22046FFF777FEFFF729 -:1013E00003FAFFF7D3F9FFF7B3FAFFF7F7FAFFF7BE -:1013F00069FA002000F014F8FFF762FEFFF73EFEE6 -:1014000001E0FFF755FEFCE7001002400CED00E0A4 -:101410000000FA05000001400000002040420F00DB -:1014200010B504460C4951F824104A000B4951F8F4 -:101430002400002100F09EF8094951F824200749B2 -:10144000083951F82400002100F094F801210348E4 -:101450000830015510BD0000C01D000854000020D8 -:10146000D01D00082DE9F04704460F460025A94687 -:101470002348005D20B92248183801682046884773 -:101480001FB94FF0FF30BDE8F0871E4850F8240028 -:10149000B7FBF0F61B4850F82400B7FBF0F100FB57 -:1014A000117000B1761C184850F82400451E22E047 -:1014B0001348083850F8240030F8150010B909F125 -:1014C000010901E04FF00009B14513D14FF00008C8 -:1014D00009E00B48083850F8240005EB080220F812 -:1014E000126008F10108B045F3D3064850F8240013 -:1014F0006843C8E76D1E002DDADA4FF0FF30C2E70F -:101500005C000020C81D0008C01D000810B5014681 -:101510000023002207E00B4850F8210030F81200A9 -:1015200000B15B1C521C084850F821009042F2D8D0 -:1015300064205843044C54F82140B0FBF4F0C0B28E -:1015400010BD000054000020C01D000870B5044606 -:101550000E4631462046FFF785FF0546681C08B950 -:10156000002070BD024850F824002844F9E700002C -:101570004C00002030B5034601E003F8011B141EA7 -:10158000A2F10102F9D130BD10B504464FF48062DA -:1015900021460348FFF767FD00F05AF810BD000030 -:1015A0008014002010B5AE20FFF770FE2020FFF75A -:1015B0006DFE1020FFF76AFEC820FFF767FE0020CF -:1015C000FFF764FE1020FFF761FE4020FFF75EFE8C -:1015D0008120FFF75BFEFF20FFF758FEA120FFF7F9 -:1015E00055FEA620FFF752FEA820FFF74FFE3F2032 -:1015F000FFF74CFEA420FFF749FED320FFF746FE7D -:101600000020FFF743FED520FFF740FEF020FFF754 -:101610003DFED920FFF73AFE2220FFF737FEDA2001 -:10162000FFF734FE1220FFF731FEDB20FFF72EFE1E -:101630002020FFF72BFE8D20FFF728FE1420FFF758 -:1016400025FEAF20FFF722FE0020FFF79DFF10BD13 -:1016500070B5002418E004F1B001C8B2FFF716FE1F -:101660000120FFF713FE1020FFF710FE002507E012 -:1016700005EBC411064A505CFFF725FE681CC5B295 -:10168000802DF5DB601CC4B2082CE4DB70BD0000CB -:101690008014002000BF00BF00BF00BF00BFBFF329 -:1016A0004F8F00BF00BF00BF0948006800F4E06032 -:1016B00008490843001D0649086000BF00BF00BF7D -:1016C000BFF34F8F00BF00BF00BF00BF00BFFDE7EB -:1016D0000CED00E00000FA0510B5044604B910BD99 -:1016E00000202085A07D012808D1606A30B1218CBE -:1016F00089040A0C0021606AFFF7ABFC00BFEEE72B -:101700002DE9F05F0646884615469946DDE90B7BD4 -:10171000DDF828A00EB1012100E0002108462921B2 -:10172000FEF728FD4420FFF78DFC04460CB1012193 -:1017300000E0002108462C21FEF71CFD0120E07589 -:1017400000202076C4F83C902584C4F840B0A786D9 -:10175000002D0CDD2846FFF775FCE061E16909B159 -:10176000012100E0002108463E21FEF703FD002F85 -:101770000CDD3846FFF766FC2063216B09B10121BF -:1017800000E0002108464521FEF7F4FC84F81580AE -:1017900084F82CA066602046BDE8F09F10B5044692 -:1017A00004B910BD002060852046FFF795FF00BFFB -:1017B000F7E710B504460CB1012100E0002108460E -:1017C00040F2D711FEF7D6FC012084F838002169D9 -:1017D000A068FEF70DFD2069082865D2DFE800F05B -:1017E0006404111E2C3A485600BFA0680168C1F37A -:1017F000400121B1A0680221416000BF00BF00BFCD -:1018000053E000BFA0680168C1F3401121B1A06896 -:101810002021416000BF00BF00BF46E000BFA068BC -:101820000168C1F3402129B1A0684FF40071416003 -:1018300000BF00BF00BF38E000BFA0680168C1F36F -:10184000403129B1A0684FF40051416000BF00BF92 -:1018500000BF2AE000BFA0680168C1F3404129B180 -:10186000A0684FF40031416000BF00BF00BF1CE022 -:1018700000BFA0680168C1F3405129B1A0684FF4CE -:101880000011416000BF00BF00BF0EE000BFA068B4 -:101890000168C1F3406129B1A0684FF00071416057 -:1018A00000BF00BF00BF00E000BF00BF606800BF16 -:1018B00000BF00BF00F10C0252E8002F42F04001CF -:1018C00000F10C0242E80013002BF3D100BF00BF6F -:1018D0002069082865D2DFE800F06404111E2C3A64 -:1018E000485600BFA0680168C1F3C00121B1A068DB -:1018F0000821416000BF00BF00BF53E000BFA068E7 -:101900000168C1F3C01121B1A0688021416000BF0E -:1019100000BF00BF46E000BFA0680168C1F3C0215E -:1019200029B1A0684FF40061416000BF00BF00BF53 -:1019300038E000BFA0680168C1F3C03129B1A068D8 -:101940004FF40041416000BF00BF00BF2AE000BF6C -:10195000A0680168C1F3C04129B1A0684FF400211B -:10196000416000BF00BF00BF1CE000BFA06801686D -:10197000C1F3C05129B1A0684FF40001416000BF1C -:1019800000BF00BF0EE000BFA0680168C1F3C061E6 -:1019900029B1A0684FF00061416000BF00BF00BFE7 -:1019A00000E000BF00BF10BD0EB51348006808BBC3 -:1019B0000020F0210122114BCDE9002102900A46BE -:1019C00001210F48FFF79CFE0B49086000200968C1 -:1019D00008700C48084909688860052006490968AC -:1019E000C8600420044909680861002102480068B1 -:1019F00000F0E2F80EBD0000640000203B1D00086E -:101A0000003801400000024038B5044604B938BD32 -:101A10006068C168C1F34011B9B160680168C1F381 -:101A2000401191B1608D218C884202DB2046FFF786 -:101A3000B5FE61684A68D2B2608D411C6185E1697A -:101A40000A5400202076E0753FE06068C168C1F369 -:101A50000011002939D060680168C1F30011002924 -:101A600033D0607D01282BD1D4E902014A1E514BAD -:101A70009A5C02445268208C801A6085207DF8B9F7 -:101A8000D4E90201FEF7B4FBE06B80B1608D002861 -:101A90000DDD608D218C884209DC628D2078E36B3E -:101AA000E1699847228C0021E069FFF7D2FA228C85 -:101AB000D4E90201FEF7D6FBD4E90201FEF7A6FB4A -:101AC000002060856068FEF7A3FD6068C168C1F30F -:101AD000801151B16068FEF700FE30B1206C08B192 -:101AE000206C80476068FEF79BFDA07D01285ED1D9 -:101AF00001256068C168C1F3002171B160680168A7 -:101B000001F0010149B1022560680168009100BF40 -:101B10004168009100BF00BF00BF6068FEF7CEFDC6 -:101B200068B16068FEF7CAFD48B1042560680168C5 -:101B3000009100BF4168009100BF00BF00BF606816 -:101B4000FEF7C1FD60B16068FEF7BDFD40B16068A1 -:101B50000168009100BF4168009100BF00BF00BF55 -:101B60006068FEF7B5FD68B16068FEF7B1FD48B189 -:101B7000102560680168009100BF4168009100BFB6 -:101B800000BF00BF012D11D0606A78B1618D491E80 -:101B900088B2228D616A01EB82014880228D616AE0 -:101BA00001F82250218D491C218500BF00BF00BFD4 -:101BB0002DE700007E1D000870B504460D46607DCF -:101BC00090B9A575606800BF00BF00BF00F10C02AE -:101BD00052E8002F42F0200100F10C0242E800130D -:101BE000002BF3D100BF70E00020A0756068FEF705 -:101BF0000FFD2169A068FEF7FBFAD4E90201FEF7A8 -:101C0000F7FA6068011D0E463246D4E90201FEF77C -:101C100085FBE269D4E90201FEF746FB228CD4E998 -:101C20000201FEF71FFBD4E90201FEF7FDFAD4E939 -:101C30000201FEF7EBFA606800BF00BF00BF00F1D1 -:101C4000140252E8002F42F0400100F1140242E871 -:101C50000013002BF3D100BF00BF606800BF00BFBE -:101C600000BF00F10C0252E8002F42F0100100F119 -:101C70000C0242E80013002BF3D100BF00BF6068E4 -:101C8000011D0E4632462169A068FEF747FB226B14 -:101C90002169A068FEF708FB2169A068FEF7C4FA75 -:101CA000606800BF00BF00BF00F1140252E8002FBF -:101CB00042F0800100F1140242E80013002BF3D13E -:101CC00000BF00BF012084F83800A07D012833D177 -:101CD000606A68B9218C8800FFF7B4F96062616AB4 -:101CE00009B1012100E0002108468221FEF742FAF5 -:101CF000606800BF00BF00BF00F10C0252E8002F77 -:101D000042F4807100F10C0242E80013002BF3D181 -:101D100000BF00BF606800BF00BF00BF00F1140239 -:101D200052E8002F42F0010100F1140242E80013D2 -:101D3000002BF3D100BF00BF70BD7047081C3044BA -:101D4000586C80000000000404040000080000003B -:101D5000080000080000000800020406080A0C0041 -:101D6000010203040506000000000000000001025B -:101D70000304060708090000000001020304081C10 -:101D80003044586C80000000000404040000080087 -:101D90000000080000080000000800020406080A0D -:101DA0000C000102030405065F6C697374006C6922 -:101DB000737420616C6C20636F6D6D616E640000E4 -:101DC0000002000000000000080000000800000001 -:101DD0000010000000000000F81D000800000020B6 -:101DE00078000000E40F0008701E00087800002052 -:101DF000081C0000F40F00080024F400000000009C -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E30000000000000000000000000002114000865 -:101E40000D150008800000204000002080100020B8 -:101E50004200002000000000000000000000000020 -:101E6000A81D0008AE1D0008C6E533B42110000807 +:1001400004461946FFF7F0FF204610BD20F000409E +:10015000C10DC0F3160040F400007F2901DA002031 +:100160007047962903DCC1F19601C8407047963963 +:1001700088407047002801DBC0F10040002901DB06 +:10018000C1F1004181427047002801DBC0F100400D +:10019000002901DBC1F1004188427047064C074D40 +:1001A00006E0E06840F0010394E807009847103447 +:1001B000AC42F6D3FFF79EFF84240008A424000875 +:1001C00000BFFEE770B504460D4600BF2CB901F034 +:1001D000A1FD01E000BF00BFFCE700BF012070BD32 +:1001E00010B50248006801F024FE10BD6400002034 +:1001F00010B50248006801F01CFE10BD640000202C +:10020000704700BFFEE7000008B505498969014352 +:10021000034A9161114689690140009100BF08BD00 +:100220000010024008B5054989690143034A9161FC +:10023000114689690140009100BF08BD00100240CD +:1002400008B5054989690143034A916111468969E5 +:100250000140009100BF08BD0010024010B54A1EC9 +:10026000044B9A5C825822F001034A1E014CA25CA6 +:10027000835010BD2824000810B54A1E044B9A5C18 +:10028000825842F001034A1E014CA25C835010BD0B +:100290002824000810B54A1E044B9A5C825842F08C +:1002A00002034A1E014CA25C835010BD28240008A2 +:1002B00030B54B1E054CE35CC35823F44053134345 +:1002C0004C1E024D2C5D035130BD0000E62300089A +:1002D00030B54B1E064CE35C03445B686FF30F03C1 +:1002E00013434C1E024D2C5D0444636030BD00007E +:1002F0002824000830B54B1E054CE35CC35844F27B +:100300001004A34313434C1E014D2C5D035130BD1B +:10031000E623000810B54B1E024CE35C0344DA6090 +:1003200010BD00002824000830B54B1E054CE35CCE +:10033000C35823F0800313434C1E024D2C5D035120 +:1003400030BD0000E623000830B54B1E054CE35CD1 +:10035000C35823F4406313434C1E024D2C5D0351DC +:1003600030BD0000E623000830B54B1E054CE35CB1 +:10037000C35823F0200313434C1E024D2C5D035140 +:1003800030BD0000E623000810B54B1E024CE35CB4 +:1003900003449A6010BD00002824000830B54B1EAD +:1003A000054CE35CC35823F0400313434C1E024D3D +:1003B0002C5D035130BD0000E623000830B54B1E14 +:1003C000054CE35CC35823F4407313434C1E024DA9 +:1003D0002C5D035130BD0000E62300082DE9F041FB +:1003E00002460B461868C0F30F2595FAA5F0B0FA3F +:1003F00080F480E00120A040284000287AD0082C1A +:1004000004D240F2011000FA04F106E0A4F1080061 +:100410004FF00116864046F08061586808280ED1DA +:100420001869D66826EA11260F0A97FAA7F7B7FACD +:1004300087F700FA07F73E43D66000BF00BF586851 +:1004400002EB116691FAA1FCBCFA8CFC4FEA8C0815 +:100450004FF00F0C0CFA08FC376827EA0C0791FAEA +:10046000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EAAD +:100470000C07376000BF5868012802D05868092867 +:1004800038D1986802EB116691FAA1FCBCFA8CFC99 +:100490004FEA8C084FF0030C0CFA08FC376827EA87 +:1004A0000C0791FAA1FCBCFA8CFC4FEA8C0C00FA08 +:1004B0000CFC47EA0C07376000BFD86802EB1166F6 +:1004C00091FAA1FCBCFA8CFC4FEA8C084FF0040CAA +:1004D0000CFA08FC376827EA0C0791FAA1FCBCFA71 +:1004E0008CFC4FEA8C0C00FA0CFC47EA0C073760D6 +:1004F00000BF00BF641C25FA04F000287FF47AAF27 +:10050000BDE8F08102469068C1F30F231840C1F3A3 +:100510000F23984201D1012070470020FCE7C1F36E +:100520000F2242617047C1F30F2242617047C1F34D +:100530000F2242617047C1F30F2242617047C1F33D +:100540000F2202617047C1F30F220261704770B53C +:1005500000EB116391FAA1F5B5FA85F5AE000F2510 +:10056000B5401C68AC4391FAA1F5B5FA85F5AD002C +:1005700002FA05F52C431C6070BD000002480068BB +:10058000401C014908607047200000204FF47A7138 +:10059000B0FBF1F2521E4FF0E0235A6100229A6143 +:1005A00005221A6100BF704710B5044600F0D2FD65 +:1005B0002060206800F09AFD6060606800F0A6FD91 +:1005C000A060606800F0B4FDE06010BD0149086003 +:1005D0007047000000000020016821F080010160E8 +:1005E0007047816821F0800181607047016841F0A7 +:1005F000010101607047C16841F00101C1607047AD +:1006000010B5024613681C48824208D0B2F1804FF0 +:1006100005D01A48824202D01948824204D123F000 +:1006200070004C6840EA04031348824208D0B2F1DB +:10063000804F05D01148824202D01148824204D135 +:1006400023F44070CC6840EA040313608868D062E9 +:1006500000BF0888906200BF0748824203D1086942 +:10066000106300BF00BF00BF506940F0010050613F +:1006700000BF002010BD0000002C0140000400401D +:100680000008004001460869C0F340007047014679 +:100690000869C0F38000704701460869C0F3C000D4 +:1006A000704701460869C0F30010704701460869A9 +:1006B00000F0010070470146C868C0F34000704771 +:1006C0000146C868C0F3800070470146C868C0F39F +:1006D000C00070470146C868C0F30010704701466B +:1006E000C86800F00100704770B50246012901D1C9 +:1006F000002416E0042901D1012412E0102901D1BF +:1007000002240EE0402901D103240AE0B1F5807FE4 +:1007100001D1042405E0B1F5806F01D1052400E08A +:1007200006242346064CE55C02F1180428190468E7 +:10073000044DEE5C0425B5402C43046070BD000000 +:10074000C3230008CA23000870B50246012901D15D +:10075000002416E0042901D1012412E0102901D15E +:1007600002240EE0402901D103240AE0B1F5807F84 +:1007700001D1042405E0B1F5806F01D1052400E02A +:1007800006242346064CE55C02F118042819046887 +:10079000044DEE5C0825B5402C43046070BD00009C +:1007A000C3230008CA2300082DE9F04106460C4681 +:1007B00015460127012C08D0102C0CD0B4F5807FF1 +:1007C0000FD0B4F5805F18D111E02946304600F013 +:1007D0007DFB074612E02946304600F0B3FB074692 +:1007E0000CE02946304600F0EFFB074606E02946BC +:1007F000304600F025FC074600E000BF00BF384649 +:10080000BDE8F08181637047826844F207039A4330 +:100810000A4382607047426822F070020A434260D5 +:10082000704708B50168009100BF4168009100BFA2 +:1008300008BD6FF040010160704700002DE9FF41E5 +:1008400004460D4601270026204600F055F80028F2 +:1008500033D1E9686868084329690843E16841F2CF +:100860000C6291430843E060A868216921F440517B +:100870000143216100BF6869616921F4407101434E +:10088000616100BF6846FFF78FFE0E48844201D1C8 +:10089000039E08E00C48844201D1029E03E00B480D +:1008A000844200D1029E46B1286830B1002731460B +:1008B00020462A6800F025F800BF384604B0BDE89D +:1008C000F081000000380140004400400048004032 +:1008D00001460868C0F34000704701460868C0F34D +:1008E0008000704701460868C0F3C00070470146A9 +:1008F0000868C0F3801070470146C868C0F34030F4 +:10090000704770B501EBC10303EB01139400B3FB17 +:10091000F4F301EBC10404EB01149500B4FBF5F40E +:100920006425B4FBF5F404EBC40505EB0414A3EB58 +:100930008403322404EB03136424B3FBF4F303F0C5 +:10094000F00301EBC10404EB01149500B4FBF5F4D2 +:100950006425B4FBF5F403EB041401EBC10303EBD2 +:1009600001139500B3FBF5F301EBC10505EB011590 +:100970009600B5FBF6F56426B5FBF6F505EBC50666 +:1009800006EB0515A3EB8503322505EB0313642560 +:10099000B3FBF5F303F00F0323449BB2836070BDF8 +:1009A00038B50120144949690143134A5161114680 +:1009B00049690140009100BF00BF00F081FD05467C +:1009C0000022114600F042FA044621460E2000F0B3 +:1009D00087FD0E2000F05AFD00F072FD0546002252 +:1009E000114600F033FA044621460F2000F078FD4E +:1009F0000F2000F04BFD38BD0010024000B585B05F +:100A000014216846FFF797FB1020FFF7FDFB20201D +:100A1000FFF7FAFB0420FFF7F7FB0820FFF7F4FBD2 +:100A20002F493048FFF77BFD43F230012E48FFF796 +:100A300076FD2E492E48FFF772FD294800900120CF +:100A40000190022002900020039069462548FFF79C +:100A5000C5FC284800900020019069462148FFF716 +:100A6000BDFC254800900420019069461D48FFF711 +:100A7000B5FC40F2011000900420019069461A482C +:100A8000FFF7ACFC1D480090002001906946164815 +:100A9000FFF7A4FC43F230000090012001900220F7 +:100AA0000290002003900120049069460E48FFF751 +:100AB00095FC134800900020019069460C48FFF710 +:100AC0008DFC0A4800900120019003200290002034 +:100AD000039069460648FFF781FC05B000BD0000A1 +:100AE00020002004001001400008014030003004C4 +:100AF000000C01404000400480008004DDCC9904DB +:100B0000FFFFCF0430B585B014216846FFF713FB13 +:100B10004FF40060FFF786FB00F0DAFC0546002288 +:100B2000114600F0B3F904462146192000F0ECFC10 +:100B3000192000F0B8FC41F61F40ADF8000000207D +:100B400001906320029000200390049069460948B8 +:100B5000FFF756FD0748FFF73FFD00210548FFF767 +:100B600053FE00210348FFF756FE0248FFF739FD08 +:100B700005B030BD002C014030B593B014210EA853 +:100B8000FFF7D9FA202106A8FFF7D5FA142101A80A +:100B9000FFF7D1FA01203049C96901432E4AD161DA +:100BA0001146C9690140009100BF00BF00F090FCF0 +:100BB000054600220F2100F069F9044621461C2059 +:100BC00000F0A2FC1C2000F06EFC0020ADF8380004 +:100BD0000F9041F61F401090002011900EA94FF089 +:100BE0008040FFF70DFD4FF08040FFF7F5FC00213E +:100BF0004FF08040FFF708FE10218806FFF7A4FDA4 +:100C000070200690002007900890099002200A901A +:100C100006AA10214007FFF7C7FD10218806FFF73D +:100C200063FD00214FF08040FFF7F5FD4FF080405D +:100C3000FFF7D7FC0420FFF7F5FA40F202200190FD +:100C400009200290022003900020049001A903488B +:100C5000FFF7C4FB13B030BD001002400008014094 +:100C60002DE9F0418CB01C2105A8FFF764FA14218E +:100C70006846FFF760FA4FF48040FFF7E1FA04207E +:100C8000FFF7DEFA684800900920019003200290E7 +:100C90000020039069466548FFF7A0FB6448009078 +:100CA0000420019069466148FFF798FB0022052166 +:100CB0006048FFF71FFB002205215E48FFF7F8FAA6 +:100CC000002205215B48FFF74FFB00220521594810 +:100CD000FFF764FB802205215648FFF725FB002221 +:100CE00005215448FFF76AFB002205215148FFF710 +:100CF0002BFB102204214F48FFF7FCFA00220421AD +:100D00004C48FFF7D5FA002204214A48FFF72CFB94 +:100D1000002204214748FFF741FB80220421454877 +:100D2000FFF702FB002204214248FFF747FB0022A5 +:100D300004214048FFF708FB25213F4B1B68C3F304 +:100D40000220002425460346C3F1070CBCF1040F22 +:100D500002D94FF0040C01E0C3F1070C674603F120 +:100D6000040CBCF1070F02D24FF0000C01E0A3F11C +:100D7000030C66464FF0010C0CFA07FCACF1010CB9 +:100D80000CEA040C0CFA06FC4FF0010808FA06F80D +:100D9000A8F1010808EA05084CEA080200BF00298A +:100DA00004DB1007030E2548435407E01007040E28 +:100DB00021480C3001F00F031B1FC45400BF252035 +:100DC000002809DB00F01F02012191404209920036 +:100DD00002F1E022C2F8001100BF4FF4E1300590AB +:100DE00000200690079008900C20099000200A909F +:100DF0000B9005A91248FFF721FD00BF10480069BC +:100E000020F490400E4908610846406920F02A000D +:100E1000486100BF00BF0846C06840F40050C86089 +:100E200000BF0CB0BDE8F0810200020400080140E0 +:100E300004000404000002400CED00E000E400E0C7 +:100E40000038014000BFFEE700BFFEE7F0B50346F3 +:100E50000C4603F00701C1F10700042801D9042062 +:100E600001E0C1F107000646081D072801D2002055 +:100E700000E0C81E05460120B040401E2040A840AA +:100E80000127AF407F1E17403843F0BDF0B5034641 +:100E90000C4603F00701C1F10700042801D9042022 +:100EA00001E0C1F107000646081D072801D2002015 +:100EB00000E0C81E05460120B040401E2040A8406A +:100EC0000127AF407F1E17403843F0BD70B5024682 +:100ED000106A20F001001062136A5568946924F0CA +:100EE000030424F070000E6840EA060423F00200B8 +:100EF0000E6940EA060323F001004E6840EA06034B +:100F00000F48824213D123F008004E6940EA86035D +:100F100023F004008E6840EA860325F480708E6911 +:100F200040EA060525F40070CE6940EA46055560A2 +:100F30009461C868506300BF1362002070BD000058 +:100F4000002C01402DE9F04104460D46206A20F0B6 +:100F500010002062266AD4F80480A76927F440773D +:100F600027F4E040296840EA012726F0200029699B +:100F700040EA011626F01000696840EA011611489F +:100F8000844213D126F08000696940EA811626F078 +:100F90004000A96840EA811628F48060A96940EA07 +:100FA000810828F40060E96940EAC108C4F80480B7 +:100FB000A7612046E968FFF725FC26620020BDE80E +:100FC000F0810000002C014070B50246106A20F448 +:100FD00080701062136A5568D46924F0030424F009 +:100FE00070000E6840EA060423F400700E6940EABF +:100FF000062323F480704E6840EA06230F4882429D +:1010000013D123F400604E6940EA862323F4806004 +:101010008E6840EA862325F480508E6940EA0615E2 +:1010200025F40050CE6940EA46155560D461C86881 +:10103000D06300BF1362002070BD0000002C01408F +:1010400070B50246106A20F480501062146A556828 +:10105000D36923F4407323F4E0400E6840EA06238A +:1010600024F400500E6940EA063424F480504E689F +:1010700040EA06340748824204D125F480408E6954 +:1010800040EA86155560D361C868106400BF1462D9 +:10109000002070BD002C014070B503460C46DD6A8F +:1010A00055436426B5FBF6F5A8B2012C08D0102CE8 +:1010B0000AD0B4F5807F0BD0B4F5805F10D10BE07F +:1010C00000BF586300BF0CE000BF986300BF08E09A +:1010D00000BFD86300BF04E000BF186400BF00E099 +:1010E00000BF00BF00BF70BD70470000014600BFD9 +:1010F0000448406800F0F0000009034A125C21FA3D +:1011000002F070470010024010240008014600BFA2 +:101110000548406800F4E060044A02EB10200278C1 +:1011200021FA02F07047000000100240202400085D +:10113000014600BF0548406800F46050044A02EBD5 +:10114000D020027821FA02F070470000001002401F +:101150002024000810B5002400BF0B48406800F0B0 +:101160000C0020B1042804D0082808D103E0074C63 +:1011700007E0064C05E000F00BF8044601E0034CE4 +:1011800000BF00BF204610BD0010024000127A00D0 +:101190000021002200BF1148406800F48030024660 +:1011A0001AB1B2F5803F0CD101E00D490BE000BF50 +:1011B0000A484068C0F34040401C0A4BB3FBF0F1C2 +:1011C00001E0074900BF00BF00BF0448406800F4C9 +:1011D0007010022303EB9040484370470010024018 +:1011E00000093D0000127A007047704710B50220D8 +:1011F0003749096821F007010143354A116000BFF2 +:1012000000BF00BF3248006800F007000228F8D194 +:1012100000BF3048006840F480302E49086000BFAD +:1012200000BF00BF2B480068C0F340400028F8D042 +:101230004FF480304FF4E011264A526822F47C12B9 +:1012400000F440330B431A43224B5A6000BF00BFE7 +:101250001846006840F080701946086000BF00BF63 +:1012600000BF1C480068C0F340600028F8D0002090 +:101270001849496821F0F0010143164A516000BF46 +:1012800010151146496821F4E0610143516000BF27 +:1012900000201146496821F460510143516000BFAC +:1012A00002201146496821F003010143516000BF4B +:1012B00000BF00BF0748406800F00C000828F8D1C4 +:1012C0000548FFF763F90448FFF780F910BD0000F7 +:1012D000002002400010024000A24A0470470000B3 +:1012E00010B53148FFF7E2F901285CD100BF2E4864 +:1012F000FFF7C8F901280AD12B48FFF7DCF90128CC +:1013000005D100BF001F2849086100BF00BF264863 +:10131000FFF7BDF901280AD12348FFF7D1F90128C9 +:1013200005D100BF801F2049086100BF00BF1E48D3 +:10133000FFF7B2F901280BD11B48FFF7C6F90128C6 +:1013400006D100BF6FF008001749086100BF00BF59 +:101350001548FFF7A6F901280BD11348FFF7BAF992 +:10136000012806D100BF6FF010000F49086100BFCF +:1013700000BF0D48FFF79AF901280AD10A48FFF784 +:10138000AEF9012805D100BFC01E0749086100BFA2 +:1013900000BF00BFFFF7F2F800BF04480068401C20 +:1013A0000249086000BF10BD002C01406000002011 +:1013B00010B54FF08040FFF779F901285BD100BFED +:1013C0008007FFF75FF901280AD18007FFF773F95B +:1013D000012805D100BF001F8107086100BF00BFC1 +:1013E0004FF08040FFF753F901280BD18007FFF73A +:1013F00067F9012806D100BF801F4FF080410861C6 +:1014000000BF00BF4FF08040FFF746F901280CD124 +:101410008007FFF75AF9012807D100BF6FF00800D5 +:101420004FF08041086100BF00BF4FF08040FFF7E0 +:1014300038F901280CD18007FFF74CF9012807D1B2 +:1014400000BF6FF010004FF08041086100BF00BF87 +:101450004FF08040FFF72AF901280BD18007FFF7F2 +:101460003EF9012806D100BFC01E4FF0804108613F +:1014700000BF00BF00BF10BD10B50248006800F0FB +:1014800003FE10BD6400002000BFFEE7002809DB5A +:1014900000F01F02012191404209920002F1E02276 +:1014A000C2F800117047002809DB00F01F0201217B +:1014B00091404209920002F1E022C2F80011704707 +:1014C00002480068C0F30220704700000CED00E005 +:1014D00002480068C0F30220704700000CED00E0F5 +:1014E00010B5002804DB0A07130E054A135406E062 +:1014F0000A07140E034A00F00F031B1FD45410BD3B +:1015000000E400E018ED00E010B5002804DB0A0755 +:10151000130E054A135406E00A07140E034A00F09E +:101520000F031B1FD45410BD00E400E018ED00E0D1 +:1015300002E008C8121F08C1002AFAD1704770479C +:10154000002001E001C1121F002AFBD170470000FA +:10155000014601F1100000E0001D02681AB9024ABC +:1015600012689042F8D370473400002010B5064846 +:10157000046803E02046FFF7EBFF044603480068D9 +:101580008442F7D310BD000030000020340000205A +:1015900010B504462146002000F018FB10BD10B520 +:1015A00001E000F8011B131EA2F10104A2B2F8D160 +:1015B00010BD10B501E000F8011B131EA2F10104DB +:1015C000A2B2F8D110BD000010B500201D4908607E +:1015D0001D49086000BF1D48FFF708F81B48FFF7CA +:1015E0000AF800BF00BF4FF08040FEF7FFFF4FF04A +:1015F0008040FFF700F800BF00BF4FF08040FEF7CB +:10160000F5FF10208106096A01438206116200BFBE +:1016100000BF002210218006FFF73EFD00BF00BF83 +:101620004FF08040806A401C09490968B1FBF0F125 +:101630004FF08040C06A401CB1FBF0F005494860A3 +:1016400010BD0000040000200C000020002C014010 +:10165000000000201400002010B5034800F010F82E +:10166000024800F07DF910BD040000200C000020AD +:1016700010B500F0D9FC00F0D5FA00F003FA10BD67 +:10168000F8B5044600200090206810B11A2844D113 +:1016900039E000BF234908680021FEF775FD0AD232 +:1016A00041F210012048FEF74AFF42F220011E4895 +:1016B000FEF739FF09E041F210011B48FEF733FF46 +:1016C00042F220011848FEF73AFF16490868002147 +:1016D000FEF750FD04D21348006880F0004001E09E +:1016E000104800680646FEF731FD85B22A461021F3 +:1016F0008806FFF7D1FC00BF0C480068606000BF9F +:101700001A20206000BF094960680968081AC828C3 +:1017100001D20020F8BD00BFBCE70020206000908F +:101720000320F7E7140000200008014060000020BB +:1017300001490860704700001C00002070B5034696 +:1017400000224FF0E02675690D4E366803FB06F463 +:101750004FF0E026B16910E04FF0E026B069884212 +:101760000BD0884202D20E1A324402E02E1A0E44E6 +:1017700032440146A24200D300E0EDE700BF70BD55 +:101780001C00002010B500BF01220E490E48FEF7D4 +:10179000DEFE00BF0B490C48FEF7D5FE0B490A4898 +:1017A000FEF7D1FE0420FFF7C9FF06490648FEF701 +:1017B000C2FE0420FFF7C2FF04490348FEF7BBFE48 +:1017C00010BD000010001004000C01402000200497 +:1017D00010B500BF01220E490E48FEF7B8FE00BF4B +:1017E0000D490C48FEF7A7FE09490A48FEF7A3FE7B +:1017F0000420FFF7A3FF08490648FEF7A4FE0449AA +:101800000448FEF7A0FE0420FFF798FF10BD00007B +:1018100010001004000C01402000200410B500242A +:10182000082213491348FEF792FE11491148FEF7AA +:101830008AFE0420FFF782FF0F490E48FEF783FE61 +:101840000420FFF77BFF07E0601CC4B2FA2C03DD25 +:10185000FFF7BEFF002010BD05490648FEF752FE07 +:101860000028F1D104490348FEF765FE0120F2E7A4 +:1018700010001004000C01402000200470B5044644 +:10188000002500BF012217491748FEF760FE00BF80 +:1018900016491548FEF74FFE00BF1FE0E00920B1D2 +:1018A00010491148FEF74FFE03E00E490E48FEF7BF +:1018B00042FE6006040E0220FFF740FF0B490A4873 +:1018C000FEF741FE0220FFF739FF08490648FEF700 +:1018D00032FE0220FFF732FF681CC5B2082DDDDBA7 +:1018E00070BD000010001004000C01402000200416 +:1018F00038B5044600208DF800008DF80140FFF750 +:1019000041FF7820FFF7BAFFFFF788FF9DF800003E +:10191000FFF7B4FFFFF782FF9DF80100FFF7AEFF6E +:10192000FFF77CFFFFF754FF38BD38B50446402071 +:101930008DF800008DF80140FFF724FF7820FFF7B5 +:101940009DFFFFF76BFF9DF80000FFF797FFFFF784 +:1019500065FF9DF80100FFF791FFFFF75FFF38BDBE +:1019600038B5014600200090086810B12D2821D11B +:1019700016E000BF124B134CE068C3F30F2222EABB +:10198000000400EA020544EA05440E4D2C6100BF44 +:1019900000BF0D480068486000BF2D20086000BFF0 +:1019A000094A48681268101A642801D2002038BD1C +:1019B00000BFDFE70020086000900320F7E7000089 +:1019C00020002004001001406000002008B5012024 +:1019D000264989690143254A916111468969014077 +:1019E000009100BF00BF00071146C9690143D161E2 +:1019F0001146C9690140009100BF00BF03200246A3 +:101A00001B4B19684FF6FF0319401A4B0B4343EA6F +:101A10000221174B196000BF00BF1748406820F033 +:101A2000E06040F000701449486000BFFFF7DEFB43 +:101A3000124800681249B0FBF1F084B22046FFF76B +:101A400077FEFEF7DBFFFEF7ABFFFFF795F8FFF73A +:101A500007F9FFF757F8002000F022F8FFF708FE1B +:101A6000FFF7B2FD01E0FFF7F7FDFCE700100240D1 +:101A70000CED00E00000FA0500000140000000202D +:101A800040420F0010B541F210010448FEF74FFD2F +:101A900042F220010148FEF74AFD10BD0008014056 +:101AA00010B504460C4951F824104A000B4951F86E +:101AB0002400002100F09EF8094951F8242007492C +:101AC000083951F82400002100F094F8012103485E +:101AD0000830015510BD00006C240008540000209F +:101AE0007C2400082DE9F04704460F460025A9464E +:101AF0002348005D20B922481838016820468847ED +:101B00001FB94FF0FF30BDE8F0871E4850F82400A1 +:101B1000B7FBF0F61B4850F82400B7FBF0F100FBD0 +:101B2000117000B1761C184850F82400451E22E0C0 +:101B30001348083850F8240030F8150010B909F19E +:101B4000010901E04FF00009B14513D14FF0000841 +:101B500009E00B48083850F8240005EB080220F88B +:101B6000126008F10108B045F3D3064850F824008C +:101B70006843C8E76D1E002DDADA4FF0FF30C2E788 +:101B80005C000020742400086C24000810B5014695 +:101B90000023002207E00B4850F8210030F8120023 +:101BA00000B15B1C521C084850F821009042F2D84A +:101BB00064205843044C54F82140B0FBF4F0C0B208 +:101BC00010BD0000540000206C24000870B50446CD +:101BD0000E4631462046FFF785FF0546681C08B9CA +:101BE000002070BD024850F824002844F9E70000A6 +:101BF0004C00002030B5034601E003F8011B141E21 +:101C0000A2F10102F9D130BD10B504464FF4806253 +:101C100021460348FFF7CDFC00F05AF810BD000044 +:101C20008014002010B5AE20FFF762FE2020FFF7E1 +:101C30005FFE1020FFF75CFEC820FFF759FE002072 +:101C4000FFF756FE1020FFF753FE4020FFF750FE2F +:101C50008120FFF74DFEFF20FFF74AFEA120FFF78E +:101C600047FEA620FFF744FEA820FFF741FE3F20D5 +:101C7000FFF73EFEA420FFF73BFED320FFF738FE20 +:101C80000020FFF735FED520FFF732FEF020FFF7EA +:101C90002FFED920FFF72CFE2220FFF729FEDA20A5 +:101CA000FFF726FE1220FFF723FEDB20FFF720FEC2 +:101CB0002020FFF71DFE8D20FFF71AFE1420FFF7EE +:101CC00017FEAF20FFF714FE0020FFF79DFF10BDA9 +:101CD00070B5002418E004F1B001C8B2FFF708FEA7 +:101CE0000120FFF705FE1020FFF702FE002507E0A8 +:101CF00005EBC411064A505CFFF717FE681CC5B21D +:101D0000802DF5DB601CC4B2082CE4DB70BD000044 +:101D10008014002000BF00BF00BF00BF00BFBFF3A2 +:101D20004F8F00BF00BF00BF0948006800F4E060AB +:101D300008490843001D0649086000BF00BF00BFF6 +:101D4000BFF34F8F00BF00BF00BF00BF00BFFDE764 +:101D50000CED00E00000FA0510B5044604B910BD12 +:101D600000202085A07D012808D1606A30B1218C37 +:101D700089040A0C0021606AFFF711FC00BFEEE73E +:101D80002DE9F05F0646884615469946DDE90B7B4E +:101D9000DDF828A00EB1012100E00021084629212C +:101DA000FEF710FA4420FFF7F3FB04460CB10121C3 +:101DB00000E0002108462C21FEF704FA0120E0751E +:101DC00000202076C4F83C902584C4F840B0A78653 +:101DD000002D0CDD2846FFF7DBFBE061E16909B16E +:101DE000012100E0002108463E21FEF7EBF9002F1B +:101DF0000CDD3846FFF7CCFB2063216B09B10121D4 +:101E000000E0002108464521FEF7DCF984F8158042 +:101E100084F82CA066602046BDE8F09F10B504460B +:101E200004B910BD002060852046FFF795FF00BF74 +:101E3000F7E710B504460CB1012100E00021084687 +:101E400040F2D711FEF7BEF9012084F8380021696D +:101E5000A068FEF703FA2069082865D2DFE800F0E1 +:101E60006404111E2C3A485600BFA0680168C1F3F3 +:101E7000400121B1A0680221416000BF00BF00BF46 +:101E800053E000BFA0680168C1F3401121B1A06810 +:101E90002021416000BF00BF00BF46E000BFA06836 +:101EA0000168C1F3402129B1A0684FF4007141607D +:101EB00000BF00BF00BF38E000BFA0680168C1F3E9 +:101EC000403129B1A0684FF40051416000BF00BF0C +:101ED00000BF2AE000BFA0680168C1F3404129B1FA +:101EE000A0684FF40031416000BF00BF00BF1CE09C +:101EF00000BFA0680168C1F3405129B1A0684FF448 +:101F00000011416000BF00BF00BF0EE000BFA0682D +:101F10000168C1F3406129B1A0684FF000714160D0 +:101F200000BF00BF00BF00E000BF00BF606800BF8F +:101F300000BF00BF00F10C0252E8002F42F0400148 +:101F400000F10C0242E80013002BF3D100BF00BFE8 +:101F50002069082865D2DFE800F06404111E2C3ADD +:101F6000485600BFA0680168C1F3C00121B1A06854 +:101F70000821416000BF00BF00BF53E000BFA06860 +:101F80000168C1F3C01121B1A0688021416000BF88 +:101F900000BF00BF46E000BFA0680168C1F3C021D8 +:101FA00029B1A0684FF40061416000BF00BF00BFCD +:101FB00038E000BFA0680168C1F3C03129B1A06852 +:101FC0004FF40041416000BF00BF00BF2AE000BFE6 +:101FD000A0680168C1F3C04129B1A0684FF4002195 +:101FE000416000BF00BF00BF1CE000BFA0680168E7 +:101FF000C1F3C05129B1A0684FF40001416000BF96 +:1020000000BF00BF0EE000BFA0680168C1F3C0615F +:1020100029B1A0684FF00061416000BF00BF00BF60 +:1020200000E000BF00BF10BD0EB51348006808BB3C +:102030000020F0210122114BCDE9002102900A4637 +:1020400001210F48FFF79CFE0B490860002009683A +:1020500008700C4808490968886005200649096825 +:10206000C86004200449096808610021024800682A +:1020700000F0E2F80EBD000064000020BB23000861 +:10208000003801400000024038B5044604B938BDAC +:102090006068C168C1F34011B9B160680168C1F3FB +:1020A000401191B1608D218C884202DB2046FFF700 +:1020B000B5FE61684A68D2B2608D411C6185E169F4 +:1020C0000A5400202076E0753FE06068C168C1F3E3 +:1020D0000011002939D060680168C1F3001100299E +:1020E00033D0607D01282BD1D4E902014A1E514B27 +:1020F0009A5C02445268208C801A6085207DF8B971 +:10210000D4E90201FEF7AAF8E06B80B1608D0028E7 +:102110000DDD608D218C884209DC628D2078E36BB7 +:10212000E1699847228C0021E069FFF738FA228C98 +:10213000D4E90201FEF7CCF8D4E90201FEF79CF8DD +:10214000002060856068FEF76CFB6068C168C1F3C1 +:10215000801151B16068FEF7CAFB30B1206C08B144 +:10216000206C80476068FEF764FBA07D01285ED18B +:1021700001256068C168C1F3002171B16068016820 +:1021800001F0010149B1022560680168009100BFBA +:102190004168009100BF00BF00BF6068FEF798FB78 +:1021A00068B16068FEF794FB48B104256068016877 +:1021B000009100BF4168009100BF00BF00BF606890 +:1021C000FEF78BFB60B16068FEF787FB40B160688B +:1021D0000168009100BF4168009100BF00BF00BFCF +:1021E0006068FEF77FFB68B16068FEF77BFB48B173 +:1021F000102560680168009100BF4168009100BF30 +:1022000000BF00BF012D11D0606A78B1618D491EF9 +:1022100088B2228D616A01EB82014880228D616A59 +:1022200001F82250218D491C218500BF00BF00BF4D +:102230002DE700002824000870B504460D46607D97 +:1022400090B9A575606800BF00BF00BF00F10C0227 +:1022500052E8002F42F0200100F10C0242E8001386 +:10226000002BF3D100BF70E00020A0756068FEF77E +:10227000D8FA2169A068FDF7F1FFD4E90201FDF762 +:10228000EDFF6068011D0E463246D4E90201FEF7FB +:102290007BF8E269D4E90201FEF73CF8228CD4E92C +:1022A0000201FEF715F8D4E90201FDF7F3FFD4E9C6 +:1022B0000201FDF7E1FF606800BF00BF00BF00F151 +:1022C000140252E8002F42F0400100F1140242E8EB +:1022D0000013002BF3D100BF00BF606800BF00BF38 +:1022E00000BF00F10C0252E8002F42F0100100F193 +:1022F0000C0242E80013002BF3D100BF00BF60685E +:10230000011D0E4632462169A068FEF73DF8226B9A +:102310002169A068FDF7FEFF2169A068FDF7BAFFFB +:10232000606800BF00BF00BF00F1140252E8002F38 +:1023300042F0800100F1140242E80013002BF3D1B7 +:1023400000BF00BF012084F83800A07D012833D1F0 +:10235000606A68B9218C8800FFF71AF96062616AC7 +:1023600009B1012100E0002108468221FDF72AFF82 +:10237000606800BF00BF00BF00F10C0252E8002FF0 +:1023800042F4807100F10C0242E80013002BF3D1FB +:1023900000BF00BF606800BF00BF00BF00F11402B3 +:1023A00052E8002F42F0010100F1140242E800134C +:1023B000002BF3D100BF00BF70BD7047081C304434 +:1023C000586C8000000000040404000008000000B5 +:1023D000080000080000000800020406080A0C00BB +:1023E000010203040506081C3044586C80000000FC +:1023F00000040404000008000000080000080000B9 +:10240000000800020406080A0C0001020304050685 +:102410000000000000000000010203040607080994 +:102420000000000001020304081C3044586C8000C6 +:102430000000000404040000080000000800000878 +:102440000000000800020406080A0C000102030450 +:1024500005065F6C697374006C69737420616C6C41 +:1024600020636F6D6D616E6400000000000200006B +:10247000000000000800000008000000001000003C +:1024800000000000A42400080000002078000000E4 +:10249000301500081C25000878000020081C0000EA +:1024A000401500080024F4000000000000000000B7 +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E0000000000000000000A11A00088D1B000879 +:1024F00080000020400000208010002042000020CA +:10250000000000000000000000000000522400084D +:0C25100058240008C6E533B46D1500081F :04000005080000ED02 :00000001FF diff --git a/User/application/app.c b/User/application/app.c index 960125d..d23631b 100644 --- a/User/application/app.c +++ b/User/application/app.c @@ -2,7 +2,31 @@ #include "app.h" #include "board.h" #include "flow.h" -static struct flow idle_fw; // 空闲任务 +static struct flow business_fw; // 业务流程 +static struct flow idle_fw; // 空闲任务 + +app_t app; + +static uint8_t business_inspection(struct flow *fl) +{ + FL_HEAD(fl); + for (;;) + { + if (app.pwm_percent > 0) + { + GPIO_SET(AIN1_GPIO_Port, AIN1_Pin); + GPIO_RESET(AIN2_GPIO_Port, AIN2_Pin); + } + else + { + GPIO_RESET(AIN1_GPIO_Port, AIN1_Pin); + GPIO_SET(AIN2_GPIO_Port, AIN2_Pin); + } + PWM_SET_DUTY(PWM_TIM, PWM_CHANNEL, ABS(app.pwm_percent)); + FL_LOCK_DELAY(fl, FL_CLOCK_SEC*2); + } + FL_TAIL(fl); +} /** * @brief 对流量进行空闲检查 * @@ -32,6 +56,7 @@ static uint8_t idle_inspection(struct flow *fl) */ void app_run(void) { + business_inspection(&business_fw); // 业务流程检测 idle_inspection(&idle_fw); } @@ -42,7 +67,13 @@ void app_run(void) */ void app_init(void) { - FL_INIT(&idle_fw); // 空闲任务 + FL_INIT(&business_fw); // 业务流程 + FL_INIT(&idle_fw); // 空闲任务 ENABLE_TIM(TASK_TIM); + ENABLE_TIM(PWM_TIM); + PWM_START(PWM_TIM, PWM_CHANNEL); + PWM_SET_DUTY(PWM_TIM, PWM_CHANNEL, 0); + + app.pwm_feq = PWM_GET_FREQ(PWM_TIM); } diff --git a/User/application/app.h b/User/application/app.h index 62b197d..8ff7a13 100644 --- a/User/application/app.h +++ b/User/application/app.h @@ -8,6 +8,15 @@ #ifndef APP_H #define APP_H #include "main.h" + +typedef struct +{ + float32 pwm_percent; + uint32_t pwm_feq; +} app_t; + +extern app_t app; + void app_init(void); void app_run(void); #endif // APP_H diff --git a/User/board/board.c b/User/board/board.c index 7c203f4..961e3d0 100644 --- a/User/board/board.c +++ b/User/board/board.c @@ -18,6 +18,12 @@ static void uart_init(void) } } +static void motor_init(void) +{ + GPIO_RESET(AIN1_GPIO_Port, AIN1_Pin); + GPIO_RESET(AIN2_GPIO_Port, AIN2_Pin); +} + /** * @brief 通过UART发送数据 * @@ -39,4 +45,5 @@ void board_init(void) { uart_init(); ssd1306_init(); + motor_init(); } diff --git a/User/board/board.h b/User/board/board.h index 170d4c8..d715b3a 100644 --- a/User/board/board.h +++ b/User/board/board.h @@ -6,6 +6,8 @@ #define UART_TXSIZE (240u) // 发送240个字节 #define TASK_TIM TIM1 +#define PWM_TIM TIM2 +#define PWM_CHANNEL LL_TIM_CHANNEL_CH2 extern uart_t *uart; diff --git a/User/system/bsp/bsp.h b/User/system/bsp/bsp.h index a1fc982..e506816 100644 --- a/User/system/bsp/bsp.h +++ b/User/system/bsp/bsp.h @@ -17,7 +17,7 @@ // #include "dacs.h" #include "dmas.h" #include "tims.h" -// #include "pwms.h" +#include "pwms.h" #include "uarts.h" // #include "eeprom.h" // #include "spis.h" diff --git a/User/system/bsp/pwms.c b/User/system/bsp/pwms.c index e69de29..b8a1bea 100644 --- a/User/system/bsp/pwms.c +++ b/User/system/bsp/pwms.c @@ -0,0 +1 @@ +#include "pwms.h" diff --git a/User/system/bsp/pwms.h b/User/system/bsp/pwms.h index fee50c0..5946032 100644 --- a/User/system/bsp/pwms.h +++ b/User/system/bsp/pwms.h @@ -12,6 +12,7 @@ #ifndef __PWMS_H__ #define __PWMS_H__ #include "lib.h" + /** * @brief Starts the PWM for a specific channel * @param TIMx: TIM instance @@ -39,16 +40,51 @@ } while (__LINE__ == -1) /** - * @brief Sets the duty cycle for a specific channel + * @brief Sets the PWM frequency * @param TIMx: TIM instance * @param CHx: Channel to be set - * @param DUTY: Duty cycle value (0-100) + * @param COMPARE: Compare value * @retval None */ -#define PWM_SET_DUTY(TIMx, CHx, DUTY) \ - do \ - { \ - LL_TIM_OC_SetCompareCH##CHx(TIMx, DUTY); \ - } while (__LINE__ == -1) +static inline void PWM_SET_COMPARE(TIM_TypeDef *TIMx, uint32_t CHx, uint16_t COMPARE) +{ + switch (CHx) + { + case LL_TIM_CHANNEL_CH1: + LL_TIM_OC_SetCompareCH1(TIMx, COMPARE); + break; + case LL_TIM_CHANNEL_CH2: + LL_TIM_OC_SetCompareCH2(TIMx, COMPARE); + break; + case LL_TIM_CHANNEL_CH3: + LL_TIM_OC_SetCompareCH3(TIMx, COMPARE); + break; + case LL_TIM_CHANNEL_CH4: + LL_TIM_OC_SetCompareCH4(TIMx, COMPARE); + break; + default: + break; + } +} + +/** + * @brief 设置PWM占空比 + * + * 设置指定定时器TIMx的指定通道CHx的PWM占空比。 + * + * @param TIMx 定时器类型,例如TIM1、TIM2等 + * @param CHx 通道号,例如TIM_CHANNEL_1、TIM_CHANNEL_2等 + * @param DUTY 占空比,范围在0到100之间 + */ +static inline void PWM_SET_DUTY(TIM_TypeDef *TIMx, uint32_t CHx, uint16_t DUTY) +{ + PWM_SET_COMPARE(TIMx, CHx, DUTY * LL_TIM_GetAutoReload(TIMx) / 100); +} + +// 获取当前频率 +static inline uint32_t PWM_GET_FREQ(TIM_TypeDef *TIMx) +{ + return SystemCoreClock / (LL_TIM_GetPrescaler(TIMx) + 1) / (LL_TIM_GetAutoReload(TIMx) + 1); +} #endif ///< __PWMS_H__ diff --git a/motor.ioc b/motor.ioc index 1348df1..17e3703 100644 --- a/motor.ioc +++ b/motor.ioc @@ -39,19 +39,23 @@ Mcu.IPNb=7 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC -Mcu.Pin1=PD0-OSC_IN -Mcu.Pin10=VP_SYS_VS_Systick -Mcu.Pin11=VP_TIM1_VS_ClockSourceINT -Mcu.Pin12=VP_TIM2_VS_ClockSourceINT -Mcu.Pin2=PD1-OSC_OUT -Mcu.Pin3=PA1 -Mcu.Pin4=PB12 -Mcu.Pin5=PB13 -Mcu.Pin6=PA9 -Mcu.Pin7=PA10 -Mcu.Pin8=PA13 -Mcu.Pin9=PA14 -Mcu.PinsNb=13 +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin10=PA9 +Mcu.Pin11=PA10 +Mcu.Pin12=PA13 +Mcu.Pin13=PA14 +Mcu.Pin14=VP_SYS_VS_Systick +Mcu.Pin15=VP_TIM1_VS_ClockSourceINT +Mcu.Pin16=VP_TIM2_VS_ClockSourceINT +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA0-WKUP +Mcu.Pin5=PA1 +Mcu.Pin6=PA4 +Mcu.Pin7=PA5 +Mcu.Pin8=PB12 +Mcu.Pin9=PB13 +Mcu.PinsNb=17 Mcu.ThirdParty0=RealThread.RT-Thread.3.1.5 Mcu.ThirdPartyNb=1 Mcu.UserConstants= @@ -74,15 +78,28 @@ NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:15\:0\:true\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -PA1.GPIOParameters=GPIO_Label -PA1.GPIO_Label=PWMA -PA1.Signal=GPIO_Output +PA0-WKUP.Locked=true +PA0-WKUP.Signal=GPIO_Input +PA1.Locked=true +PA1.Signal=S_TIM2_CH2 PA10.Mode=Asynchronous PA10.Signal=USART1_RX PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PA4.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP +PA4.GPIO_Label=AIN1 +PA4.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP +PA4.GPIO_PuPd=GPIO_PULLUP +PA4.Locked=true +PA4.Signal=GPIO_Output +PA5.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP +PA5.GPIO_Label=AIN2 +PA5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP +PA5.GPIO_PuPd=GPIO_PULLUP +PA5.Locked=true +PA5.Signal=GPIO_Output PA9.Mode=Asynchronous PA9.Signal=USART1_TX PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP @@ -102,6 +119,8 @@ PB13.Signal=GPIO_Output PC13-TAMPER-RTC.GPIOParameters=GPIO_Label PC13-TAMPER-RTC.GPIO_Label=LED_BLUE PC13-TAMPER-RTC.Signal=GPIO_Output +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.Signal=GPIO_Input PD0-OSC_IN.Mode=HSE-External-Oscillator PD0-OSC_IN.Signal=RCC_OSC_IN PD1-OSC_OUT.Mode=HSE-External-Oscillator @@ -167,12 +186,21 @@ RealThread.RT-Thread.3.1.5.RT_USING_COMPONENTS_INIT=1 RealThread.RT-Thread.3.1.5.RT_USING_CONSOLE=0 RealThread.RT-Thread.3.1.5.RT_USING_DEVICE=1 RealThread.RT-Thread.3.1.5_SwParameter=RTOSJjkernel\:true;RTOSJjshell\:true;RTOSJjdevice\:true; +SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 +SH.S_TIM2_CH2.ConfNb=1 TIM1.IPParameters=Prescaler,Period TIM1.Period=99 TIM1.Prescaler=7199 -TIM2.IPParameters=Prescaler,Period -TIM2.Period=99 -TIM2.Prescaler=7199 +TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE +TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM2.CounterMode=TIM_COUNTERMODE_UP +TIM2.IPParameters=Prescaler,Period,CounterMode,AutoReloadPreload,OCPolarity_2,TIM_MasterOutputTrigger,Channel-PWM Generation2 CH2,OCFastMode_PWM-PWM Generation2 CH2,OCMode_PWM-PWM Generation2 CH2 +TIM2.OCFastMode_PWM-PWM\ Generation2\ CH2=TIM_OCFAST_ENABLE +TIM2.OCMode_PWM-PWM\ Generation2\ CH2=TIM_OCMODE_PWM2 +TIM2.OCPolarity_2=TIM_OCPOLARITY_LOW +TIM2.Period=7199 +TIM2.Prescaler=0 +TIM2.TIM_MasterOutputTrigger=TIM_TRGO_RESET USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick