按遥控器,小车可以动了,但是信号没接收成功几个,就会延迟几个按键才会触发,而且按右键,小车没反应。

This commit is contained in:
xqq27 2025-05-10 22:01:27 +08:00
parent 6eed76dd66
commit eb59db569c
14 changed files with 1347 additions and 796 deletions

View File

@ -64,7 +64,9 @@
"mw_debug_log.h": "c",
"bsp_motor.h": "c",
"mw_motor.h": "c",
"app_motor.h": "c"
"app_motor.h": "c",
"mw_ir_controller.h": "c",
"app_ir_controller.h": "c"
},

View File

@ -0,0 +1,6 @@
#ifndef __APP_IR_CONTROLLER_H__
#define __APP_IR_CONTROLLER_H__
void app_irControllerProcess(void);
#endif

View File

@ -1,7 +1,10 @@
#ifndef __APP_MOTOR_H__
#define __APP_MOTOR_H__
#include "mw_motor.h"
void app_motor_mainProcess(void);
void app_motor_changeState(motor_state_ENUM e_val);
#endif

View File

@ -0,0 +1,61 @@
#include "app_ir_controller.h"
#include "app_motor.h"
#include "mw_ir_controller.h"
#include "public_diy.h"
// motor_state_stop = 0,
// motor_state_goAhead,
// motor_state_goBack,
// motor_state_turnLeft,
// motor_state_turnRight,
// motor_state_selfLeft,
// motor_state_selfRight,
// motor_state_NUM,
motor_state_ENUM app_IrToMotorState(IR_DECODE_ENUM e_val)
{
motor_state_ENUM e_retVal;
switch(e_val)
{
case ir_decode_up:
e_retVal = motor_state_goAhead;
break;
case ir_decode_down:
e_retVal = motor_state_goBack;
break;
case ir_decode_left:
e_retVal = motor_state_turnLeft;
break;
case ir_decode_right:
e_retVal = motor_state_turnRight;
break;
case ir_decode_ok:
e_retVal = motor_state_stop;
break;
default:
e_retVal = motor_state_NUM;
break;
}
return e_retVal;
}
void app_irControllerProcess(void)
{
IR_DECODE_ENUM e_ir_decode_val;
motor_state_ENUM e_motor_val;
// 接收函数循环
mw_IrReceiveProcess();
// 有数据
if(mw_GetIrControllerChar(&e_ir_decode_val) == RET_OK)
{
e_motor_val = app_IrToMotorState(e_ir_decode_val);
// 判断合法性
if(e_motor_val < motor_state_NUM)
{
app_motor_changeState(e_motor_val);
}
}
}

View File

@ -15,7 +15,7 @@
motor_state_ENUM e_motor_state = motor_state_stop;
int8_t motor_speed = 50;
int8_t motor_speed = 80;
/*************************************************************************************
* @brief
*
@ -54,3 +54,8 @@ void app_motor_mainProcess(void)
}
}
void app_motor_changeState(motor_state_ENUM e_val)
{
e_motor_state = e_val;
}

View File

@ -14,14 +14,17 @@
#include "app_led.h"
#include "app_motor.h"
#include "app_ir_controller.h"
#include "mw_led.h"
#include "mw_bluetooth.h"
#include "mw_ir_controller.h"
// #include "bsp_gpio.h"
#include "bsp_timer.h"
#include "bsp_usart.h"
#include "bsp_motor.h"
// #include "bsp.h"
/*************************************************************************************
@ -39,6 +42,7 @@ void bsp_init(void)
bsp_usart_debug_init();
bsp_usart_IrController_init();
bsp_InitMotor();
// bsp_InitTimer();
// bsp_usart_1_init(115200);
@ -57,6 +61,8 @@ void middleware_init(void)
// bluetooth mw. init
// mw_bluetooth_drv_init();
mw_InitIrController();
}
/*************************************************************************************
* @brief app
@ -92,5 +98,7 @@ int main(void)
// bsp_pwm_test_loop();
app_motor_mainProcess();
app_irControllerProcess();
}
}

View File

@ -23,32 +23,27 @@
#define UART3_RX_BUF_SIZE 1*1024
#endif
/* 串口设备结构体 */
typedef struct
typedef enum
{
USART_TypeDef *uart; /* STM32内部串口设备指针 */
uint8_t *pTxBuf; /* 发送缓冲区 */
uint8_t *pRxBuf; /* 接收缓冲区 */
uint16_t usTxBufSize; /* 发送缓冲区大小 */
uint16_t usRxBufSize; /* 接收缓冲区大小 */
uint16_t usTxWrite; /* 发送缓冲区写指针 */
uint16_t usTxRead; /* 发送缓冲区读指针 */
uint16_t usTxCount; /* 等待发送的数据个数 */
COM_DEBUG = 0,
COM_IR_CONTROLLER,
COM_RECV1,
COM_NUM
}com_type_ENUM;
uint16_t usRxWrite; /* 接收缓冲区写指针 */
uint16_t usRxRead; /* 接收缓冲区读指针 */
uint16_t usRxCount; /* 还未读取的新数据个数 */
void (*SendBefor)(void); /* 开始发送之前的回调函数指针主要用于RS485切换到发送模式 */
void (*SendOver)(void); /* 发送完毕的回调函数指针主要用于RS485将发送模式切换为接收模式 */
void (*ReciveNew)(uint8_t _byte); /* 串口收到数据的回调函数指针 */
}UART_T;
void bsp_usartTotalInit(void);
void bsp_usart_debug_init(void);
void bsp_usart_IrController_init(void);
uint8_t bsp_usart_IsComRecvChar(com_type_ENUM e_com);
uint8_t bsp_usart_GetComChar(com_type_ENUM e_com, uint8_t *recv_uc);
// void bsp_usart_send_data(usart_type_Enum e_usart_type, uint16_t us_tx_data);
// uint16_t bsp_usart_receive_data(usart_type_Enum e_usart_type);

View File

@ -5,9 +5,29 @@
#include "misc.h"
#include "stdio.h"
#include "public_diy.h"
/* 串口设备结构体 */
typedef struct
{
USART_TypeDef *uart; /* STM32内部串口设备指针 */
uint8_t *pTxBuf; /* 发送缓冲区 */
uint8_t *pRxBuf; /* 接收缓冲区 */
uint16_t usTxBufSize; /* 发送缓冲区大小 */
uint16_t usRxBufSize; /* 接收缓冲区大小 */
uint16_t usTxWrite; /* 发送缓冲区写指针 */
uint16_t usTxRead; /* 发送缓冲区读指针 */
uint16_t usTxCount; /* 等待发送的数据个数 */
uint16_t usRxWrite; /* 接收缓冲区写指针 */
uint16_t usRxRead; /* 接收缓冲区读指针 */
uint16_t usRxCount; /* 还未读取的新数据个数 */
void (*SendBefor)(void); /* 开始发送之前的回调函数指针主要用于RS485切换到发送模式 */
void (*SendOver)(void); /* 发送完毕的回调函数指针主要用于RS485将发送模式切换为接收模式 */
void (*ReciveNew)(uint8_t _byte); /* 串口收到数据的回调函数指针 */
}UART_T;
/* 定义每个串口结构体变量 */
#if UART1_FIFO_EN == 1
@ -207,6 +227,122 @@ void bsp_usart_IrController_init(void)
USART_Cmd(USART_IRCONTROLLER_TYPE, ENABLE);
}
/*************************************************************************************
* @brief enum转换为内部的uart指针
* @param[in/out] e_com
* @return UART_T*
*
* @warning ,
* @note
*************************************************************************************/
static UART_T * bsp_usart_ComToUART(com_type_ENUM e_com)
{
UART_T* retVal = 0;
if(e_com == COM_DEBUG)
{
#if UART1_FIFO_EN == 1
retVal = &g_tUart1;
#endif
}
else if(e_com == COM_IR_CONTROLLER)
{
#if UART2_FIFO_EN == 1
retVal = &g_tUart2;
#endif
}
else if(e_com == COM_RECV1)
{
#if UART3_FIFO_EN == 1
retVal = &g_tUart3;
#endif
}
return retVal;
}
/*************************************************************************************
* @brief
* @param[in/out] e_com
* @return uint8_t
*
* @warning ,
* @note
*************************************************************************************/
uint8_t bsp_usart_GetComChar(com_type_ENUM e_com, uint8_t *recv_uc)
{
UART_T * tmp_ptr_uart;
uint8_t retVal = RET_ERROR;
uint16_t usCount;
tmp_ptr_uart = bsp_usart_ComToUART(e_com);
// 非空指针
if(tmp_ptr_uart != 0)
{
/* usRxCount 变量在中断函数中被改写,主程序读取该变量时,必须进行临界区保护 */
DISABLE_INT();
usCount = tmp_ptr_uart->usRxCount;
ENABLE_INT();
// 有收到数据
if(usCount != 0)
{
// 取数据
*recv_uc = tmp_ptr_uart->pRxBuf[tmp_ptr_uart->usRxRead];
// 更新队列
/* 改写FIFO读索引 */
DISABLE_INT();
if (++tmp_ptr_uart->usRxRead >= tmp_ptr_uart->usRxBufSize)
{
tmp_ptr_uart->usRxRead = 0;
}
tmp_ptr_uart->usRxCount--;
ENABLE_INT();
retVal = RET_OK;
}
else
{
retVal = RET_ERROR;
}
}
else
{
retVal = RET_ERROR;
}
// 返回值
return retVal;
}
/*************************************************************************************
* @brief
* @param[in/out] e_com
* @return uint8_t
*
* @warning ,
* @note
*************************************************************************************/
uint8_t bsp_usart_IsComRecvChar(com_type_ENUM e_com)
{
UART_T * tmp_ptr_uart;
uint8_t retVal = FALSE;
uint16_t usCount;
tmp_ptr_uart = bsp_usart_ComToUART(e_com);
/* usRxCount 变量在中断函数中被改写,主程序读取该变量时,必须进行临界区保护 */
DISABLE_INT();
usCount = tmp_ptr_uart->usRxCount;
ENABLE_INT();
if(tmp_ptr_uart != NULL)
{
if(usCount != 0)
{
retVal = TRUE;
}
}
return retVal;
}
/*
*********************************************************************************************************
* : UartIRQ
@ -300,6 +436,9 @@ static void UartIRQ(UART_T *_pUart)
}
// //加入以下代码,支持 printf 函数,而不需要选择 use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
@ -338,4 +477,5 @@ void USART2_IRQHandler(void)
{
UartIRQ(&g_tUart2);
}
#endif

View File

@ -11,6 +11,17 @@
#endif
#ifndef TRUE
#define TRUE (1u)
#endif
#ifndef FALSE
#define FALSE (0u)
#endif
/* 开关全局中断的宏 */
#define ENABLE_INT() __set_PRIMASK(0) /* 使能全局中断 */
#define DISABLE_INT() __set_PRIMASK(1) /* 禁止全局中断 */

View File

@ -0,0 +1,167 @@
#include "mw_ir_controller.h"
#include "bsp_usart.h"
#include "string.h"
#include "public_diy.h"
#define IR_CONTROLLER_FRAME_HEAD_1 (0x00)
#define IR_CONTROLLER_FRAME_HEAD_2 (0xFF)
#define IR_CONTROLLER_FRAME_UP (0x18) // ↑
#define IR_CONTROLLER_FRAME_DOWN (0x52) // ↓
#define IR_CONTROLLER_FRAME_LEFT (0x08) // ←
#define IR_CONTROLLER_FRAME_RIGHT (0x5A) // →
#define IR_CONTROLLER_FRAME_OK (0x1C) // OK
#define IR_DECODE_QUEUE_LEN (20u)
typedef struct
{
uint8_t read;
uint8_t write;
uint8_t count;
IR_DECODE_ENUM ir_decode_queue[IR_DECODE_QUEUE_LEN];
}IR_DECODE_STR;
static IR_DECODE_STR str_ir_decode;
/*************************************************************************************
* @brief
* @param[in/out] val
* @return IR_DECODE_ENUM
*
* @warning ,
* @note
*************************************************************************************/
IR_DECODE_ENUM mw_IrController_decode(uint8_t val)
{
IR_DECODE_ENUM e_retVal;
switch(val)
{
case IR_CONTROLLER_FRAME_UP:
e_retVal = ir_decode_up;
break;
case IR_CONTROLLER_FRAME_DOWN:
e_retVal = ir_decode_down;
break;
case IR_CONTROLLER_FRAME_LEFT:
e_retVal = ir_decode_left;
break;
case IR_CONTROLLER_FRAME_RIGHT:
e_retVal = ir_decode_right;
break;
case IR_CONTROLLER_FRAME_OK:
e_retVal = ir_decode_ok;
break;
default:
e_retVal = ir_decode_NUM;
break;
}
return e_retVal;
}
/*************************************************************************************
* @brief
*
* @warning ,
* @note
*************************************************************************************/
void mw_InitIrController(void)
{
memset((uint8_t *)&str_ir_decode, 0x00, sizeof(str_ir_decode));
}
uint8_t mw_GetIrControllerChar(IR_DECODE_ENUM * eptr_val)
{
if(str_ir_decode.count > 0)
{
// 取值
* eptr_val = str_ir_decode.ir_decode_queue[str_ir_decode.read];
// 更新
if(++str_ir_decode.read > IR_DECODE_QUEUE_LEN)
{
str_ir_decode.read = 0;
}
str_ir_decode.count--;
return RET_OK;
}
else
{
return RET_ERROR;
}
}
/*************************************************************************************
* @brief
*
* @warning ,
* @note
*************************************************************************************/
void mw_IrReceiveProcess(void)
{
static uint8_t tmp_recv_state = 0;
uint8_t recv_val;
IR_DECODE_ENUM e_recv_ir_decode;
switch(tmp_recv_state)
{
// Idle
case 0:
if(bsp_usart_IsComRecvChar(COM_IR_CONTROLLER) > 0)
{
tmp_recv_state = 1;
}
break;
// 接收第一个字符 若帧头1 对了则进入下一阶段,否则回到最初的阶段
case 1:
if(bsp_usart_GetComChar(COM_IR_CONTROLLER, &recv_val) == RET_OK)
{
if(recv_val == IR_CONTROLLER_FRAME_HEAD_1)
{
tmp_recv_state = 2;
}
else
{
tmp_recv_state = 0;
}
}
break;
case 2:
// 接收第二个字符 若帧头2 对了则进入下一阶段,否则回到最初的阶段
if(bsp_usart_GetComChar(COM_IR_CONTROLLER, &recv_val) == RET_OK)
{
if(recv_val == IR_CONTROLLER_FRAME_HEAD_2)
{
tmp_recv_state = 3;
}
else
{
tmp_recv_state = 0;
}
}
break;
case 3:
// 判断用户码,修改遥控器状态
if(bsp_usart_GetComChar(COM_IR_CONTROLLER, &recv_val) == RET_OK)
{
// 转化为解码后的数据
e_recv_ir_decode = mw_IrController_decode(recv_val);
// 存进队列并更新
str_ir_decode.ir_decode_queue[str_ir_decode.write] = e_recv_ir_decode;
++str_ir_decode.count;
if(++str_ir_decode.write >= IR_DECODE_QUEUE_LEN)
{
str_ir_decode.write = 0;
}
// 回到最初的阶段
tmp_recv_state = 0;
}
break;
default:
break;
}
}

View File

@ -0,0 +1,25 @@
#ifndef __MW_IR_CONTROLLER_H__
#define __MW_IR_CONTROLLER_H__
#include <stdint.h>
typedef enum
{
ir_decode_up = 0,
ir_decode_down,
ir_decode_left,
ir_decode_right,
ir_decode_ok,
ir_decode_NUM
}IR_DECODE_ENUM;
void mw_IrReceiveProcess(void);
void mw_InitIrController(void);
uint8_t mw_GetIrControllerChar(IR_DECODE_ENUM * eptr_val);
#endif

View File

@ -1,8 +1,8 @@
:020000040800F2
:10000000E80C0020050100080D0100080F010008A0
:10000000080D0020050100080D0100080F0100087F
:10001000110100081301000815010008000000008C
:1000200000000000000000000000000017010008B0
:1000300019010008000000001B010008510500081C
:1000300019010008000000001B01000875050008F8
:100040001F0100081F0100081F0100081F01000810
:100050001F0100081F0100081F0100081F01000800
:100060001F0100081F0100081F0100081F010008F0
@ -10,391 +10,431 @@
:100080001F0100081F0100081F0100081F010008D0
:100090001F0100081F0100081F0100081F010008C0
:1000A0001F0100081F0100081F0100081F010008B0
:1000B000FD050008010600081F0100081F010008D7
:1000B00021060008250600081F0100081F0100088E
:1000C0001F0100081F0100081F0100081F01000890
:1000D0001F0100088D080008C90800081F0100085A
:1000D0001F010008B1080008ED0800081F01000812
:1000E0001F0100081F0100081F010008DFF810D0E1
:1000F00000F02CF80048004705160008AFF3008018
:10010000E80C00200648804706480047FEE7FEE767
:1000F00000F03EF80048004735170008AFF30080D5
:10010000080D00200648804706480047FEE7FEE746
:10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7
:100120009D050008ED00000840EA01039B0703D08D
:10012000C1050008ED00000840EA01039B0703D069
:1001300009E008C9121F08C0042AFAD203E011F826
:10014000013B00F8013B521EF9D27047064C074DA7
:1001500006E0E06840F0010394E807009847103497
:10016000AC42F6D3FFF7C6FF541800087418000815
:100170002DE9F0410246002500260020002300243E
:10018000002791F803C00CF00F0591F803C00CF0A4
:10019000100CBCF1000F03D091F802C04CEA050529
:1001A00091F800C0BCF1000F31D0146800202BE0A2
:1001B0004FF0010C0CFA00F3B1F800C00CEA030692
:1001C0009E4220D183004FF00F0C0CFA03F7BC4382
:1001D00005FA03FC4CEA040491F803C0BCF1280FB3
:1001E00006D14FF0010C0CFA00FCC2F814C00AE072
:1001F00091F803C0BCF1480F05D14FF0010C0CFA87
:1002000000FCC2F810C0401C0828D1D31460B1F81B
:1002100000C0BCF1FF0F34DD546800202EE000F177
:10022000080C4FF0010808FA0CF3B1F800C00CEA12
:1002300003069E4221D183004FF00F0C0CFA03F706
:10024000BC4305FA03FC4CEA040491F803C0BCF17A
:10025000280F05D100F1080C08FA0CF8C2F8148038
:1002600091F803C0BCF1480F07D100F1080C4FF022
:10027000010808FA0CF8C2F81080401C0828CED3F8
:100280005460BDE8F0814161704701617047000032
:1002900070B5002100230F22C47804B3154C2468E4
:1002A00004F4E064C4F5E064210AC1F10403CA4027
:1002B000447804FA03F184781440214309010E4C78
:1002C0000678A155047804F01F050124AC40057898
:1002D0006D11AD0005F1E025C5F8004109E0047895
:1002E00004F01F050124AC40044D0678761145F852
:1002F000264070BD0CED00E000E400E080E100E08D
:1003000002490143024A1160704700000000FA05EB
:100310000CED00E029B1064AD2690243044BDA61D0
:1003200004E0034AD2698243014BDA61704700005E
:100330000010024029B1064A12690243044B1A61B7
:1003400004E0034A12698243014B1A6170470000BE
:100350000010024029B1064A92690243044B9A6197
:1003600004E0034A92698243014B9A61704700009E
:100370000010024029B1064AD2680243044BDA60F9
:1003800004E0034AD2688243014BDA607047000000
:100390000010024030B500210022002400232D4D22
:1003A0006D6805F00C0121B1042905D0082923D17D
:1003B00005E0294D056022E0274D05601FE0254D31
:1003C0006D6805F47012234D6D6805F480340225C4
:1003D00005EB92421CB9214D554305600BE01D4DC4
:1003E0006D6805F400351DB11C4D5543056002E0F4
:1003F000194D5543056002E0174D056000BF00BF71
:10040000144D6D6805F0F0010909154D6B5C056828
:10041000DD4045600F4D6D6805F4E061090A104D3F
:100420006B5C4568DD4085600A4D6D6805F4605180
:10043000C90A0B4D6B5C4568DD40C560054D6D68B4
:1004400005F44041890B074D6B5CC568B5FBF3F5BE
:10045000056130BD0010024000127A0000093D0025
:10046000400000205000002010B500F001F810BD41
:100470000CB50020019000903348006840F48030B3
:100480003149086000BF3048006800F40030009037
:100490000198401C0190009818B90198B0F5A06F20
:1004A000F1D12948006800F4003010B1012000901B
:1004B00001E0002000900098012843D12348006803
:1004C00040F01000214908600846006820F007004D
:1004D00008600846006840F0020008601A4840685A
:1004E000194948600846406848600846406840F43A
:1004F000806048600846406820F47C1048600846E8
:10050000406840F4E81048600846006840F0807099
:10051000086000BF0C48006800F000700028F9D0A7
:100520000948406820F003000749486008464068D1
:1005300040F00200486000BF0348406800F00C0033
:100540000828F9D10CBD0000001002400020024034
:1005500010B500F001F810BD10B50D48006840B1AD
:100560000B480068401E0A49086010B9012009497B
:100570000870002408E004EB4401074A02EB810004
:1005800000F054FE601CC4B2042CF4DB10BD00006B
:100590000C000020100000206800002010B5134857
:1005A000006840F0010011490860084640681049A1
:1005B00008400E494860084600680E4908400B494B
:1005C00008600846006820F48020086008464068FB
:1005D00020F4FE0048604FF41F008860FFF744FFDE
:1005E0004FF000600449086010BD00000010024098
:1005F0000000FFF8FFFFF6FE08ED00E07047000086
:1006000010B50121264800F070F818B101212448E6
:1006100000F05CF80221224800F067F858B102218E
:100620001F4800F053F8002202211D4800F06EF828
:100630001C48006880470421194800F056F858B15A
:100640000421174800F042F800220421144800F069
:100650005DF81548006880470821114800F045F80A
:1006600058B108210E4800F031F8002208210C484A
:1006700000F04CF80D48006880471021084800F051
:1006800034F858B11021064800F020F8002210215B
:10069000034800F03BF806480068804710BD0000A2
:1006A00000040040180000201C0000202000002052
:1006B0002400002021B1028842F08002028004E080
:1006C00002884FF67F731A4002807047CA43028245
:1006D000704721B1028842F00102028004E00288E2
:1006E0004FF6FE731A400280704730B50246002074
:1006F00000230024158A05EA0103958905EA01040F
:1007000013B10CB1012000E0002030BD1AB1838983
:100710000B43838102E083898B4383817047018986
:100720004FF6F872114001817047000070B5002447
:1007300000220023058C4FF6EF7635400584028CAD
:100740008388048B48F6FF752C404FF6FF452C40FC
:100750000D884FF6FF7606EA05252C434FF6DF7528
:100760002A400D8906EA05152A434D8806EA051533
:100770002A43154DA84202D0144DA8421DD14FF670
:100780007F752A404D894FF6FF7606EA05152A4304
:100790004FF6BF752A408D8806EA05152A434FF6A5
:1007A000FF352B404FF2FF752B408D8906EA8505FA
:1007B0002B43CD8906EA85052B4383800483CD88AE
:1007C0000587028470BD0000002C01400034014008
:1007D0000021018041808180C1800181418181812E
:1007E000C181704701877047002202881D4B9842E3
:1007F0000ED01D4B98420BD0B0F1804F08D01B4B50
:10080000984205D01A4B984202D01A4B984204D114
:100810004FF68F731A404B881A43174B984207D0F4
:10082000164B984204D04FF6FF431A40CB881A4328
:1008300002808B8883850B8803850A4B98420BD0F6
:10084000094B984208D00E4B984205D00D4B984268
:1008500002D00D4B984201D10B7A0386012383828B
:1008600070470000002C01400034014000040040AB
:1008700000080040000C0040001000400014004040
:1008800000400140004401400048014010B540F2E2
:1008900026610C4800F097F820B140F22661094823
:1008A00000F01AF840F22551064800F08CF840B1EB
:1008B00040F22551034800F00FF8024800F03EF9DD
:1008C000C4B210BD0038014010B5024800F03FF935
:1008D00010BD00009800002010B50022002340F653
:1008E0006A14A14200D100BF0A1201249440A3B2AD
:1008F000DC43048010BD21B1828942F40052828120
:1009000004E082894DF6FF731A408281704700002F
:1009100010B504462048844209D101218803FFF71D
:1009200029FD00214FF48040FFF724FD32E01B48F1
:10093000844209D101214804FFF7FCFC00214FF457
:100940000030FFF7F7FC25E01548844209D101216A
:100950008804FFF7EFFC00214FF48020FFF7EAFC4A
:1009600018E01048844209D10121C804FFF7E2FCD5
:1009700000214FF40020FFF7DDFC0BE00A48844221
:1009800008D101210805FFF7D5FC00214FF48010A4
:10099000FFF7D0FC10BD00000038014000440040CB
:1009A00000480040004C004000500040024600203B
:1009B000B1F5007F00D100BF13880B400BB10120BF
:1009C00000E00020704770B5024600240023002597
:1009D000002040F66A16B14200D100BFC1F34215B3
:1009E00001F01F03012606FA03F3012D02D19689B7
:1009F000334006E0022D02D1168A334001E0968A88
:100A000033400C12012606FA04F41688344013B160
:100A10000CB1012000E0002070BDF0B503460024B9
:100A200000260025002040F66A17B94200D100BF19
:100A30001846C1F3421401F01F06012707FA06F514
:100A4000012C01D10C3004E0022C01D1103000E067
:100A500014301AB107682F43076002E00768AF43FC
:100A60000760F0BD2DE9F04786B005460E4600242C
:100A7000A24600BFA1460027B08900B100BF2F46A3
:100A80002C8A4CF6FF700440F08804432C82AC8919
:100A90004EF6F3100440B088318908437189084349
:100AA0000443AC81AC8A4FF6FF400440B089044354
:100AB000AC8201A8FFF76EFC1F48874202D1DDF827
:100AC00010A001E0DDF80CA0A88900F4004040B1BE
:100AD0000AEBCA0000EB0A1031684900B0FBF1F8DC
:100AE00007E00AEBCA0000EB0A1031688900B0FB8E
:100AF000F1F86420B8FBF0F004012009642101FB47
:100B00001089A88900F4004040B1322000EBC900F0
:100B1000B0FBF1F000F00700044308E0322000EBE6
:100B200009106421B0FBF1F000F00F0004432C81A8
:100B300006B0BDE8F0870000003801400146888813
:100B4000C0F308007047C1F308028280704770B597
:100B5000044640F225512068FFF735FFE0B12068D8
:100B6000FFF7ECFFC5B2E18AA0684554E08A401C5B
:100B700080B2E082E189884201DB0020E082608B64
:100B8000E189884202DA608B401C6083606A10B1A0
:100B90002846616A884700BF40F227712068FFF746
:100BA00012FF08B3A08A60B9002240F227712068C2
:100BB000FFF733FF012240F226612068FFF72DFF87
:100BC00037E0638A6268D15C2068FFF7BCFF608A07
:100BD000401C80B26082A189884201DB00206082D3
:100BE000A08A401EA08224E040F226612068FFF720
:100BF000EAFEF0B1A08A50B9002240F226612068D6
:100C0000FFF70BFF206AA0B1206A804711E0638ADA
:100C10006268D15C2068FFF796FF608A401C80B252
:100C20006082A189884201DB00206082A08A401E88
:100C3000A08270BD0FB4054B10B503A9044A0298F9
:100C400000F01AF810BC5DF814FB0000E115000874
:100C50002800002002E008C8121F08C1002AFAD1AB
:100C600070477047002001E001C1121F002AFBD12C
:100C7000704780F3108870472DE9F84F99469246E7
:100C800088460546002706E025280AD051464A46F0
:100C900090476D1C7F1C28780028F5D13846BDE8A8
:100CA000F88F002315F8011F18462E2915D115F8C5
:100CB000011F04232A290DD06FF02F022978A1F1FA
:100CC0003004092C09D800EB800002EB40000844F6
:100CD0006D1CF3E758F8040B6D1C2A78002ADDD050
:100CE000632A07D0732A0FD0104651464A469047D0
:100CF0007F1C2AE018F8042B8DF8002000218DF8C5
:100D000001106E46012103E058F8046B4FF0FF31EB
:100D10005A074FF0000401D409E0641C84420BDA46
:100D20008C42FADB325D002AF7D105E0641C8C426C
:100D3000FCDB305D0028F9D1274404E016F8010BF4
:100D400051464A469047641EF8D26D1CA3E710B581
:100D500000F0FAF810BD000010B52248007820B16C
:100D6000012808D002283AD11EE001201E4908704F
:100D70001C49087034E01C480078002805DD00207C
:100D800019490870FA2000F045FD00F03EFD0028EA
:100D900006DD02201349087001201349087002E0A3
:100DA0001249886880471BE00F480078002805DD5D
:100DB00000200D490870FA2000F02CFD00F025FD00
:100DC000002808DD0120074908700749087008A0BD
:100DD000FFF730FF02E00549C868804700E000BF28
:100DE00000BF10BD010000200500002054000020BD
:100DF0004661756C7421200A0000000010B523487C
:100E0000007820B1012808D002283CD11FE0012041
:100E10001F4908701D49087036E01D4800780028F9
:100E200006DD00201A4908704FF4FA7000F0F2FC59
:100E300000F0EBFC002806DD0220144908700120B8
:100E40001349087002E01349886880471CE0104885
:100E50000078002806DD00200D4908704FF4FA7074
:100E600000F0D8FC00F0D1FC002808DD0120074983
:100E700008700749087008A0FFF7DCFE02E005498A
:100E8000C868804700E000BF00BF10BD010000201F
:100E9000030000205400002049646C6521200A00F2
:100EA00010B52348007820B1012808D002283CD191
:100EB0001FE001201F4908701D49087036E01D48D9
:100EC0000078002806DD00201A4908704FF47A7077
:100ED00000F0A0FC00F099FC002806DD0220144977
:100EE000087001201349087002E0134988688047A0
:100EF0001CE010480078002806DD00200D4908702D
:100F00004FF47A7000F086FC00F07FFC002808DDCA
:100F10000120074908700749087008A0FFF78AFEFA
:100F200002E00549C868804700E000BF00BF10BD6F
:100F300001000020040000205400002052756E6E55
:100F4000696E6721200A000000B585B0002168465F
:100F500000F0B8FB142269460248FFF7E5F805B037
:100F600000BD00005400002010B50A48007820B1F0
:100F7000012805D0022809D105E0FFF73FFF06E070
:100F8000FFF78EFF03E0FFF7E7FE00E000BF00BFC2
:100F900010BD00000000002010B500F003F8FFF7BE
:100FA000E3FF10BD08480078084908700848007839
:100FB0000978884206D00548007805490870002065
:100FC0000449087070470000020000200000002063
:100FD000060000200100002010B51B4800780728FB
:100FE0002CD2DFE800F004070D13191F250000F0D4
:100FF000F1FB26E0154890F9000000F0C3FB20E06B
:10100000124890F9000000F0C7FB1AE00F4890F971
:10101000000000F0E7FB14E00C4890F9000000F03D
:10102000EBFB0EE0094890F9000000F0BFFB08E080
:10103000064890F9000000F0C4FB02E000F0CAFB93
:1010400000BF00BF10BD0000070000200800002006
:1010500010B510210148FFF716F910BD0008014036
:1010600010B510210148FFF710F910BD000801402C
:1010700010B520210148FFF706F910BD0008014016
:1010800010B520210148FFF700F910BD000801400C
:1010900010B540210148FFF7F6F810BD00080140E7
:1010A00010B540210148FFF7F0F810BD00080140DD
:1010B00010B580210148FFF7E6F810BD0008014097
:1010C00010B580210148FFF7E0F810BD000801408D
:1010D0000146042901DB0020704701EB4100084A6A
:1010E00002EB80004078012808D1002001EB41028A
:1010F000034B03EB820250700120EDE70020EBE789
:101100006800002008B501210420FFF723F9102012
:101110008DF80300ADF8000003208DF80200694649
:101120001548FFF725F810208DF803002020ADF8B2
:10113000000003208DF8020069460F48FFF718F8F9
:1011400010208DF803004020ADF8000003208DF83A
:10115000020069460848FFF70BF810208DF80300DD
:101160008020ADF8000003208DF802006946024897
:10117000FEF7FEFF08BD00000008014010B5FFF7B4
:10118000C1FF00F001F810BD00B589B0012108468B
:10119000FFF7C0F808A92448FEF7EAFF0121042060
:1011A000FFF7D8F80220ADF8200018208DF82300B2
:1011B00003208DF8220008A91B48FEF7D9FF4FF045
:1011C0008040FFF7ACFA6320ADF818002320ADF89B
:1011D00014000020ADF81A00ADF816008DF81C00C0
:1011E00005A94FF08040FFF7FFFA01A8FFF7F0FADA
:1011F0006020ADF804000020ADF80C000120ADF82F
:1012000006000020ADF80A0001A94FF08040FFF76A
:101210008DFA01218807FFF74DFA01218807FFF7B2
:1012200058FA09B000BD000000080140416851B102
:101230004168491E416031B901214170017801299D
:1012400001D181684160704770B504460D46042C99
:1012500006DB114A11A118A0FFF7ECFC00BFFEE766
:101260000120FFF706FD04EB44001B4901EB800061
:10127000456004EB440001EB80008560002004EB36
:101280004401154A02EB8101487004EB440102F865
:101290002100FFF7EEFC70BD221800082E2E5C43E3
:1012A0006F64655C6273705C7372635C6273705FC1
:1012B00074696D65722E63004572726F723A2066B2
:1012C000696C652025732C2066756E6374696F6E7A
:1012D00020257328290D0A006800002010B5044657
:1012E00021464FF08040FFF77DFA10BD01460020F7
:1012F00011B9044AD26804E0012902D1024A1268F5
:1013000000207047001001400C0C014010B500F0A7
:1013100061F800F0ADF800F01FF900F0C7F8FFF732
:101320002DFF10BD08B501211020FFF713F8002094
:1013300000F02CF84FF40050ADF8000010208DF8AC
:10134000030003208DF8020069460248FEF710FFF3
:1013500008BD00000010014008B501210820FEF77B
:10136000F9FF012000F012F84FF40070ADF8000012
:1013700010208DF8030003208DF802006946024812
:10138000FEF7F6FE08BD0000000C014020B94FF446
:101390000051044A516104E0012802D14102024A8D
:1013A0001160704700100140140C014028B9074932
:1013B000096941F40051054A1161012805D1044928
:1013C000096841F40071024A116070470010014041
:1013D000100C014070B5002016E0002100EB400227
:1013E0001F4B03EB8202516000EB400203EB8202D1
:1013F000916000EB400203EB8202517000EB40026F
:1014000003F82210411CC8B20428E6DB154909681C
:101410004FF47A73B1FBF3F2B2F1807F00D31DE099
:1014200022F07F41491E4FF0E023596159170F23E5
:10143000002907DA1C07260E0B4C01F00F052D1FA3
:10144000665503E01C07250E084C655400BF0021BB
:101450004FF0E02399610721196100BF70BD0000C2
:10146000680000202C00002018ED00E000E400E0FF
:101470000A480B4908600B4848600B4888604FF4E5
:1014800080608881C881002008824882C8820883E1
:1014900048838882C86108624862704700440040FF
:1014A00098000020C0000020C004002000B587B0D4
:1014B00001210820FEF74EFF01214804FEF72AFF14
:1014C0002348FFF725FA0420ADF8180003208DF813
:1014D0001A0018208DF81B0006A91E48FEF748FECA
:1014E0000820ADF8180004208DF81B0006A9194843
:1014F000FEF73EFE4FF4165002900020ADF80C00AF
:10150000ADF80E00ADF81000ADF814000C20ADF8E9
:10151000120002A90E48FFF7A5FA012240F2255158
:101520000B48FFF77AFA26208DF8040000208DF88A
:1015300005008DF8060001208DF8070001A8FEF7D0
:10154000A7FE01210248FFF7D6F907B000BD000051
:10155000004400400008014000B585B0012108208A
:10156000FEF7F8FE01218804FEF7D4FE1A48FFF7C3
:10157000CFF94FF48060ADF8100003208DF8120011
:1015800018208DF8130004A91448FEF7F1FD4FF45C
:101590000060ADF8100004208DF8130004A90F4876
:1015A000FEF7E6FD4FF4E13000900020ADF80400B6
:1015B000ADF80600ADF80800ADF80C000C20ADF851
:1015C0000A0069460448FFF74DFA01210248FFF777
:1015D00092F905B000BD000000480040000C014039
:1015E00070B504460D4600BF40210548FFF7DEF9FF
:1015F0000028F9D0E1B20248FFF7A5FA204670BDF5
:10160000004800404FF4A060FEF77AFEFFF77EFE30
:1016100000F008F8FFF79BFB03E0FFF7BDFCFFF7C6
:10162000DBFCFAE710B500F075F810BD10B5044604
:10163000002C07DDFFF714FDFFF71AFDA0B2FFF73E
:101640004DFE10E03CB9FFF70BFDFFF719FDA0B20E
:10165000FFF744FE07E0FFF7FBFCFFF711FD6142D7
:1016600088B2FFF73BFE10BD10B50446002C07DD25
:10167000FFF716FDFFF71CFDA0B2FFF72FFE10E0ED
:101680003CB9FFF70DFDFFF71BFDA0B2FFF726FEEB
:1016900007E0FFF7FDFCFFF713FD614288B2FFF79B
:1016A0001DFE10BD10B500240020FFF71FFE0446EC
:1016B000204610BD10B500240120FFF717FE044698
:1016C000204610BD70B505460C46022C01DB00BF5C
:1016D000FEE704EB8400044A02EB80011422284652
:1016E000FEF722FD70BD0000C008002010B50020EC
:1016F000FFF74CFE10BD10B50020FFF757FE10BDE0
:1017000010B50120FFF742FE10BD10B50120FFF714
:101710004DFE10BD10B500201149087011484860F9
:10172000114888601148C860114808610120087597
:1017300010490B4881611049C1611049016210498B
:101740004162002408E004EB8401054A02EB8101B8
:1017500048688047601CC4B2022CF4DB10BD000056
:10176000C008002025130008F7160008ED16000831
:10177000A5160008591300080B17000801170008E8
:10178000B516000810B504462046FFF74FFF60422B
:1017900040B2FFF769FF10BD10B50446604240B289
:1017A000FFF744FF2046FFF75FFF10BD10B504466A
:1017B000604240B2FFF73AFF604240B2FFF754FF89
:1017C00010BD10B504462046FFF730FF2046FFF756
:1017D0004BFF10BD10B50020FFF728FF0020FFF7DA
:1017E00043FF10BD10B504460020FFF71FFF604205
:1017F00040B2FFF739FF10BD10B504462046FFF791
:1018000015FF0020FFF730FF10BD10B50020FFF7D7
:101810005FFC10BD10B5044621460020FFF714FD03
:1018200010BD6273705F537461727454696D657238
:10183000006273705F53746172744175746F5469A0
:101840006D6572006273705F53746F7054696D657B
:10185000720000007418000800000020540000000E
:10186000540C0008C818000854000020940C000014
:10187000640C0008000000000000000032000000BE
:101880000000000000000000000000000000000058
:101890000000000000000000000000000000000048
:1018A00000A24A040000000000000000010203043E
:1018B00006070809000000000102030401020304F6
:0818C0000607080902040608EE
:10014000013B00F8013B521EF9D27047D2B201E0E8
:1001500000F8012B491EFBD270470022F6E710B5CC
:1001600013460A4604461946FFF7F0FF204610BD25
:10017000064C074D06E0E06840F0010394E80700F4
:1001800098471034AC42F6D3FFF7B4FFCC1A0008FE
:10019000EC1A00082DE9F041024600250026002057
:1001A00000230024002791F803C00CF00F0591F8FC
:1001B00003C00CF0100CBCF1000F03D091F802C08A
:1001C0004CEA050591F800C0BCF1000F31D014686D
:1001D00000202BE04FF0010C0CFA00F3B1F800C046
:1001E0000CEA03069E4220D183004FF00F0C0CFA5C
:1001F00003F7BC4305FA03FC4CEA040491F803C07E
:10020000BCF1280F06D14FF0010C0CFA00FCC2F82B
:1002100014C00AE091F803C0BCF1480F05D14FF0BB
:10022000010C0CFA00FCC2F810C0401C0828D1D305
:100230001460B1F800C0BCF1FF0F34DD5468002039
:100240002EE000F1080C4FF0010808FA0CF3B1F8A9
:1002500000C00CEA03069E4221D183004FF00F0C30
:100260000CFA03F7BC4305FA03FC4CEA040491F8CA
:1002700003C0BCF1280F05D100F1080C08FA0CF8F6
:10028000C2F8148091F803C0BCF1480F07D100F107
:10029000080C4FF0010808FA0CF8C2F81080401C56
:1002A0000828CED35460BDE8F081416170470161F8
:1002B0007047000070B5002100230F22C47804B3FA
:1002C000154C246804F4E064C4F5E064210AC1F12B
:1002D0000403CA40447804FA03F1847814402143AB
:1002E00009010E4C0678A155047804F01F0501247D
:1002F000AC4005786D11AD0005F1E025C5F8004171
:1003000009E0047804F01F050124AC40044D067890
:10031000761145F8264070BD0CED00E000E400E0E9
:1003200080E100E002490143024A11607047000089
:100330000000FA050CED00E029B1064AD26902433B
:10034000044BDA6104E0034AD2698243014BDA616B
:10035000704700000010024029B1064A12690243AA
:10036000044B1A6104E0034A12698243014B1A618B
:10037000704700000010024029B1064A926902430A
:10038000044B9A6104E0034A92698243014B9A61EB
:10039000704700000010024029B1064AD2680243AB
:1003A000044BDA6004E0034AD2688243014BDA600E
:1003B000704700000010024030B5002100220024E8
:1003C00000232D4D6D6805F00C0121B1042905D0E5
:1003D000082923D105E0294D056022E0274D05605D
:1003E0001FE0254D6D6805F47012234D6D6805F40E
:1003F0008034022505EB92421CB9214D554305601E
:100400000BE01D4D6D6805F400351DB11C4D5543C5
:10041000056002E0194D5543056002E0174D056087
:1004200000BF00BF144D6D6805F0F0010909154DBE
:100430006B5C0568DD4045600F4D6D6805F4E0615B
:10044000090A104D6B5C4568DD4085600A4D6D689A
:1004500005F46051C90A0B4D6B5C4568DD40C56011
:10046000054D6D6805F44041890B074D6B5CC5680F
:10047000B5FBF3F5056130BD0010024000127A00B3
:1004800000093D00400000205000002010B500F0A1
:1004900001F810BD0CB500200190009033480068B1
:1004A00040F480303149086000BF3048006800F4F3
:1004B000003000900198401C0190009818B90198F4
:1004C000B0F5A06FF1D12948006800F4003010B1F8
:1004D0000120009001E0002000900098012843D105
:1004E0002348006840F01000214908600846006871
:1004F00020F0070008600846006840F0020008602D
:100500001A484068194948600846406848600846EB
:10051000406840F4806048600846406820F47C10E1
:1005200048600846406840F4E810486008460068A3
:1005300040F08070086000BF0C48006800F0007058
:100540000028F9D00948406820F0030007494860B6
:100550000846406840F00200486000BF0348406819
:1005600000F00C000828F9D10CBD0000001002407A
:100570000020024010B500F001F810BD10B50D4884
:10058000006840B10B480068401E0A49086010B975
:10059000012009490870002408E004EB4401074ADF
:1005A00002EB810000F084FE601CC4B2042CF4DB7A
:1005B00010BD00000C000020100000206C00002086
:1005C00010B51348006840F0010011490860084662
:1005D0004068104908400E494860084600680E49C6
:1005E00008400B4908600846006820F48020086035
:1005F0000846406820F4FE0048604FF41F00886001
:10060000FFF744FF4FF000600449086010BD000090
:10061000001002400000FFF8FFFFF6FE08ED00E0CA
:100620007047000010B50121264800F070F818B19D
:100630000121244800F05CF80221224800F067F80C
:1006400058B102211F4800F053F8002202211D4832
:1006500000F06EF81C48006880470421194800F03B
:1006600056F858B10421174800F042F8002204213E
:10067000144800F05DF815480068804708211148CB
:1006800000F045F858B108210E4800F031F800227A
:1006900008210C4800F04CF80D48006880471021F4
:1006A000084800F034F858B11021064800F020F84E
:1006B00000221021034800F03BF8064800688047FC
:1006C00010BD000000040040180000201C000020A5
:1006D000200000202400002021B1028842F0800286
:1006E000028004E002884FF67F731A400280704750
:1006F000CA430282704721B1028842F0010202809F
:1007000004E002884FF6FE731A400280704730B54D
:100710000246002000230024158A05EA010395897A
:1007200005EA010413B10CB1012000E0002030BD46
:100730001AB183890B43838102E083898B438381D0
:10074000704701894FF6F87211400181704700002F
:1007500070B5002400220023058C4FF6EF7635405B
:100760000584028C8388048B48F6FF752C404FF675
:10077000FF452C400D884FF6FF7606EA05252C43F1
:100780004FF6DF752A400D8906EA05152A434D8884
:1007900006EA05152A43154DA84202D0144DA84279
:1007A0001DD14FF67F752A404D894FF6FF7606EA38
:1007B00005152A434FF6BF752A408D8806EA0515B0
:1007C0002A434FF6FF352B404FF2FF752B408D89A2
:1007D00006EA85052B43CD8906EA85052B438380F0
:1007E0000483CD880587028470BD0000002C014081
:1007F000003401400021018041808180C18001815D
:1008000041818181C1817047018770470022028840
:100810001D4B98420ED01D4B98420BD0B0F1804F2B
:1008200008D01B4B984205D01A4B984202D01A4B65
:10083000984204D14FF68F731A404B881A43174BD6
:10084000984207D0164B984204D04FF6FF431A4007
:10085000CB881A4302808B8883850B8803850A4BDB
:1008600098420BD0094B984208D00E4B984205D0C5
:100870000D4B984202D00D4B984201D10B7A038662
:100880000123838270470000002C014000340140A6
:100890000004004000080040000C00400010004030
:1008A0000014004000400140004401400048014065
:1008B00010B540F226610C4800F097F820B140F2E4
:1008C0002661094800F01AF840F22551064800F068
:1008D0008CF840B140F22551034800F00FF802486F
:1008E00000F03EF9C4B210BD0038014010B5024816
:1008F00000F03FF910BD00009C00002010B5002260
:10090000002340F66A14A14200D100BF0A1201245C
:100910009440A3B2DC43048010BD21B1828942F42B
:100920000052828104E082894DF6FF731A40828171
:100930007047000010B504462048844209D10121C7
:100940008803FFF729FD00214FF48040FFF724FDC5
:1009500032E01B48844209D101214804FFF7FCFC26
:1009600000214FF40030FFF7F7FC25E015488442E2
:1009700009D101218804FFF7EFFC00214FF480200A
:10098000FFF7EAFC18E01048844209D10121C804AD
:10099000FFF7E2FC00214FF40020FFF7DDFC0BE045
:1009A0000A48844208D101210805FFF7D5FC00213F
:1009B0004FF48010FFF7D0FC10BD0000003801405C
:1009C0000044004000480040004C004000500040FF
:1009D00002460020B1F5007F00D100BF13880B4014
:1009E0000BB1012000E00020704770B502460024E2
:1009F00000230025002040F66A16B14200D100BF56
:100A0000C1F3421501F01F03012606FA03F3012D7D
:100A100002D19689334006E0022D02D1168A334076
:100A200001E0968A33400C12012606FA04F4168877
:100A3000344013B10CB1012000E0002070BDF0B5CE
:100A40000346002400260025002040F66A17B9421C
:100A500000D100BF1846C1F3421401F01F06012760
:100A600007FA06F5012C01D10C3004E0022C01D16B
:100A7000103000E014301AB107682F43076002E01D
:100A80000768AF430760F0BD2DE9F04786B0054623
:100A90000E460024A24600BFA1460027B08900B13F
:100AA00000BF2F462C8A4CF6FF700440F0880443A8
:100AB0002C82AC894EF6F3100440B088318908438B
:100AC000718908430443AC81AC8A4FF6FF4004406F
:100AD000B0890443AC8201A8FFF76EFC1F4887422F
:100AE00002D1DDF810A001E0DDF80CA0A88900F427
:100AF000004040B10AEBCA0000EB0A10316849001F
:100B0000B0FBF1F807E00AEBCA0000EB0A1031680D
:100B10008900B0FBF1F86420B8FBF0F00401200973
:100B2000642101FB1089A88900F4004040B1322003
:100B300000EBC900B0FBF1F000F00700044308E04F
:100B4000322000EB09106421B0FBF1F000F00F003F
:100B500004432C8106B0BDE8F08700000038014056
:100B600001468888C0F308007047C1F308028280FC
:100B7000704770B5044640F225512068FFF735FFF5
:100B8000E0B12068FFF7ECFFC5B2E18AA0684554E8
:100B9000E08A401C80B2E082E189884201DB0020CB
:100BA000E082608BE189884202DA608B401C6083BE
:100BB000606A10B12846616A884700BF40F2277119
:100BC0002068FFF712FF08B3A08A60B9002240F244
:100BD00027712068FFF733FF012240F22661206869
:100BE000FFF72DFF37E0638A6268D15C2068FFF76A
:100BF000BCFF608A401C80B26082A189884201DB10
:100C000000206082A08A401EA08224E040F226617B
:100C10002068FFF7EAFEF0B1A08A50B9002240F246
:100C200026612068FFF70BFF206AA0B1206A804789
:100C300011E0638A6268D15C2068FFF796FF608AE2
:100C4000401C80B26082A189884201DB0020608262
:100C5000A08A401EA08270BD0FB4054B10B503A939
:100C6000044A029800F01DF810BC5DF814FB000067
:100C7000111700082800002002E008C8121F08C150
:100C8000002AFAD170477047002001E001C1121F0D
:100C9000002AFBD1704780F31088704780F31088DA
:100CA00070472DE9F84F9946924688460546002739
:100CB00006E025280AD051464A4690476D1C7F1C05
:100CC00028780028F5D13846BDE8F88F002315F8BC
:100CD000011F18462E2915D115F8011F04232A29B2
:100CE0000DD06FF02F022978A1F13004092C09D81A
:100CF00000EB800002EB400008446D1CF3E758F85D
:100D0000040B6D1C2A78002ADDD0632A07D0732AD1
:100D10000FD0104651464A4690477F1C2AE018F8EB
:100D2000042B8DF8002000218DF801106E46012162
:100D300003E058F8046B4FF0FF315A074FF00004FE
:100D400001D409E0641C84420BDA8C42FADB325D88
:100D5000002AF7D105E0641C8C42FCDB305D0028E2
:100D6000F9D1274404E016F8010B51464A46904752
:100D7000641EF8D26D1CA3E7014605290ED2DFE8F8
:100D800001F0030507090B00012009E0022007E03C
:100D9000032005E0042003E0002001E0072000BF5D
:100DA00000BF704710B500F00BF910BD38B500F06A
:100DB0001DFD684600F0D6FC48B99DF80000FFF71D
:100DC000DBFF0446072C02DA204600F041F938BD6B
:100DD00010B52248007820B1012808D002283AD165
:100DE0001EE001201E4908701C49087034E01C48B0
:100DF0000078002805DD002019490870FA2000F06D
:100E000045FE00F03EFE002806DD02201349087072
:100E100001201349087002E01249886880471BE0EE
:100E20000F480078002805DD00200D490870FA20E1
:100E300000F02CFE00F025FE002808DD0120074907
:100E400008700749087008A0FFF706FF02E005498F
:100E5000C868804700E000BF00BF10BD010000204F
:100E600005000020580000204661756C7421200A9E
:100E70000000000010B52348007820B1012808D0F8
:100E800002283CD11FE001201F4908701D4908704D
:100E900036E01D480078002806DD00201A49087059
:100EA0004FF4FA7000F0F2FD00F0EBFD002806DDD3
:100EB00002201449087001201349087002E0134908
:100EC000886880471CE010480078002806DD002074
:100ED0000D4908704FF4FA7000F0D8FD00F0D1FD14
:100EE000002808DD0120074908700749087008A09C
:100EF000FFF7B2FE02E00549C868804700E000BF86
:100F000000BF10BD01000020030000205800002099
:100F100049646C6521200A0010B52348007820B18F
:100F2000012808D002283CD11FE001201F49087089
:100F30001D49087036E01D480078002806DD0020B5
:100F40001A4908704FF47A7000F0A0FD00F099FD86
:100F5000002806DD0220144908700120134908709A
:100F600002E01349886880471CE010480078002898
:100F700006DD00200D4908704FF47A7000F086FD00
:100F800000F07FFD002808DD0120074908700749AF
:100F9000087008A0FFF760FE02E00549C8688047B6
:100FA00000E000BF00BF10BD0100002004000020D1
:100FB0005800002052756E6E696E6721200A00008D
:100FC00000B585B00021684600F0B8FC14226946DF
:100FD0000248FFF7A9F805B000BD00005800002046
:100FE00010B50A48007820B1012805D0022809D19F
:100FF00005E0FFF73FFF06E0FFF78EFF03E0FFF796
:10100000E7FE00E000BF00BF10BD000000000020B0
:1010100010B500F003F8FFF7E3FF10BD08480078B3
:1010200008490870084800780978884206D00548C1
:1010300000780549087000200449087070470000D6
:101040000200002000000020060000200100002017
:1010500001490870704700000700002010B51B48C8
:10106000007807282CD2DFE800F004070D13191FC1
:10107000250000F0EBFC26E0154890F9000000F098
:10108000BDFC20E0124890F9000000F0C1FC1AE01D
:101090000F4890F9000000F0E1FC14E00C4890F9D2
:1010A000000000F0E5FC0EE0094890F9000000F0B7
:1010B000B9FC08E0064890F9000000F0BEFC02E030
:1010C00000F0C4FC00BF00BF10BD000007000020FE
:1010D0000800002010B510210148FFF7E6F810BD08
:1010E0000008014010B510210148FFF7E0F810BDDD
:1010F0000008014010B520210148FFF7D6F810BDC7
:101100000008014010B520210148FFF7D0F810BDBC
:101110000008014010B540210148FFF7C6F810BD96
:101120000008014010B540210148FFF7C0F810BD8C
:101130000008014010B580210148FFF7B6F810BD46
:101140000008014010B580210148FFF7B0F810BD3C
:10115000000801400146042901DB0020704701EB33
:101160004100084A02EB80004078012808D10020A5
:1011700001EB4102034B03EB820250700120EDE7CB
:101180000020EBE76C00002008B501210420FFF7E8
:10119000F3F810208DF80300ADF8000003208DF85F
:1011A000020069461548FEF7F5FF10208DF8030090
:1011B0002020ADF8000003208DF8020069460F489A
:1011C000FEF7E8FF10208DF803004020ADF8000086
:1011D00003208DF8020069460848FEF7DBFF102067
:1011E0008DF803008020ADF8000003208DF8020088
:1011F00069460248FEF7CEFF08BD00000008014026
:1012000010B5FFF7C1FF00F001F810BD00B589B0BF
:1012100001210846FFF790F808A92448FEF7BAFF15
:1012200001210420FFF7A8F80220ADF820001820C3
:101230008DF8230003208DF8220008A91B48FEF733
:10124000A9FF4FF08040FFF77CFA6320ADF818004B
:101250002320ADF814000020ADF81A00ADF81600F8
:101260008DF81C0005A94FF08040FFF7CFFA01A8C8
:10127000FFF7C0FA6020ADF804000020ADF80C00C4
:101280000120ADF806000020ADF80A0001A94FF0DA
:101290008040FFF75DFA01218807FFF71DFA012161
:1012A0008807FFF728FA09B000BD000000080140D8
:1012B000416851B14168491E416031B90121417015
:1012C0000178012901D181684160704770B50446F9
:1012D0000D46042C06DB114A11A118A0FFF7BCFC37
:1012E00000BFFEE70120FFF7D6FC04EB44001B49DA
:1012F00001EB8000456004EB440001EB8000856059
:10130000002004EB4401154A02EB8101487004EB14
:10131000440102F82100FFF7BEFC70BD9A1A0008D4
:101320002E2E5C436F64655C6273705C7372635CE9
:101330006273705F74696D65722E63004572726FBF
:10134000723A2066696C652025732C2066756E6381
:1013500074696F6E20257328290D0A006C00002027
:1013600010B5044621464FF08040FFF74DFA10BDFE
:101370000146002011B9044AD26804E0012902D1D3
:10138000024A126800207047001001400C0C014016
:1013900010B500F061F800F0ADF800F075F900F05C
:1013A00007F9FFF72DFF10BD08B501211020FEF74A
:1013B000E3FF002000F02CF84FF40050ADF80000DF
:1013C00010208DF8030003208DF8020069460248C2
:1013D000FEF7E0FE08BD00000010014008B5012145
:1013E0000820FEF7C9FF012000F012F84FF400704A
:1013F000ADF8000010208DF8030003208DF80200E6
:1014000069460248FEF7C6FE08BD0000000C014018
:1014100020B94FF40051044A516104E0012802D17F
:101420004102024A1160704700100140140C014053
:1014300028B90749096941F40051054A1161012899
:1014400005D10449096841F40071024A11607047EE
:1014500000100140100C014070B5002016E0002182
:1014600000EB40021F4B03EB8202516000EB400295
:1014700003EB8202916000EB400203EB82025170A9
:1014800000EB400203F82210411CC8B20428E6DB3E
:10149000154909684FF47A73B1FBF3F2B2F1807F1A
:1014A00000D31DE022F07F41491E4FF0E023596137
:1014B00059170F23002907DA1C07260E0B4C01F0E1
:1014C0000F052D1F665503E01C07250E084C6554BB
:1014D00000BF00214FF0E02399610721196100BF8F
:1014E00070BD00006C0000202C00002018ED00E012
:1014F00000E400E00A480B4908600B4848600B48CC
:1015000088604FF480608881C8810020088248820A
:10151000C882088348838882C8610862486270472D
:10152000004400409C000020C4000020C4040020AF
:101530000146002021B1012901D1024800E000BF8D
:10154000704700009C0000202DE9F04107460D4641
:101550004FF001083846FFF7EBFF04461CB30120AB
:10156000FFF79CFB668B0020FFF798FBC6B1218B31
:10157000A068405C28700120FFF790FB208B401C86
:1015800080B22083E189884201DB00202083608BC8
:10159000401E60830020FFF781FB4FF0000804E04D
:1015A0004FF0010801E04FF001084046BDE8F0812E
:1015B00000B587B001210820FEF7DEFE01214804B6
:1015C000FEF7BAFE2348FFF7B5F90420ADF818007E
:1015D00003208DF81A0018208DF81B0006A91E485C
:1015E000FEF7D8FD0820ADF8180004208DF81B0088
:1015F00006A91948FEF7CEFD4FF4165002900020C0
:10160000ADF80C00ADF80E00ADF81000ADF8140008
:101610000C20ADF8120002A90E48FFF735FA01229E
:1016200040F225510B48FFF70AFA26208DF80400F6
:1016300000208DF805008DF8060001208DF80700C8
:1016400001A8FEF737FE01210248FFF766F907B04F
:1016500000BD000000440040000801402DE9F041B9
:10166000054600262846FFF763FF04460120FFF7E2
:1016700015FB678B0020FFF711FB0CB107B10126AA
:101680003046BDE8F081000000B585B0012108209A
:10169000FEF772FE01218804FEF74EFE1A48FFF79E
:1016A00049F94FF48060ADF8100003208DF8120066
:1016B00018208DF8130004A91448FEF76BFD4FF4B1
:1016C0000060ADF8100004208DF8130004A90F4845
:1016D000FEF760FD4FF4E13000900020ADF804000B
:1016E000ADF80600ADF80800ADF80C000C20ADF820
:1016F0000A0069460448FFF7C7F901210248FFF7CD
:101700000CF905B000BD000000480040000C01408D
:1017100070B504460D4600BF40210548FFF758F953
:101720000028F9D0E1B20248FFF71FFA204670BD49
:10173000004800404FF4A060FEF7F4FDFFF728FEDC
:1017400000F00AF8FFF72EFB05E0FFF761FCFFF75A
:1017500085FCFFF72BFBF8E710B500F017F900F058
:1017600021F810BD01460E488078002815DD0C4890
:101770000278C01C805C087009480078401CC0B228
:10178000074A1070142801D900201070044880788E
:10179000401E034A9070002070470120FCE70000C3
:1017A000EC08002010B517210148FEF7D6FC10BD4B
:1017B000EC08002001461C2912D004DC08290BD0BB
:1017C00018290FD104E0522904D05A290AD105E082
:1017D000002009E0012007E0022005E0032003E0EB
:1017E000042001E0052000BF00BF704738B52B483A
:1017F000007830B101280DD002281BD003284AD12F
:1018000029E00120FFF72AFF002802DD01202349FB
:10181000087041E069460120FFF796FE48B99DF83F
:10182000000018B902201D49087002E000201B4981
:10183000087031E069460120FFF786FE50B99DF837
:101840000000FF2803D103201449087002E00020A3
:101850001249087020E069460120FFF775FEC8B9FB
:101860009DF80000FFF7A6FF04460D484178C01C14
:101870004454C01E8078401C09498870084640784E
:10188000401CC0B24870142801D3002048700020CA
:101890000249087000E000BF00BF38BD54000020BE
:1018A000EC08002010B50446002C07DDFFF71AFCF9
:1018B000FFF720FCA0B2FFF753FD10E03CB9FFF7A3
:1018C00011FCFFF71FFCA0B2FFF74AFD07E0FFF78E
:1018D00001FCFFF717FC614288B2FFF741FD10BD24
:1018E00010B50446002C07DDFFF71CFCFFF722FCB7
:1018F000A0B2FFF735FD10E03CB9FFF713FCFFF78E
:1019000021FCA0B2FFF72CFD07E0FFF703FCFFF777
:1019100019FC614288B2FFF723FD10BD10B5002409
:101920000020FFF725FD0446204610BD10B5002419
:101930000120FFF71DFD0446204610BD70B5054689
:101940000C46022C01DB00BFFEE704EB8400044AD6
:1019500002EB800114222846FEF7E6FB70BD000072
:10196000C408002010B50020FFF752FD10BD10B5CF
:101970000020FFF75DFD10BD10B50120FFF748FD09
:1019800010BD10B50120FFF753FD10BD10B50020AC
:101990001149087011484860114888601148C860B2
:1019A000114808610120087510490B4881611049F0
:1019B000C1611049016210494162002408E004EB52
:1019C0008401054A02EB810148688047601CC4B26B
:1019D000022CF4DB10BD0000C4080020A91300088D
:1019E0006F190008651900081D190008DD130008AB
:1019F00083190008791900082D19000810B504464C
:101A00002046FFF74FFF604240B2FFF769FF10BD6D
:101A100010B50446604240B2FFF744FF2046FFF78E
:101A20005FFF10BD10B50446604240B2FFF73AFFB9
:101A3000604240B2FFF754FF10BD10B50446204687
:101A4000FFF730FF2046FFF74BFF10BD10B5002019
:101A5000FFF728FF0020FFF743FF10BD10B5044635
:101A60000020FFF71FFF604240B2FFF739FF10BDB3
:101A700010B504462046FFF715FF0020FFF730FFA2
:101A800010BD10B50020FFF765FB10BD10B5044672
:101A900021460020FFF71AFC10BD6273705F53747B
:101AA00061727454696D6572006273705F53746122
:101AB00072744175746F54696D6572006273705F02
:101AC00053746F7054696D6572000000EC1A000861
:101AD0000000002058000000780C0008441B00089B
:101AE00058000020B00C0000880C00080000000026
:101AF0000000000050000000000000000000000096
:101B000000000000000000000000000000000000D5
:101B1000000000000000000000A24A0400000000D5
:101B2000000000000102030406070809000000008D
:101B3000010203040102030406070809020406085F
:041B400000000000A1
:04000005080000ED02
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@ -340,7 +340,7 @@
<MiscControls></MiscControls>
<Define>USE_STDPERIPH_DRIVER</Define>
<Undefine></Undefine>
<IncludePath>..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm;..\Code\app\inc;..\Code\bsp\inc;..\Code\isr;..\Code\middleware\internal\inc;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver\inc;..\Code\library;..\Code\middleware\BlueTooth;..\Code\middleware\BlueTooth\HC-06;..\Code\bsp;..\Code\middleware\Led;..\Code\middleware\DebugLog;..\Code\middleware\Motor</IncludePath>
<IncludePath>..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm;..\Code\app\inc;..\Code\bsp\inc;..\Code\isr;..\Code\middleware\internal\inc;..\Code\library\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver\inc;..\Code\library;..\Code\middleware\BlueTooth;..\Code\middleware\BlueTooth\HC-06;..\Code\bsp;..\Code\middleware\Led;..\Code\middleware\DebugLog;..\Code\middleware\Motor;..\Code\middleware\IrController</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -399,6 +399,11 @@
<FileType>1</FileType>
<FilePath>..\Code\app\src\app_motor.c</FilePath>
</File>
<File>
<FileName>app_ir_controller.c</FileName>
<FileType>1</FileType>
<FilePath>..\Code\app\src\app_ir_controller.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -644,6 +649,13 @@
</Group>
<Group>
<GroupName>MW/IR_CONTROLLER</GroupName>
<Files>
<File>
<FileName>mw_ir_controller.c</FileName>
<FileType>1</FileType>
<FilePath>..\Code\middleware\IrController\mw_ir_controller.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>