You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(50) |
Feb
(137) |
Mar
(84) |
Apr
(36) |
May
(100) |
Jun
(5) |
Jul
|
Aug
(4) |
Sep
(13) |
Oct
(1) |
Nov
(4) |
Dec
(22) |
2011 |
Jan
(4) |
Feb
(9) |
Mar
(113) |
Apr
(76) |
May
(31) |
Jun
(19) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
(4) |
Feb
|
Mar
(2) |
Apr
(6) |
May
(19) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(2) |
Apr
(22) |
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Olivier B. <Ba...@us...> - 2010-02-24 21:26:19
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 0a529d96f005d2befe3919348127e415a4bbd8bc (commit) via 374911310949605868ed9c075f8958a9dcda27db (commit) from dde1617b6333d9005a9bb79542d09fa17e023b3d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 0a529d96f005d2befe3919348127e415a4bbd8bc Merge: 374911310949605868ed9c075f8958a9dcda27db dde1617b6333d9005a9bb79542d09fa17e023b3d Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 22:25:51 2010 +0100 Merge branch 'master' of ssh://krobot.git.sourceforge.net/gitroot/krobot/krobot commit 374911310949605868ed9c075f8958a9dcda27db Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 22:25:09 2010 +0100 Cleanup direction stuff ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 48ba798..876b7ff 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index a79b116..c022818 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -447,7 +447,7 @@ BOOL initLMs(void) { * l'accration ne peut pas e changen court de trajectoire */ void newPosition(char axis, DWORD pos, DWORD vel, DWORD acc) { - DWORD_VAL posData = {pos}; + DWORD_VAL posData; DWORD_VAL velData = {vel}; DWORD_VAL accData = {acc}; @@ -463,8 +463,25 @@ void newPosition(char axis, DWORD pos, DWORD vel, DWORD acc) { writeDataWord(axis, velData.word.HW); writeDataWord(axis, velData.word.LW); - writeDataWord(axis, posData.word.HW); - writeDataWord(axis, posData.word.LW); + + if (axis == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { + posData.Val = CON_MOTOR_RIGHT * pos; + writeDataWord(axis, posData.word.HW); + writeDataWord(axis, posData.word.LW); + } + else { + if (axis == MOTOR_BOTH || axis == MOTOR_LEFT) { + posData.Val = CON_MOTOR_LEFT * pos; + writeDataWord(MOTOR_LEFT, posData.word.HW); + writeDataWord(MOTOR_LEFT, posData.word.LW); + } + + if (axis == MOTOR_BOTH || axis == MOTOR_RIGHT) { + posData.Val = CON_MOTOR_RIGHT * pos; + writeDataWord(MOTOR_RIGHT, posData.word.HW); + writeDataWord(MOTOR_RIGHT, posData.word.LW); + } + } } /** @@ -480,27 +497,46 @@ void newPosition(char axis, DWORD pos, DWORD vel, DWORD acc) { * /!\ uniquement si l'on part d'une position 'arr * l'accration ne peut pas e changen court de trajectoire * - * @param dir sens de rotation, peut valoir : @n - * >= 0 avance @n - * < 0 recule + * @param dir sens de rotation, peut valoir : @n + * 1 avance @n + * -1 recule */ void newVelocity(char axis, DWORD vel, DWORD acc, char dir) { DWORD_VAL velData = {vel}; DWORD_VAL accData = {acc}; - WORD dirArg = 0; + WORD arg = LM_LTRJ_LOAD_VEL | LM_LTRJ_VEL_MODE; writeCommand(axis, LM_CMD_LTRJ); - if (dir >= 0) - dirArg = LM_LTRJ_FORWARD_DIR; + if (accData.Val != NULL) + arg|= LM_LTRJ_LOAD_ACC; + + if (axis == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { + if (dir == CON_MOTOR_RIGHT) + arg|= LM_LTRJ_FORWARD_DIR; + + writeDataWord(axis, arg); + } + else { + if (axis == MOTOR_BOTH || axis == MOTOR_LEFT) { + if (dir == CON_MOTOR_LEFT) + arg|= LM_LTRJ_FORWARD_DIR; + + writeDataWord(MOTOR_LEFT, arg); + } + + if (axis == MOTOR_BOTH || axis == MOTOR_RIGHT) { + if (dir == CON_MOTOR_RIGHT) + arg|= LM_LTRJ_FORWARD_DIR; + + writeDataWord(MOTOR_RIGHT, arg); + } + } if (accData.Val != NULL) { - writeDataWord(axis, LM_LTRJ_LOAD_VEL | LM_LTRJ_LOAD_ACC | LM_LTRJ_VEL_MODE | dirArg); writeDataWord(axis, accData.word.HW); writeDataWord(axis, accData.word.LW); } - else - writeDataWord(axis, LM_LTRJ_LOAD_VEL | LM_LTRJ_VEL_MODE | dirArg); writeDataWord(axis, velData.word.HW); writeDataWord(axis, velData.word.LW); @@ -514,10 +550,10 @@ void newVelocity(char axis, DWORD vel, DWORD acc, char dir) { * #MOTOR_LEFT le moteur de gauche uniquement @n * #MOTOR_BOTH les 2 moteurs * - * @param vel vitesse, sur 16 bits - * @param dir sens de rotation, peut valoir : @n - * >= 0 avance @n - * < 0 recule + * @param vel vitesse, sur 16 bits + * @param dir sens de rotation, peut valoir : @n + * 1 avance @n + * -1 recule */ void changeVelocity(char axis, DWORD vel, char dir) { newVelocity(axis, vel, NULL, dir); @@ -597,16 +633,10 @@ DWORD getRealVelocity(char axis) { */ void moveForward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); - - newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + newPosition(MOTOR_BOTH, + (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); - newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), - (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), - (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); - start(MOTOR_BOTH); } @@ -619,16 +649,10 @@ void moveForward(short pos, short vel, short acc) { */ void moveBackward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); - - newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + newPosition(MOTOR_BOTH, + - (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); - newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), - (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), - (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); - start(MOTOR_BOTH); } @@ -641,16 +665,14 @@ void moveBackward(short pos, short vel, short acc) { */ void turnRight(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); - newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + - (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); - start(MOTOR_BOTH); } @@ -663,16 +685,14 @@ void turnRight(short angle, short vel, short acc) { */ void turnLeft(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); - newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + - (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); - start(MOTOR_BOTH); } @@ -767,11 +787,11 @@ void goTo(short x, short y, short vel, short acc, BYTE mode, short d) { waitTrajComplete(); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) posRight * COEF_RIGHT_WHEEL), + (long) ((float) posRight * COEF_RIGHT_WHEEL), (long) ((float) velRight * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) posLeft * COEF_LEFT_WHEEL), + (long) ((float) posLeft * COEF_LEFT_WHEEL), (long) ((float) velLeft * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index 332fb2e..41d3519 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -1032,27 +1032,10 @@ void ProcessIO(void) { word3.byte.HB = ReceivedDataBuffer.DATA[6]; word3.byte.LB = ReceivedDataBuffer.DATA[7]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { - newPosition(ReceivedDataBuffer.DATA[1], - CON_MOTOR_RIGHT * (long) ((float) word1.Val * COEF_WHEEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); - } - else { - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { - newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) word1.Val * COEF_WHEEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); - } - - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { - newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) word1.Val * COEF_WHEEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); - } - } + newPosition(ReceivedDataBuffer.DATA[1], + (long) ((float) word1.Val * COEF_WHEEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); break; case TRAJ_NEW_VELOCITY: @@ -1061,51 +1044,19 @@ void ProcessIO(void) { word2.byte.HB = ReceivedDataBuffer.DATA[4]; word2.byte.LB = ReceivedDataBuffer.DATA[5]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { - newVelocity(ReceivedDataBuffer.DATA[1], - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); - } - else { - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { - newVelocity(MOTOR_LEFT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), - CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[6]); - } - - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { - newVelocity(MOTOR_RIGHT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); - } - } + newVelocity(ReceivedDataBuffer.DATA[1], + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), + ReceivedDataBuffer.DATA[6]); break; case TRAJ_CHANGE_VELOCITY: word1.byte.HB = ReceivedDataBuffer.DATA[2]; word1.byte.LB = ReceivedDataBuffer.DATA[3]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { - changeVelocity(ReceivedDataBuffer.DATA[1], - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); - } - else { - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { - changeVelocity(MOTOR_LEFT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[4]); - } - - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { - changeVelocity(MOTOR_RIGHT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); - } - } + changeVelocity(ReceivedDataBuffer.DATA[1], + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + ReceivedDataBuffer.DATA[4]); break; case TRAJ_START: diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index ca5c9f5..bf093d3 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index 4d285e1..6480698 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,1588 +1,1469 @@ :020000040000FA -:06000000F7EF33F01200DF +:060000005AEF30F012007F :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000F7EF33F01200D7 -:060808002EEF04F01200C7 -:0608180096EF04F012004F -:06082A00040081680000DB -:100830002601000021000000796800005F0100002F -:10084000080000006B680000470100000E00000077 -:0C085000686800006A010000030000005E -:04085C00DACFE4FF0C -:10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F -:10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD -:10088000FACFE4FF00EE29F0140EE80403E3EECF04 -:10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD7CBEC13F09EA013D0D5EC13F0F4 -:1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E5023A1EC2CF02B -:1008D0009E90DEEC13F002E2E16AE552E16EE55231 -:1008E000E7CFD9FFE55200EE28F0290EE80403E334 -:1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 -:10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D -:10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 -:10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A -:10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FFCBEC13F0DEEC13F002E2B3 -:10095000E16AE552E16EE552E7CFD9FFE552E5CF16 -:10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D884EC1FF060D8FCD776 -:100980000F0EC11202D84EEF1FF0EEEC13F0E6523C -:10099000A2EC13F00101676F070E675D10E1E66AD4 -:1009A00011EC33F0E552DF6E000EDF80E6EC13F061 -:1009B000E66ACAEC33F0E552DF70E6EC13F0D08E55 -:1009C000F28EF28CF30E8C1695160101476B486B74 -:1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E84EC32F0E552C9 -:1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66EF3EC13F0E552838C818882844C -:100A1000808A838E80888294010EE66E05EC34F025 -:100A2000E55282849D80C50EE66E5AEC33F0E552A5 -:100A3000D5EC13F0E552E552E7CFD9FF1200D9CF3C -:100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A5000E7EC12F0200E0101005D03E36D50020B84 -:100A600002E0DDEF12F0010149514A1102E1000EEE -:100A700008D049C1E9FF4AC1EAFFEF50800B01E00D -:100A8000010E000947E101014651EA6A260FE96EAD -:100A9000010EEA22EF5000083DE20501406B010122 -:100AA0004C514C2B0501416F0501040E426F0101B1 -:100AB0004651EA6A260FE96E010EEA22EFCF43F5AE -:100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66E9FEC23F0006E050EE15E005005 -:100AE000F3CF49F1F4CF4AF101014651EA6A260FEA -:100AF000E96E010EEA22EF6A01014651000803E2A5 -:100B00000101460707D001014551000803E2010138 -:100B10001F0E466F010149514A1102E1000E08D033 -:100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E179EC1BF00009C3 -:100B400025E00501406B01014C514C2B0501416F23 -:100B500005010A0E426F0501436B0501010E486F46 -:100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66E9FEC23F0006E050EE15E005064 -:100B8000F3CF49F1F4CF4AF10101526B000E01019C -:100B9000E76E5119E8AE02D0513503D0E750D88046 -:100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EEDEC2DF0BC -:100BC000E5521CEC17F0000904E00101020E516F20 -:100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66E9EEC52 -:100BF00018F0006E060EE15E00500101516B4CD002 -:100C0000010149514A1102E1000E08D049C1E9FF32 -:100C10004AC1EAFFEF50800B01E0010E000939E103 -:100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486BE90E006E1E -:100C4000640E016E026A00C0E6FF01C0E6FF02C04A -:100C5000E6FF480EE66E050EE66ED5EC32F0036E4A -:100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66E9FEC23F0006E4E -:100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66AB5ECB3 -:100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66EB5EC16F0E552E552000902E00101DE -:100CC000516901014751481102E1000E08D047C1A6 -:100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E0DDEF12F005010251070A02E13EEFDA -:100CF00012F00D0A01E148D2010A01E118D20D0AF1 -:100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D10009CEF12F0FF00DDEF12F0E66A11EC33F009 -:100D2000E552DF6E000EDB80DFCFE6FFE66AF1EC16 -:100D300032F0E552E552FF00DDEF12F001014951BA -:100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 -:100D5000EF50800B01E0010E000901E081D100C5D8 -:100D600040F50501416B0501030E426F0501436B20 -:100D7000050108510F0A01E110D1080A01E1BBD0B9 -:100D8000010A01E17ED0020A71E0070A64E0010A6B -:100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486BC50E006E640E016E026AF3 -:100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66ED5EC32F0036E050EE15E0350C3 -:100DD00020D10501486BB90E006E640E016E026AE7 -:100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66ED5EC32F0036E050EE15E035093 -:100E0000B70E006E640E016E026A00C0E6FF01C0FC -:100E1000E6FF02C0E6FF480EE66E050EE66ED5EC74 -:100E200032F0036E050EE15E0350AE0E006E640EEE -:100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66ED5EC32F0036E050E2A -:100E5000E15E0350DED092CF48F593CF49F594CFB1 -:100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA -:100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A47EC2DF0E552010E2DC0DBFF1D -:100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E -:100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E47ECBA -:100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 -:100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 -:100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 -:100EF000DBCF4FF58ED00A0EE66EE66A43EC14F0B7 -:100F0000E552E552E66AA7EC15F0E552030EF3CF81 -:100F1000DBFF040EF4CFDBFFE66AA7EC15F0E55229 -:100F2000DE52F3CFDEFFF4CFDDFFDD52040EDBCF68 -:100F300048F5030EDBCF49F5020EDBCF4AF5010E73 -:100F4000DBCF4BF50A0EE66E010EE66E43EC14F0B5 -:100F5000E552E552010EE66EA7EC15F0E552030EE0 -:100F6000F3CFDBFF040EF4CFDBFF010EE66EA7EC40 -:100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 -:100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A7AEC18F047 -:100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B -:100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 -:100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E7AEC18F0E552010E2DC0CD -:100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 -:100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D -:10100000020EDBCF4EF5010EDBCF4FF50501020ED0 -:10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66E9FEC23F0006E050EE15EAB -:101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66E9FEC23F094 -:10105000006E050EE15E0050F3CF47F1F4CF48F18A -:10106000DDEF12F005010851030A37E0010A25E01F -:10107000030A13E0010A01E040D005010951921270 -:1010800005010A51931205010B51941205010C51EF -:10109000951205010D51961235D00501091D9216C4 -:1010A00005010A1D931605010B1D941605010C1D63 -:1010B000951605010D1D961625D00501091D8916E9 -:1010C00005010A1D8A1605010B1D8B1605010C1D55 -:1010D0008C1605010D1D8D1615D0050109518912BB -:1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66E97EC92 -:1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66E9FEC23F0006E050EE15EBE -:101120000050F3CF47F1F4CF48F1DDEF12F00501A5 -:101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000EDEC2DF0E5520BD009C5E6FFFDEC2DF0DE -:10115000E55205D0010EE66E97EC33F0E552400EF5 -:10116000E66E000EE66E050EE66EE66A010EE66EAF -:101170009FEC23F0006E050EE15E0050F3CF47F1C7 -:10118000F4CF48F1DDEF12F005010851060A02E143 -:10119000FDEF11F0080A02E1C3EF11F0030A02E1CA -:1011A000BAEF11F0070A02E190EF10F0030A02E132 -:1011B00073EF0EF0010A01E1D8D20F0A01E1C0D2AB -:1011C000020A01E174D2010A01E142D2070A01E1F7 -:1011D00010D2010A01E1DED1030A01E1ACD1010A1A -:1011E00001E1A5D10C0A01E126D1030A01E194D065 -:1011F000040A02E025EF12F00501095104E0020E95 -:101200000501095D40E10AC5E6FF010EE66EF1EC5D -:1012100032F0E552E5520BC5E6FF020EE66EF1EC48 -:1012200032F0E552E5520CC5E6FF030EE66EF1EC36 -:1012300032F0E552E5520DC5E6FF040EE66EF1EC24 -:1012400032F0E552E5520EC5E6FF050EE66EF1EC12 -:1012500032F0E552E5520FC5E6FF060EE66EF1EC00 -:1012600032F0E552E55210C5E6FF070EE66EF1ECEE -:1012700032F0E552E55211C5E6FF080EE66EF1ECDC -:1012800032F0E552E5520501090504E0020E0501C0 -:10129000095D40E10AC5E6FF090EE66EF1EC32F0A9 -:1012A000E552E5520BC5E6FF0A0EE66EF1EC32F0B0 -:1012B000E552E5520CC5E6FF0B0EE66EF1EC32F09E -:1012C000E552E5520DC5E6FF0C0EE66EF1EC32F08C -:1012D000E552E5520EC5E6FF0D0EE66EF1EC32F07A -:1012E000E552E5520FC5E6FF0E0EE66EF1EC32F068 -:1012F000E552E55210C5E6FF0F0EE66EF1EC32F056 -:10130000E552E55211C5E6FF100EE66EF1EC32F043 -:10131000E552E5522AEF12F000C540F50501416B98 -:101320000501030E426F0501436B010EE66E11ECE1 -:1013300033F0E5520501486F020EE66E11EC33F012 -:10134000E5520501496F030EE66E11EC33F0E552EC -:1013500005014A6F040EE66E11EC33F0E55205010B -:101360004B6F050EE66E11EC33F0E55205014C6F44 -:10137000060EE66E11EC33F0E55205014D6F070ED7 -:10138000E66E11EC33F0E55205014E6F080EE66E85 -:1013900011EC33F0E55205014F6F090EE66E11ECCA -:1013A00033F0E5520501506F0A0EE66E11EC33F092 -:1013B000E5520501516F0B0EE66E11EC33F0E5526C -:1013C0000501526F0C0EE66E11EC33F0E55205018B -:1013D000536F0D0EE66E11EC33F0E5520501546FBC -:1013E0000E0EE66E11EC33F0E5520501556F0F0E4F -:1013F000E66E11EC33F0E5520501566F100EE66E05 -:1014000011EC33F0E5520501576F400EE66E400EC9 -:10141000E66E050EE66E010EE66E010EE66E9FECC0 -:1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF12AEF12F0030EE66E010EE66EF1ECB1 -:1014400032F0E552E552E80EE66E020EE66EF1EC81 -:1014500032F0E552E552E66A030EE66EF1EC32F048 -:10146000E552E552010EE66E040EE66EF1EC32F046 -:10147000E552E552E66A050EE66EF1EC32F0E55211 -:10148000E552E66A060EE66EF1EC32F0E552E55200 -:10149000270EE66E070EE66EF1EC32F0E552E552ED -:1014A000100EE66E080EE66EF1EC32F0E552E552F3 -:1014B000030EE66E090EE66EF1EC32F0E552E552EF -:1014C000E80EE66E0A0EE66EF1EC32F0E552E552F9 -:1014D000E66A0B0EE66EF1EC32F0E552E552010ED3 -:1014E000E66E0C0EE66EF1EC32F0E552E552E66A7D -:1014F0000D0EE66EF1EC32F0E552E552E66A0E0EA4 -:10150000E66EF1EC32F0E552E552270EE66E0F0E74 -:10151000E66EF1EC32F0E552E552100EE66E100E7A -:10152000E66EF1EC32F0E552E5522AEF12F01CECD7 -:1015300017F02AEF12F0060E09C5DBFF050E0AC5EB -:10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 -:101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 -:101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FF9EECB7 -:1015800018F0006E060EE15E00500101010E526F70 -:101590002AEF12F0060E09C5DBFF050E0AC5DBFFB8 -:1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 -:1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF -:1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FFA8EC18F02A -:1015E000006E060EE15E00500101010E526F2AEFFF -:1015F00012F0060E09C5DBFF050E0AC5DBFF080E5B -:101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC -:10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E -:10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FFB4EC18F0006E62 -:10164000060EE15E00500101010E526F2AEF12F00A -:10165000060E09C5DBFF050E0AC5DBFF080E0BC52C -:10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 -:101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 -:10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FFC0EC18F0006E060E8C -:1016A000E15E00500101010E526F2AEF12F0060EAA -:1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 -:1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC -:1016D000DBFF0C0E0FC5DBFF0B0E10C5DBFF0E0E84 -:1016E00012C5DBFF0D0E13C5DBFF0D0EDBCFE6FFD2 -:1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC -:101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 -:10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FFCCEC18F0006E59 -:101730000B0EE15E00500101010E526F2AEF12F014 -:10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF70EC18F0EA -:10176000E552E552E5522AEF12F0060E0AC5DBFFFC -:10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 -:10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 -:101790000501095D02E0000E01D0010E000E0009F6 -:1017A00001E1D9D0090EDBCF2FF00A0EDBCF30F0EC -:1017B000F4EC24F02EC008F02FC009F030C00AF07D -:1017C00031C00BF0A60E336E280E346E940E356EBB -:1017D0003F0E366E08C02EF009C02FF00AC030F060 -:1017E0000BC031F00EEC26F02EC004F02FC005F037 -:1017F00030C006F031C007F0CC0E336EBC0E346E34 -:101800008C0E356E3B0E366E04C02EF005C02FF0E8 -:1018100006C030F007C031F00EEC26F0AAEC26F03E -:101820002DC000F02EC001F02FC002F030C003F038 -:1018300000C0E6FF01C0E6FF02C0E6FF03C0E6FF0E -:10184000070EDBCF2FF0080EDBCF30F0F4EC24F0E6 -:101850002EC014F02FC015F030C016F031C017F0B4 -:10186000A60E336E280E346E940E356E3F0E366E15 -:1018700014C02EF015C02FF016C030F017C031F094 -:101880000EEC26F02EC010F02FC011F030C012F078 -:1018900031C013F0BD0E336E370E346E860E356ECA -:1018A000410E366E10C02EF011C02FF012C030F075 -:1018B00013C031F00EEC26F0AAEC26F02DC00CF08F -:1018C0002EC00DF02FC00EF030C00FF00CC0E6FFA0 -:1018D0000DC0E6FF0EC0E6FF0FC0E6FF050EDBCF32 -:1018E0002FF0060EDBCF30F0F4EC24F02EC01CF00D -:1018F0002FC01DF030C01EF031C01FF0A60E336E99 -:10190000280E346E940E356E3F0E366E1CC02EF0CF -:101910001DC02FF01EC030F01FC031F00EEC26F0BD -:10192000AAEC26F02DC018F02EC019F02FC01AF026 -:1019300030C01BF018C0E6FF19C0E6FF1AC0E6FF72 -:101940001BC0E6FF09C5E6FF9FEC17F0206E0D0EE9 -:10195000E15E2050C7D1020E0501095D04E00501DA -:10196000090501E0E0D0090EDBCF2FF00A0EDBCF36 -:1019700030F0F4EC24F02EC008F02FC009F030C095 -:101980000AF031C00BF0A60E336E280E346E940EA2 -:10199000356E3F0E366E08C02EF009C02FF00AC01B -:1019A00030F00BC031F00EEC26F02EC004F02FC04A -:1019B00005F030C006F031C007F0CC0E336EBC0E1F -:1019C000346E8C0E356E3B0E366E04C02EF005C0A4 -:1019D0002FF006C030F007C031F00EEC26F0AAEC74 -:1019E00026F02DC000F02EC001F02FC002F030C054 -:1019F00003F000C0E6FF01C0E6FF02C0E6FF03C03F -:101A0000E6FF070EDBCF2FF0080EDBCF30F0F4EC53 -:101A100024F02EC014F02FC015F030C016F031C0E5 -:101A200017F0A60E336E280E346E940E356E3F0EF0 -:101A3000366E14C02EF015C02FF016C030F017C04F -:101A400031F00EEC26F02EC010F02FC011F030C097 -:101A500012F031C013F0BD0E336E370E346E860EA9 -:101A6000356E410E366E10C02EF011C02FF012C030 -:101A700030F013C031F00EEC26F0AAEC26F02DC0A9 -:101A80000CF02EC00DF02FC00EF030C00FF00CC0C7 -:101A9000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E35 -:101AA000DBCF2FF0060EDBCF30F0F4EC24F02EC0AD -:101AB0001CF02FC01DF030C01EF031C01FF0A60E6C -:101AC000336E280E346E940E356E3F0E366E1CC08B -:101AD0002EF01DC02FF01EC030F01FC031F00EECF4 -:101AE00026F0AAEC26F02DC018F02EC019F02FC059 -:101AF0001AF030C01BF0000E186C191E19221A1EA5 -:101B00001A221B1E1B2218C0E6FF19C0E6FF1AC0CE -:101B1000E6FF1BC0E6FF010EE66E9FEC17F0206E9D -:101B20000D0EE15E2050020E0501095D04E0050185 -:101B3000095101E0D7D0090EDBCF2FF00A0EDBCF21 -:101B400030F0F4EC24F02EC008F02FC009F030C0C3 -:101B50000AF031C00BF0A60E336E280E346E940ED0 -:101B6000356E3F0E366E08C02EF009C02FF00AC049 -:101B700030F00BC031F00EEC26F02EC004F02FC078 -:101B800005F030C006F031C007F0CC0E336EBC0E4D -:101B9000346E8C0E356E3B0E366E04C02EF005C0D2 -:101BA0002FF006C030F007C031F00EEC26F0AAECA2 -:101BB00026F02DC000F02EC001F02FC002F030C082 -:101BC00003F000C0E6FF01C0E6FF02C0E6FF03C06D -:101BD000E6FF070EDBCF2FF0080EDBCF30F0F4EC82 -:101BE00024F02EC014F02FC015F030C016F031C014 -:101BF00017F0A60E336E280E346E940E356E3F0E1F -:101C0000366E14C02EF015C02FF016C030F017C07D -:101C100031F00EEC26F02EC010F02FC011F030C0C5 -:101C200012F031C013F0BD0E336E370E346E860ED7 -:101C3000356E410E366E10C02EF011C02FF012C05E -:101C400030F013C031F00EEC26F0AAEC26F02DC0D7 -:101C50000CF02EC00DF02FC00EF030C00FF00CC0F5 -:101C6000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E63 -:101C7000DBCF2FF0060EDBCF30F0F4EC24F02EC0DB -:101C80001CF02FC01DF030C01EF031C01FF0A60E9A -:101C9000336E280E346E940E356E3F0E366E1CC0B9 -:101CA0002EF01DC02FF01EC030F01FC031F00EEC22 -:101CB00026F0AAEC26F02DC018F02EC019F02FC087 -:101CC0001AF030C01BF018C0E6FF19C0E6FF1AC0BA -:101CD000E6FF1BC0E6FFE66A9FEC17F0206E0D0ED4 -:101CE000E15E2050B7D3060E0AC5DBFF050E0BC51B -:101CF000DBFF080E0CC5DBFF070E0DC5DBFF020E78 -:101D00000501095D02E0000E01D0010E000E000980 -:101D100001E1A7D00EC5E6FF070EDBCF2FF0080EBE -:101D2000DBCF30F0F4EC24F02EC008F02FC009F027 -:101D300030C00AF031C00BF0A60E336E280E346EA0 -:101D4000940E356E3F0E366E08C02EF009C02FF08F -:101D50000AC030F00BC031F00EEC26F02EC004F0BB -:101D60002FC005F030C006F031C007F0CC0E336E46 -:101D7000BC0E346E8C0E356E3B0E366E04C02EF0EB -:101D800005C02FF006C030F007C031F00EEC26F091 -:101D9000AAEC26F02DC000F02EC001F02FC002F0FA -:101DA00030C003F000C0E6FF01C0E6FF02C0E6FF5E -:101DB00003C0E6FF050EDBCF2FF0060EDBCF30F0C1 -:101DC000F4EC24F02EC014F02FC015F030C016F043 -:101DD00031C017F0A60E336E280E346E940E356E99 -:101DE0003F0E366E14C02EF015C02FF016C030F026 -:101DF00017C031F00EEC26F02EC010F02FC011F0FD -:101E000030C012F031C013F0BD0E336E370E346E99 -:101E1000860E356E410E366E10C02EF011C02FF0BA -:101E200012C030F013C031F00EEC26F0AAEC26F010 -:101E30002DC00CF02EC00DF02FC00EF030C00FF0F2 -:101E40000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FFC8 -:101E500009C5E6FFE1EC17F0186E0A0EE15E1850B6 -:101E60005ED1020E0501095D04E00501090501E0EE -:101E7000A9D0FF0E05010E03F350E66E070EDBCF6F -:101E80002FF0080EDBCF30F0F4EC24F02EC008F079 -:101E90002FC009F030C00AF031C00BF0A60E336E2F -:101EA000280E346E940E356E3F0E366E08C02EF03E -:101EB00009C02FF00AC030F00BC031F00EEC26F054 -:101EC0002EC004F02FC005F030C006F031C007F07E -:101ED000CC0E336EBC0E346E8C0E356E3B0E366EF1 -:101EE00004C02EF005C02FF006C030F007C031F05E -:101EF0000EEC26F0AAEC26F02DC000F02EC001F06A -:101F00002FC002F030C003F000C0E6FF01C0E6FFC2 -:101F100002C0E6FF03C0E6FF050EDBCF2FF0060E82 -:101F2000DBCF30F0F4EC24F02EC014F02FC015F00D -:101F300030C016F031C017F0A60E336E280E346E86 -:101F4000940E356E3F0E366E14C02EF015C02FF075 -:101F500016C030F017C031F00EEC26F02EC010F095 -:101F60002FC011F030C012F031C013F0BD0E336E2F -:101F7000370E346E860E356E410E366E10C02EF062 -:101F800011C02FF012C030F013C031F00EEC26F06B -:101F9000AAEC26F02DC00CF02EC00DF02FC00EF0D4 -:101FA00030C00FF00CC0E6FF0DC0E6FF0EC0E6FF2C -:101FB0000FC0E6FF010EE66EE1EC17F0186E0A0E98 -:101FC000E15E1850020E0501095D04E005010951AA -:101FD00001E0A5D00EC5E6FF070EDBCF2FF0080EFF -:101FE000DBCF30F0F4EC24F02EC008F02FC009F065 -:101FF00030C00AF031C00BF0A60E336E280E346EDE -:10200000940E356E3F0E366E08C02EF009C02FF0CC -:102010000AC030F00BC031F00EEC26F02EC004F0F8 -:102020002FC005F030C006F031C007F0CC0E336E83 -:10203000BC0E346E8C0E356E3B0E366E04C02EF028 -:1020400005C02FF006C030F007C031F00EEC26F0CE -:10205000AAEC26F02DC000F02EC001F02FC002F037 -:1020600030C003F000C0E6FF01C0E6FF02C0E6FF9B -:1020700003C0E6FF050EDBCF2FF0060EDBCF30F0FE -:10208000F4EC24F02EC014F02FC015F030C016F080 -:1020900031C017F0A60E336E280E346E940E356ED6 -:1020A0003F0E366E14C02EF015C02FF016C030F063 -:1020B00017C031F00EEC26F02EC010F02FC011F03A -:1020C00030C012F031C013F0BD0E336E370E346ED7 -:1020D000860E356E410E366E10C02EF011C02FF0F8 -:1020E00012C030F013C031F00EEC26F0AAEC26F04E -:1020F0002DC00CF02EC00DF02FC00EF030C00FF030 -:102100000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FF05 -:10211000E66AE1EC17F0186E0A0EE15E18509AD1EB -:10212000060E0AC5DBFF050E0BC5DBFF020E05011F -:10213000095D02E0000E01D0010E000E000959E019 -:102140000CC5E6FF050EDBCF2FF0060EDBCF30F01F -:10215000F4EC24F02EC008F02FC009F030C00AF0D3 -:1021600031C00BF0A60E336E280E346E940E356E11 -:102170003F0E366E08C02EF009C02FF00AC030F0B6 -:102180000BC031F00EEC26F02EC004F02FC005F08D -:1021900030C006F031C007F0BD0E336E370E346E1E -:1021A000860E356E410E366E04C02EF005C02FF03F -:1021B00006C030F007C031F00EEC26F0AAEC26F095 -:1021C0002DC000F02EC001F02FC002F030C003F08F -:1021D00000C0E6FF01C0E6FF02C0E6FF03C0E6FF65 -:1021E00009C5E6FF25EC18F00C6E060EE15E0C50FA -:1021F000C0D0020E0501095D03E0050109055BE1A0 -:10220000FF0E05010C03F350E66E050EDBCF2FF039 -:10221000060EDBCF30F0F4EC24F02EC008F02FC017 -:1022200009F030C00AF031C00BF0A60E336E280E54 -:10223000346E940E356E3F0E366E08C02EF009C017 -:102240002FF00AC030F00BC031F00EEC26F02EC09B -:1022500004F02FC005F030C006F031C007F0BD0E0D -:10226000336E370E346E860E356E410E366E04C0F8 -:102270002EF005C02FF006C030F007C031F00EEC94 -:1022800026F0AAEC26F02DC000F02EC001F02FC0E1 -:1022900002F030C003F000C0E6FF01C0E6FF02C05C -:1022A000E6FF03C0E6FF010EE66E25EC18F00C6EAB -:1022B000060EE15E0C50020E0501095D03E005010A -:1022C000095157E10CC5E6FF050EDBCF2FF0060ED6 -:1022D000DBCF30F0F4EC24F02EC008F02FC009F072 -:1022E00030C00AF031C00BF0A60E336E280E346EEB -:1022F000940E356E3F0E366E08C02EF009C02FF0DA -:102300000AC030F00BC031F00EEC26F02EC004F005 -:102310002FC005F030C006F031C007F0BD0E336E9F -:10232000370E346E860E356E410E366E04C02EF0BA -:1023300005C02FF006C030F007C031F00EEC26F0DB -:10234000AAEC26F02DC000F02EC001F02FC002F044 -:1023500030C003F000C0E6FF01C0E6FF02C0E6FFA8 -:1023600003C0E6FFE66A25EC18F00C6E060EE15E8F -:102370000C5070D009C5E6FF3DEC18F0E5520101A4 -:10238000010E526F67D04CEC1BF0050EF3CFDBFF54 -:10239000060EF4CFDBFF62EC1BF0070EF3CFDBFF82 -:1023A000080EF4CFDBFF00C540F50501416B0501C8 -:1023B000030E426F0501436B060EDBCF48F5050E99 -:1023C000DBCF49F5080EDBCF4AF5070EDBCF4BF527 -:1023D000400EE66E400EE66E050EE66E010EE66EEF -:1023E000010EE66E9FEC23F0006E050EE15E0050DC -:1023F000F3CF49F1F4CF4AF12DD000C540F50501E6 -:10240000416B0501030E426F0501436B79EC1BF034 -:10241000000904E00501010E486F02D00501486B78 -:10242000400EE66E400EE66E050EE66E010EE66E9E -:10243000010EE66E9FEC23F0006E050EE15E00508B -:10244000F3CF49F1F4CF4AF105D0010EE66E97ECD7 -:1024500033F0E552400EE66E000EE66E050EE66EB7 -:10246000E66A010EE66E9FEC23F0006E050EE15E5B -:102470000050F3CF47F1F4CF48F19FD0010149510B -:102480004A1102E1000E08D049C1E9FF4AC1EAFF42 -:10249000EF50800B01E0010E00094DE10101010E3A -:1024A000516F0501406B01014C514C2B0501416FEF -:1024B0000501050E426F0501436B0501486B9A0E3D -:1024C000006E640E016E026A00C0E6FF01C0E6FF06 -:1024D00002C0E6FF480EE66E050EE66ED5EC32F061 -:1024E000036E050EE15E0350400EE66E400EE66E92 -:1024F000050EE66E010EE66E010EE66E9FEC23F011 -:10250000006E050EE15E0050F3CF49F1F4CF4AF1C1 -:10251000400EE66E000EE66E050EE66EE66A010EF1 -:10252000E66E9FEC23F0006E050EE15E0050F3CFE7 -:1025300047F1F4CF48F141D0010149514A1102E17C -:10254000000E08D049C1E9FF4AC1EAFFEF50800BF5 -:1025500001E0010E000931E100C540F50501416BC4 -:102560000501030E426F0501010E436F400EE66E3A -:10257000400EE66E050EE66E010EE66E010EE66E8C -:102580009FEC23F0006E050EE15E0050F3CF49F1A1 -:10259000F4CF4AF1400EE66E000EE66E050EE66ED2 -:1025A000E66A010EE66E9FEC23F0006E050EE15E1A -:1025B0000050F3CF47F1F4CF48F10F0EE15C02E297 -:1025C000E16AE552E16EE552E7CFD9FF1200010161 -:1025D0005351541104E1100E536F270E546F5307DB -:1025E000000E545B6DA207D0535154112EE18C7430 -:1025F0008CB413D027D00101005102E18C9422D079 -:10260000000502E18C8409D0020E005D02E18C8499 -:1026100019D0040E005D03E18C948C861200100E1C -:10262000005D06E10101535154110FE18C740AD091 -:10263000200E005D0AE101015351541106E18C7432 -:102640008CA402D08C9612008C861200120012000C -:10265000120012003EEF31F012001E0EE66E010E67 -:10266000E66E6DEC23F0E552E552400EE66E000E8C -:10267000E66E050EE66EE66A010EE66E9FEC23F04E -:10268000006E050EE15E0050F3CF47F1F4CF48F144 -:1026900012006D840101080E686F070E696F6807EC -:1026A000000E695B68516911FAE16D941200D9CF8F -:1026B000E6FFE1CFD9FFFD0EDBCF2FF0FE0EDBCF23 -:1026C00030F0010E2F1801E1305033E0E8682F1888 -:1026D00002E1E86830182BE0030E2F1801E13050BA -:1026E00024E0040E2F1801E130501DE0020E2F18D7 -:1026F00001E1305016E0170E2F1801E130500FE0C5 -:10270000160E2F1801E1305008E0150E2F1801E1C8 -:10271000305001E010D0A1DF0FD09EDF0DD09ADF46 -:102720000BD096DF09D092DF07D091DF05D091DF83 -:1027300003D0000001D000D0010E00D0E552E7CF59 -:10274000D9FF12004BD8E652D0B202D0010E15D0FC -:10275000D0B802D0020E11D0D0B002D0030E0DD0EE -:10276000D0B602D0040E09D0FCAE02D0050E05D0C2 -:10277000FCAC02D0060E01D0070EDF6ED088D086EA -:10278000D084D082D080FC9EFC9CDF50E552E55284 -:10279000E7CFD9FF1200E65221D8020EE126F3500E -:1027A000DF6E010EF4CFDBFF1200C00EE66EE00E0E -:1027B000E66E7BEC33F0E552E5521200DF50F36E2B -:1027C000010EDB50F46E020EE15C1200DFCFE6FF7B -:1027D000E66AF1EC32F0E552E5521200D9CFE6FF9D -:0627E000E1CFD9FF120059 -:0A27E60082EC1CF0FE0EDB5006E151 -:1027F000F80E96163C0E9416959808D0FE0EDB0443 -:1028000005E1070E9612C30E9412958887EF1CF00F -:10281000D9CFE6FFE1CFD9FFE652010EE66EE3DF46 -:10282000E552809AFE0EDB5004E0FE0EDB500208FB -:102830000FE1839C81880000839E0000000000005F -:102840008450010BDF6E838E00000000DF04F4E093 -:10285000FE0EDB0404E0FE0EDB5002080FE1838C69 -:1028600081980000839E0000000000008450010B4E -:10287000DF6E838E00000000DF04F4E0E552E552D5 -:10288000E7CFD9FF1200D9CFE6FFE1CFD9FFE6525B -:10289000FD0EDB50DF6EFE0EDBCFE6FFB9DFE5524B -:1028A000E66AA1DFE552FE0EDB5003E1839C8188DE -:1028B0000CD0FE0EDB0403E1838C819806D0FE0E63 -:1028C000DB50020802E1839C8198809A0000809886 -:1028D000D9CFE9FFDACFEAFFEF50010B02E08480A5 -:1028E00001D08490D9CFE9FFDACFEAFFEF50020B95 -:1028F00002E0848201D08492D9CFE9FFDACFEAFFE7 -:10290000EF50040B02E0848401D08494D9CFE9FF16 -:10291000DACFEAFFEF50080B02E0838801D08398FA -:10292000D9CFE9FFDACFEAFFEF50100B02E0828245 -:1029300001D08292D9CFE9FFDACFEAFFEF50200B26 -:1029400002E0828E01D0829ED9CFE9FFDACFEAFF82 -:10295000EF50400B02E0828001D08290D9CFE9FF96 -:10296000DACFEAFFEF50800B02E0828C01D0829C2C -:1029700000000000808800000000E552E552E7CF2B -:10298000D9FF1200D9CFE6FFE1CFD9FF020EE12631 -:10299000FC0EDBCFDEFFDBCFDDFFFE0EDBCFE6FF85 -:1029A00037DFE552E66A1FDFE552FE0EDB5003E13A -:1029B000839C81880CD0FE0EDB0403E1838C81981C -:1029C00006D0FE0EDB50020802E1839C8198808ACB -:1029D00000008098D9CFE9FFDACFEAFFEE52EF503E -:1029E000010B02E0848001D08490D9CFE9FFDACFD7 -:1029F000EAFFEE52EF50020B02E0848201D0849293 -:102A0000D9CFE9FFDACFEAFFEE52EF50040B02E034 -:102A1000848401D08494D9CFE9FFDACFEAFFEE5263 -:102A2000EF50080B02E0838801D08398D9CFE9FFEB -:102A3000DACFEAFFEE52EF50100B02E0828201D0B3 -:102A40008292D9CFE9FFDACFEAFFEE52EF50200BA6 -:102A500002E0828E01D0829ED9CFE9FFDACFEAFF71 -:102A6000EE52EF50400B02E0828001D08290D9CF2D -:102A7000E9FFDACFEAFFEE52EF50800B02E0828CE2 -:102A800001D0829C00000000808800000000809837 -:102A9000D9CFE9FFDACFEAFFEF50010B02E08480E3 -:102AA00001D08490D9CFE9FFDACFEAFFEF50020BD3 -:102AB00002E0848201D08492D9CFE9FFDACFEAFF25 -:102AC000EF50040B02E0848401D08494D9CFE9FF55 -:102AD000DACFEAFFEF50080B02E0838801D0839839 -:102AE000D9CFE9FFDACFEAFFEF50100B02E0828284 -:102AF00001D08292D9CFE9FFDACFEAFFEF50200B65 -:102B000002E0828E01D0829ED9CFE9FFDACFEAFFC0 -:102B1000EF50400B02E0828001D08290D9CFE9FFD4 -:102B2000DACFEAFFEF50800B02E0828C01D0829C6A -:102B300000000000808800000000020EE15C02E25C -:102B4000E16AE552E16EE552E7CFD9FF1200D9CF35 -:102B5000E6FFE1CFD9FF020EE126FE0EDBCFE6FF56 -:102B600057DEE552010EE66E3EDEE552FE0EDB500C -:102B700003E1839C818805D0FE0EDB0402E1838C97 -:102B80008198808A0000839E00000000000084502D -:102B9000010B066E8450020B01E0010EE824056E65 -:102BA0008450040B01E0010E040DF3CF04F08350B8 -:102BB000100B01E0010E080DF3CF03F08250020B61 -:102BC00001E0010E100DF3CF02F08250800B01E006 -:102BD000010E200DF3CF01F08250010B400DF3CF19 -:102BE00000F08250400B01E0010E800DF350001008 -:102BF000011002100310041005100610E76E010EFC -:102C0000E7CFDBFF838E00000000839E0000000002 -:102C100000008450010B066E8450020B01E0010E8F -:102C2000E824056E8450040B01E0010E040DF3CF7F -:102C300004F08350100B01E0010E080DF3CF03F0F8 -:102C40008250020B01E0010E100DF3CF02F0825012 -:102C5000800B01E0010E200DF3CF01F08250010B3B -:102C6000400DF3CF00F08250400B01E0010E800DCB -:102C7000F35000100110021003100410051006108C -:102C8000DF6E838EDECF00F0DDCF01F000C0F3FFFA -:102C900001C0F4FF00D0020EE15C02E2E16AE552FD -:102CA000E16EE552E7CFD9FF1200D9CFE6FFE1CFC1 -:102CB000D9FFE652DF6AFE0EDBCFE6FFA9DDE55263 -:102CC000010EE66E90DDE552FE0EDB5003E1839CC3 -:102CD000818805D0FE0EDB0402E1838C8198809A06 -:102CE0000000839E0000000000008450010B066E6F -:102CF0008450020B01E0010EE824056E8450040BA1 -:102D000001E0010E040DF3CF04F08350100B01E03D -:102D1000010E080DF3CF03F08250020B01E0010E0B -:102D2000100DF3CF02F08250800B01E0010E200D58 -:102D3000F3CF01F08250010B400DF3CF00F0825031 -:102D4000400B01E0010E800DF35000100110021045 -:102D50000310041005100610DF6E838EDF5000D0C4 -:102D6000E552E552E7CFD9FF120082EC1CF0E652A3 -:102D7000DF6AE8EC1CF0DF6EFD0EDB50DF14DF6E67 -:102D8000DF5002E0010E01D0000EE55287EF1CF08B -:102D900082EC1CF01D0E4DEC1CF0000E6EEC1EF0D3 -:102DA00087EF1CF082EC1CF0E8EC1CF084080FE0CC -:102DB000E8EC1CF0C4080BE0E66A77EC1EF032EC9D -:102DC0001EF0020EE66ECAEC33F0E552EDD71C0E93 -:102DD0004DEC1CF00A0E6EEC1EF03BEC1DF0E8EC26 -:102DE0001CF0800804E0E8EC1CF0C008E5E1E8EC29 -:102DF0001CF0C00802E13BEC1DF01E0E4DEC1CF077 -:102E00000F0E6EEC1EF018EC1FF0FA0EDBCFE6FF93 -:102E1000FB0EDFEC1DF0F80EDBCFE6FFF90EDFEC6A -:102E20001DF0F60EDBCFE6FFF70EDFEC1DF0040E13 -:102E30004DEC1CF087EF1CF082EC1CF0080EE12634 -:102E4000010E7FEC1CF0010EE7CFDBFF020E93ECCE -:102E50001EF0DF6E030E7FEC1CF0030EE7CFDBFFEE -:102E6000040E7FEC1CF0020EE7CFDBFF050E7FECBB -:102E70001CF0050EE7CFDBFF060E7FEC1CF0040E06 -:102E8000E7CFDBFF070E7FEC1CF0070EE7CFDBFF81 -:102E9000080E7FEC1CF0B4EC1CF0E66A40EC1DF070 -:102EA000090E7FEC1CF0010EE7CFDBFF0A0E93EC5E -:102EB0001EF0DF6E0B0E7FEC1CF0030EE7CFDBFF86 -:102EC0000C0E7FEC1CF0020EE7CFDBFF0D0E7FEC4B -:102ED0001CF0050EE7CFDBFF0E0E7FEC1CF0040E9E -:102EE000E7CFDBFF0F0E7FEC1CF0070EE7CFDBFF19 -:102EF000100E7FEC1CF0B4EC1CF0010EE66E40EC02 -:102F00001DF0020EE66E33EC1DF0020EE66EE66A70 -:102F100026EC1DF007E1020EE66E010EE66E26ECD1 -:102F20001DF002E0000E01D0010E006E080EE15C03 -:102F300002E2E16AE552E16E005087EF1CF082EC9C -:102F40001CF00C0E8BEC1CF0D950F20F72EC1EF042 -:102F5000080EEECFDBFF090EEECFDBFF0A0EEECF41 -:102F6000DBFF0B0EEECFDBFF1F0E4DEC1CF02CEC4D -:102F70001DF00A0EDBCF02F00B0E47EC1DF010E047 -:102F80002B0E6EEC1EF00A0EDBCFE6FF0B0EDFEC15 -:102F90001DF0080EDBCFE6FF090EDBCFE6FF03D006 -:102FA0000B0EE66EE66AE7EC1EF0DFEC1DF0F2ECCD -:102FB0001EF00C0EE15C02E2E16AE552E16E87EF81 -:102FC0001CF082EC1CF00A0E8BEC1CF0080EDB6A85 -:102FD000090EDB6A1F0E4DEC1CF0F50EDBCF00F086 -:102FE000003407E2080EDB6A100EF36E090EF3CF11 -:102FF000DBFF040EDBCF00F0050EDBCF01F0060E89 -:10300000DBCF02F0070E47EC1DF00DE02CEC1DF0BD -:10301000280E0012080E011255EC1DF0E7EC1EF010 -:10302000DBCFE6FF07D02CEC1DF0080E00120112DA -:1030300055EC1DF0F5DBF2EC1EF00A0EE15C02E24D -:10304000E16AE552E16E87EF1CF082EC1CF0F90EAC -:10305000DBCFE6FFE66AE66AE66AE66AD950FA0F6F -:1030600072EC1EF0F9EC1EF077EC1EF0AADF006E99 -:103070000A0EE15E005087EF1CF082EC1CF0FE0EA1 -:10308000DB5004E0FE0EDB5002080FE11EEC1FF0E7 -:1030900082EC1EF0F3CF61F1F4CF62F1E66A82ECCC -:1030A0001EF0F3CF5FF1F4CF60F1FE0EDB0404E01D -:1030B000FE0EDB50020810E17BEC1EF082EC1EF0ED -:1030C000F3CF65F1F4CF66F1010EE66E82EC1EF0EF -:1030D000F3CF63F1F4CF64F1010EDFDB87EF1CF077 -:1030E00082EC1CF01F0ED9DB18EC1FF0010ED5DBB3 -:1030F00087EF1CF098EC1EF0FE0EDB50020805E195 -:103100002D6A2E6A2F6A306A12D00B0EC6DB77EC5E -:103110001EF0F5EC1CF0DE6ADD6ADECF2DF0DECFAE -:103120002EF0DECF2FF0DDCF30F0DD52DD52040E79 -:10313000E15C02E2E16AE552E16EE9D337EC1EF0B0 -:10314000EDEC1CF03CEC1EF097DBCDEC1CF0DFD37B -:1031500037EC1EF091DBE66AF2DE3CEC1EF0A9ECE7 -:103160001EF0CDEC1CF0D3D324EC1FF085DBE66A17 -:10317000E6DE36EC1DF078EC1DF07EDB08EF1EF08D -:1031800024EC1FF0EDEC1CF036EC1DF078EC1DF09B -:10319000A9EC1EF008EF1EF0B5DB3C0EE126D1ECE9 -:1031A0001DF0B6EC1EF0D1EC1DF002EC1FF0ADEC02 -:1031B0001EF008C02EF009C02FF00AC030F00BC07E -:1031C00031F00EEC26F0D5EC1EF020EC1EF0BFEC3A -:1031D0001EF0DEEC1EF020EC1EF003EC1DF0ADEC5A -:1031E0001EF014C02EF015C02FF016C030F017C01E -:1031F00031F00EEC26F000EC1EF0CCEC1EF025ECCD -:1032000025F0A0EC1EF0336A346A800E356E9CEC1B -:103210001EF0380E2EC0DBFF390E2FC0DBFF3A0E3A -:1032200030C0DBFF3B0E31C0DBFFD1EC1DF0A0EC6A -:103230001EF0D7DB20EC1EF041DBD3DB6DEC2EF073 -:10324000086E080EE15E0850080E2DC0DBFF090E67 -:103250002EC0DBFF0A0E2FC0DBFF0B0E30C0DBFFE2 -:10326000CCDBF60EDB5007E0D950F40F72EC1EF009 -:10327000EE50ED103DE170DB080EDBCF0EF0090ED5 -:10328000DBCF0FF00A0EDBCF10F00B0E5CDA6CDF39 -:103290005AEC1DF03BDA13EC1EF02E6A2F6A800EFA -:1032A000306E400E316E380EDBCF33F0390EDBCF8F -:1032B00034F03A0EDBCF35F03B0E14EC1FF040EC4F -:1032C0001EF08FDB2BEC1EF02DC002F02EC003F0A1 -:1032D0002FC004F030C005F02DC02EF08CEC1EF095 -:1032E00025EC1EF02BDF0A6E060EE15E0A50CDD1F2 -:1032F000380EDBCF04F0390EDBCF05F03A0EDBCF12 -:1033000006F03B0EDBCF07F00C6A0D6A0E6A400E2A -:103310000F6E8DDA0EEC26F09DEC1DF0F40EDBCF77 -:103320002FF0F50E70DB83DBFDEC1DF025EC25F0B6 -:10333000140E2EC0DBFF150E2FC0DBFF160E30C0A3 -:10334000DBFF170E2ADAD1EC1DF0FDEC1DF00EECC0 -:1033500026F0180E2EC0DBFF190E2FC0DBFF1A0E51 -:1033600030C0DBFF1B0E19DA20EC1EF0BFEC1EF0A4 -:10337000FDEC1DF00EEC26F01C0E2EC0DBFF1D0E2A -:103380002FC0DBFF1E0E30C0DBFF1F0E31C0DBFF86 -:103390001C0EDBCF00F01D0EDBCF01F01E0EDBCFCD -:1033A00002F01F0EDBCF03F079DBF4EC1DF00EEC26 -:1033B00026F0200E2EC0DBFF210E2FC0DBFF220ED9 -:1033C00030C0DBFF230E31C0DBFFD950180FE96E90 -:1033D000DACFEAFF240EEECFDBFF250EEECFDBFFC8 -:1033E000260EEECFDBFF270EEECFDBFFFD0EDBCF91 -:1033F0002FF0FE0E42EC1FF0200EDBCF33F0210E3B -:10340000DBCF34F0220EDBCF35F0230E03EC1EF0C1 -:10341000280E2EC0DBFF290E2FC0DBFF2A0E30C086 -:10342000DBFF2B0E31C0DBFF20EC1EF042EC1FF067 -:10343000240EDBCF33F0250EDBCF34F0260EDBCFAE -:1034400035F0270EE0DB2C0E2EC0DBFF2D0E2FC03B -:10345000DBFF2E0E30C0DBFF2F0E31C0DBFF2C0E4A -:10346000DBCF04F02D0EDBCF05F02E0EDBCF06F008 -:103470002F0EDBCF07F012DBCCEC1EF00EEC26F0AB -:1034800097DA300E2EC0DBFF310E2FC0DBFF320E7D -:1034900030C0DBFF330E31C0DBFF280EDBCF2EF058 -:1034A000290EDBCF2FF02A0EDBCF30F02B0EDBCF37 -:1034B00031F07EDA340E2EC0DBFF350E2FC0DBFF7D -:1034C000360E30C0DBFF370E31C0DBFFD950300F76 -:1034D00063DBD950340F60DB6DEC2EF0006E080E0C -:1034E000E15E00500C0E2DC0DBFF0D0E2EC0DBFF89 -:1034F0000E0E2FC0DBFF0F0E30C0DBFF006A016A2B -:10350000026A400E036ED1DA02C0E6FFE66E35DBDA -:10351000B6EC1EF066DA28EC1FF02DC014F02EC0B9 -:1035200015F02FC016F030C017F0A9EC1EF06DECAE -:103530002EF0186E080EE15E1850E552E7CF03F04A -:10354000E552E7CF02F0E552E7CF01F0E552E7CFD1 -:1035500000F02DC004F02EC005F02FC006F030C0E2 -:1035600007F097DB41DB0EEC26F0100E2EC0DBFFE0 -:10357000110E2FC0DBFF120E30C0DBFF130E31C067 -:10358000DBFFF60EDB5002081BE11DDB24EC25F00F -:1035900089DB25EC25F085D940DA060E2FC0DBFF4C -:1035A000070E30C0DBFF000EDFCF2FF0010E86D9F3 -:1035B00080DBC3DAFCDA040E2FC0DBFF050E4ED031 -:1035C0002E6A2F6A306A400E316E080EDBCF33F060 -:1035D000090EDBCF34F00A0EDBCF35F00B0E14EC06 -:1035E0001FF0AEDB0C0EDBCF04F00D0EDBCF05F0D1 -:1035F0000E0EDBCF06F00F0EDBCF07F004C033F06A -:1036000005C034F006C035F007C036F024EC25F0D4 -:103610000C0E2EC0DBFF0D0E2FC0DBFF0E0E30C0D8 -:10362000DBFF0F0E31C0DBFFCEDA25EC25F03ADBF5 -:1036300024EC25F036D9F1D9040E2FC0DBFF050E9E -:1036400030C0DBFF020EDBCF2FF0030E37D937DBA4 -:1036500074DAADDA060E2FC0DBFF070E30C0DBFFD9 -:1036600055D804D9040EDBCF2FF0050E28DA27DB5E -:1036700057D8B3D9F9DBFAD8060EDBCF2FF0070EF7 -:103680001EDA17DB4DD8F8D888D93C0EE15C02E28F -:10369000E16AE552E16E3BD14BDBD0DBA6D9E66AAD -:1036A000CBD901015F51EE5C066E6051EE58076E9A -:1036B0006151EE58086E625104D902E2E16AE552A6 -:1036C000E16E25D135DB17DB90D9010EE66EB4D95A -:1036D00001016351EE5C066E6451EE58076E655150 -:1036E000EE58086E6651EDD802E2E16AE552E16EED -:1036F0000ED1040EE66EE66AA9D906E0040EE66E67 -:10370000010EE66EA3D901E1000C010CF2DF000905 -:10371000FDE01200AEDB18DA93DAD1D9D1EF1DF05B -:103720002EC01CF02FC01DF030C01EF031C01FF0A5 -:103730002ADBA4DB2DC018F02EC019F02FC01AF020 -:1037400030C01BF01200DBCF11F0336A346A340E44 -:10375000356E430E366E0EC02EF00FC02FF010C027 -:1037600030F011C031F00EEC26F02EC00AF02FC060 -:103770000BF030C00CF031C00DF0DB0E336E0F0ECD -:10378000346E490E356ED8DA7BDAE7DA02C02EF0F5 -:10379000C3DA24EC25F025EF1EF031C0DBFF046A0C -:1037A000056A800E066E3F0E076E0C6A0D6A0E6A81 -:1037B000400E0F6E04C0E6FF05C0E6FF06C0E6FF40 -:1037C00007C0E6FF0CC0E6FF0DC0E6FF0EC0E6FF37 -:1037D000E66E3EDBE552E7CF0FF0E552E7CF0EF0A5 -:1037E000E552E7CF0DF0E552E7CF0CF0E552E7CF19 -:1037F00007F0E552E7CF06F0E552E7CF05F0E552D6 -:10380000E7CF04F02DC010F02EC011F02FC012F041 -:1038100030C013F03EDA59DA0EEC26F09DEF1DF0C1 -:1038200066DAC2EC14F0E552E552E5521200F40EED -:10383000DBCF2FF0F50EA3DAE3D965EF1EF08DDABA -:10384000F4EF1DF0140EDBCF00F0150EDBCF01F00E -:10385000160EDBCF02F0170EDBCF03F0336A346AAB -:10386000DC0E356E420E366EF4EF1DF0F70EDBCF38 -:103870002FF0F80EA4EF1DF0000E186C191E19227F -:103880001A1E1A221B1E1B2218C0E6FF19C0E6FFD3 -:103890001AC0E6FF1BC0E6FF1200E66E28DA32EF20 -:1038A0001EF0100EDBCF33F0110EDBCF34F0120E12 -:1038B000DBCF35F0130EB8DA7BEF26F060DAD5EF08 -:1038C0001EF0EE58096E06C02DF007C02EF008C09D -:1038D0002FF0306E0BEC25F02EC002F02FC003F05D -:1038E00030C004F031C005F04EDABBEC25F0B5DA9B -:1038F0002FC0F3FF30C0F4FF040EE15C120013DAB6 -:10390000E76E1200D9CFE6FFE1CFD9FF1200E552F2 -:10391000E7CFD9FF1200E126D9CFE9FFDACFEAFFDE -:10392000FA0EDBCFEEFFFB0EDBCFEEFFFC0EDBCFA4 -:10393000EEFFFD0EDBCFEEFFD950F60FD3D9040E0C -:10394000EECFDBFF050EEECFDBFF060EEECFDBFF8B -:10395000070EEECFDBFF120066D9026A036AB40ECF -:10396000046E420E056E1200060EE7CFDBFFDBCFC2 -:10397000E6FF070EDBCFE6FF040EDBCFE6FF050E0A -:10398000DBCFE6FF020EDBCFE6FF030EDBCFE6FF69 -:10399000DECFE6FFDDCFE6FF1200010EE66E9FEC04 -:1039A00017F062DA020EE66E3DEC18F0E5521200F6 -:1039B000140EDBCF33F0150EDBCF34F0160EDBCF59 -:1039C00035F0170EDBCF36F0BBEC25F0A0EF1EF084 -:1039D0008ED955EC16F0E5521200BBD9E66A9FEF7E -:1039E00017F055DA31C0E6FF12008CD9020EF3CF82 -:1039F000DBFF030EF4CFDBFF1200020EE66EC8EC15 -:103A000016F0E5521200BBD92EC018F02FC019F0E5 -:103A100030C01AF031C01BF01200020E2FC0DBFFC5 -:103A2000030E30C0DBFF25DADBCF30F01200336A43 -:103A3000346A356A9CEF1EF065D9F3CFDEFFF4CF10 -:103A4000DDFFD9CFE9FFDACFEAFF1200B5EC16F0BF -:103A5000E552E55200091200080EDBCF00F0090E16 -:103A6000DBCF01F01200E66E32EF1EF0286E0D0E75 -:103A7000E15E285012003BD9C8EC16F0E552120066 -:103A8000D2EC16F0006E090EE15E00501200DBCFA2 -:103A900003F000500110021003101200336A346A60 -:103AA000800E356EBF0E366E120000C0E6FF01C0FC -:103AB000E6FF1200126E060EE15E125012005FD990 -:103AC0007DD961D90EEC26F0A6D9BD0E336E370E26 -:103AD000346E860E356E410E366ED0D92DC00CF088 -:103AE0002EC00DF02FC00EF030C00FF0A9EF1EF069 -:103AF00011DE2EC024F02FC025F030C026F031C0DA -:103B000027F0350E336EFA0E346E0E0E356E3C0E07 -:103B1000366E0EEC26F02EC020F02FC021F030C003 -:103B200022F031C023F0336A346A5C0E356E430EE6 -:103B3000366E0EEC26F090EF1BF018D90ED92CD96A -:103B4000BBEC25F0A0EF1EF01AD910D91CD90EEC51 -:103B500026F02BD9CC0E336EBC0E346E8C0E356E27 -:103B60003B0E366E8BD92DC000F02EC001F02FC059 -:103B700002F030C003F0A9EF1EF0140EDBCF0CF002 -:103B8000150EDBCF0DF0160EDBCF0EF0170EDBCFD0 -:103B90000FF04DDE24EF25F0E96EDACFEAFFF9EF02 -:103BA0001EF0FD0EDBCF2FF0FE0EBFEF1EF061D931 -:103BB000E6D828D944DE0EEC26F07BEF26F0DBCFEA -:103BC000E6FF10EF1CF0C8DE0C0EDBCF0EF00D0E82 -:103BD000DBCF0FF00E0EDBCF10F00F0EB4DDC0EC1C -:103BE00018F068DF22EF1CF000C02EF001C02FF0AB -:103BF00002C030F003C031F01200E0D81FEF1CF01B -:103C00000AD9ADEF1EF010D9B1D819DE24EF25F096 -:103C1000010EE66E9FEC17F029DF020EE66E3DEC1A -:103C200018F0E55274D6F70EDBCFE6FFF80EDBCFC7 -:103C3000E6FFF90EDBCFE6FFFA0EDBCFE6FF120060 -:103C4000FB0EDBCF2FF0FC0E120007D92FC0E6FFD2 -:103C500030C0E6FF120080EC2AF0E552E552E55252 -:103C6000E552120043EC14F0E552E55212004ADE30 -:103C7000C4DE50DD90EF1BF0F7D84CDD90EF1BF069 -:103C80002EC006F02FC007F030C008F031C009F098 -:103C900012002DC033F02EC034F02FC035F030C0EC -:103CA00036F01200FEDD2FC0DEFF30C0DDFF22EF58 -:103CB0001CF0020EDBCF2FF0030EBFEF1EF0000E44 -:103CC000DFCF2FF0010EBFEF1EF00CC02EF00DC0A5 -:103CD0002FF00EC030F00FC031F01200E66EE66A31 -:103CE00010EF1CF0E96EFF0EDA20EA6E1200FE0EF5 -:103CF000DBCFE6FF12000A0EE66E010EB4DE010E07 -:103D0000E66E1200A7EC15F0E5521200DECFE6FFDA -:103D1000DDCFE6FF10EF1CF003C02FF004C030F041 -:103D200005C031F01200E66E11EC33F0E5521200DE -:103D3000E9DD040EE1261200400E366EBBEF25F0E1 -:103D40002EC000F02FC001F030C002F031C003F0EF -:103D500012002DC0E6FF47EF1FF02EC033F02FC03A -:103D600034F030C035F031C036F012002EC008F00B -:103D70002FC009F030C00AF031C00BF01200DBCFC9 -:103D800030F0F6EF24F0A60E336E280E346E940E4B -:103D9000356E3F0E366E120004C02EF005C02FF0B7 -:103DA00006C030F007C031F012002EC004F02FC062 -:103DB00005F030C006F031C007F012002EC014F03C -:103DC0002FC015F030C016F031C017F0120028DDFA -:103DD000060EDBCFE6FF070EF2DE040EDBCFE6FFBA -:103DE000050E1200020EDBCFE6FF030EE8DE86EFC3 -:103DF0001EF0EECFE6FFEECFE6FFEECFE6FFEFCF11 -:103E0000E6FF12002EC00CF02FC00DF030C00EF0F7 -:103E100031C00FF012002EC010F02FC011F030C0D2 -:103E200012F031C013F01200DBCF36F00EEF26F0A7 -:103E3000FC0EDBCFE6FFFD0EDFEF1DF00A0EE66E97 -:103E4000E66A10DFE66A12005DDDD7DD78EF1DF06F -:103E5000D950380FA1DE2BEF1EF07BEC26F02FC0DF -:103E600000F030C001F01200206E0D0EE15E205017 -:103E70001200F90EDBCF2FF0FA0E12000EEC26F036 -:103E8000AAEF26F01BDDD3DD5BDFBDEF1DF02EC0FA -:0C3E9000E6FF2FC0E6FF30C0E6FF120086 -:043E9C0046EC24F0DC -:103EA0006A6A686A79EC24F06D8C6E6A29EC24F0F9 -:103EB0006D9CDF6A5AEC24F010E2DF50040DF3CF62 -:103EC000E9FFF4CFEAFF000EE926040EEA22EE6ACB -:103ED000EE6AEE6AEE6ADF2AEDD7160E706E68A6FD -:103EE00004D0030EEFEC23F0FAD70101136B186B2B -:103EF000196B1A6B6D98080E0B6F040E0C6F016B2B -:103F0000006BE55204EF24F046EC24F0010100516F -:103F10000BE16D6A696A79EC24F06DB602D06D86AA -:103F2000FCD70101010E006F000508E16DBA06D053 -:103F3000686A696A69806988020E006F6850040BBC -:103F400007E06950040B04E0020EEFEC23F089D87F -:103F50006DB247D06850010B14E06950010B11E0BD -:103F60009DDF0101040E006F0401200E026F040E9C -:103F7000036F080E016F006B8C0E0013E66AB8EC3D -:103F800024F06850100B07E06950100B04E060D873 -:103F9000040EEFEC23F06850400B0BE06950400B2F -:103FA00008E080EC24F0020EF7EC23F0060EEFECB4 -:103FB00023F06850200B04E06950200B01E035D855 -:103FC0006850020B0AE06950020B07E080EC24F015 -:103FD000E668E668D8EC24F06A6A040E0101005D28 -:103FE00002E2A19A1FD069A61CD0DF6A040EDF5C32 -:103FF00018E268A616D06CCF20F1030EEFEC23F088 -:10400000780E0101201502E138D809D0000EE66EC5 -:10401000E66A200EE66E010EE66E010EE8DBDF2A90 -:10402000E5D7A19AE55204EF24F070A00ED012EC6F -:1040300024F0EF50800808E1D5DBEF50840804E15C -:1040400012EC24F08C0EEF6E7090050EEFEF23F063 -:104050006984040EC4DB6D8232EC24F0040EF7EFA9 -:1040600023F032EC24F0030EC2DB6D92699468A455 -:1040700003D0020EB4DBFBD7120046EC24F0FD0E99 -:10408000010120153DE17E0E2015E8407F0B040D57 -:10409000F3CF03F1F4CF04F1000E0327040E042341 -:1040A00003C105F104C106F10575BCDBEF503C0B03 -:1040B000E842E8420D0822E1B5DBAFEC24F0EECF98 -:1040C00000F0EFCF01F0280E001816E1040E0118E1 -:1040D00013E1E9EC24F0DF6AEDDB0EE2DF5062EC85 -:1040E00024F0DF50EA6A200FE96E040EEA22E5525E -:1040F000E750EF6EDF2AF0D70AD807D01AD805D0DC -:10410000FD0E2015040801E122D8E5527DD36ADBBB -:10411000EF50800B02E066DBEF6A01010F6B106B62 -:10412000146B156B136B64D89DDB170E60DB2DEFE2 -:1041300022F0020E0101105D02E1BAEF22F034D844 -:104140000101215102E1B4EF24F0216B12009EDB4A -:1041500049DBEF50400B01E0010EDF6E01010B75F2 -:10416000080E005D09E122C46EFF6E50000802E2F5 -:10417000100E01D0040E006F100513E1EDEC24F0D9 -:10418000A6D9020E01010F5D03E12CDB840E07D0DE -:10419000DF5003E127DBC80E02D024DB880EEF6E70 -:1041A00001D002D8E55230D32BDB0101106B1ADBB2 -:1041B000EF6A040E0B19006E0CC101F0DE6E0CC12B -:1041C000DDFF19DBEF6A18AF0CD01B511C1107E0A3 -:1041D00005D01CC1FAFF01011B51F96EFADF010184 -:1041E000189F020EE15C02E2E16AE552E16E0CD337 -:1041F00004012051600BE842E842E842E842E8420C -:10420000000901E0120021510C0A45E00B0A3FE0D1 -:104210000C0A31E0010A22E00B0A1EE0020A1CE04F -:10422000030A18E0080A10E0010A0CE00F0A08E08F -:10423000030A01E012000101138F080E006F120043 -:10424000ADEF21F016EF23F00101010E116F010E09 -:10425000126F0CD0EEEF21F04CEF21F02451010150 -:10426000116F126B020E1127010E12231381010E22 -:10427000146F138F12000101138F04012451EA6A95 -:10428000020FE96E010EEA2222C4EFFF1200EADA01 -:10429000160EF7EF23F012007EDB040EE126040178 -:1042A000220510E120511F0B00090CE10101138FC1 -:1042B000030E0401215D04E10101010E1F6F02D014 -:1042C00001011F6B0401225141E120511F0B020823 -:1042D0003DE124510F0B000939E00101138F040166 -:1042E00024BF05D0A4DA070EE926010E04D09FDA18 -:1042F0000B0EE926010ED2DA030E215D03E17BDA13 -:10430000840E23D024510F0B016A700F006E0F0E24 -:104310000122020E00C0DBFF030E01C0DBFF020E14 -:10432000DBCFE9FF030EDBCFEAFFEE90ED5224AFC7 -:1043300006D061DAEF6ADF745EDA400E06D05BDA2F -:10434000880EEF6EDF7457DAC80EEF6E040EE15C74 -:1043500002E2E16AE552E16E57D2800E0401205D6F -:104360003CE10101C00E136F04012351030A1EE05A -:10437000010A09E0030A2FE101014A0E116F630EE1 -:10438000126F120E22D0C3DAF40EF626630EA2DAF2 -:10439000020E0101F76A1125F66E1251F72209008B -:1043A000F5CF14F10A00F5... [truncated message content] |
From: oiffrig <Ba...@us...> - 2010-02-24 21:16:53
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via dde1617b6333d9005a9bb79542d09fa17e023b3d (commit) via e237a87733351c0f01e319bab5ff335166fa6094 (commit) from 63f14c692283128c4438374445fd1298b31c811e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit dde1617b6333d9005a9bb79542d09fa17e023b3d Merge: e237a87733351c0f01e319bab5ff335166fa6094 63f14c692283128c4438374445fd1298b31c811e Author: Olivier Iffrig <if...@cr...> Date: Wed Feb 24 22:16:13 2010 +0100 Merge branch 'master' of ssh://krobot.git.sourceforge.net/gitroot/krobot/krobot commit e237a87733351c0f01e319bab5ff335166fa6094 Author: Olivier Iffrig <if...@cr...> Date: Wed Feb 24 22:10:40 2010 +0100 Basic parts for Jr robot ----------------------------------------------------------------------- Changes: diff --git a/Robot_Jr/Meca/Assemblage.CATProduct b/Robot_Jr/Meca/Assemblage.CATProduct new file mode 100644 index 0000000..9e0fd5d Binary files /dev/null and b/Robot_Jr/Meca/Assemblage.CATProduct differ diff --git a/Robot_Jr/Meca/Base.CATPart b/Robot_Jr/Meca/Base.CATPart new file mode 100644 index 0000000..9151406 Binary files /dev/null and b/Robot_Jr/Meca/Base.CATPart differ diff --git a/Robot_Jr/Meca/Mais sur plan incline.CATProduct b/Robot_Jr/Meca/Mais sur plan incline.CATProduct new file mode 100644 index 0000000..8c4f472 Binary files /dev/null and b/Robot_Jr/Meca/Mais sur plan incline.CATProduct differ diff --git a/Robot_Jr/Meca/Plan incline.CATPart b/Robot_Jr/Meca/Plan incline.CATPart new file mode 100644 index 0000000..1dea997 Binary files /dev/null and b/Robot_Jr/Meca/Plan incline.CATPart differ hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 21:11:37
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 63f14c692283128c4438374445fd1298b31c811e (commit) via 59b4b288ae853d691e5293a9054a765aeeb3a8e8 (commit) via ff69ea42068f9527975208553f04d369e1ba7f5c (commit) from 09b96167adb43821ec7c1a4023be8cb1686a1a27 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 63f14c692283128c4438374445fd1298b31c811e Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 22:10:27 2010 +0100 [driver] remove the direction hack in set_velocity commit 59b4b288ae853d691e5293a9054a765aeeb3a8e8 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 22:06:31 2010 +0100 [driver] typo commit ff69ea42068f9527975208553f04d369e1ba7f5c Author: Olivier BICHLER <oli...@en...> Date: Wed Feb 24 21:34:26 2010 +0100 [driver] more logging ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 788442b..1ccb0b4 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -262,12 +262,19 @@ struct +---------------------------------------------------------------+ *) let move dev dist velocity acc = + lwt () = + Log.info_f "move: distance=%d velocity=%d acceleration=%d" + dist velocity acc + in match dev.state with | Trajectory _ -> + lwt () = Log.info "move: state=trajectory" in fail (Failure "already in a trajectory") | Manual _ -> + lwt () = Log.info "move: state=manual" in fail (Failure "currently in manual mode") | Static -> + lwt () = Log.info "move: state=static" in let date = Unix.gettimeofday () in if (dist > 0 && date < dev.inhibit_forward_until) || (dist < 0 && date < dev.inhibit_backward_until) then fail (Failure "inhibited move") @@ -295,12 +302,19 @@ struct end let turn dev angle velocity acc = + lwt () = + Log.info_f "turn: angle=%d velocity=%d acceleration=%d" + angle velocity acc + in match dev.state with | Trajectory _ -> + lwt () = Log.info "turn: state=trajectory" in fail (Failure "already in a trajectory") | Manual _ -> + lwt () = Log.info "turn: state=manual" in fail (Failure "currently in manual mode") | Static -> + lwt () = Log.info "turn: state=static" in let waiter, wakener = Lwt.wait () in let trajectory = { abort = wakener; @@ -322,13 +336,25 @@ struct dev.state <- Static; return (if trajectory.stopped then `Stopped else `OK) + let string_of_goto_mode = function + | `Curve_left -> "curve-left" + | `Curve_right -> "curve-right" + | `Straight -> "straight" + let goto dev x y velocity acc mode bypass_distance = + lwt () = + Log.info_f "goto: x=%d y=%d velocity=%d acceleration=%d mode=%s bypass_distance=%d" + x y velocity acc (string_of_goto_mode mode) bypass_distance + in match dev.state with | Trajectory _ -> + lwt () = Log.info "goto: state=trajectory" in fail (Failure "already in a trajectory") | Manual _ -> + lwt () = Log.info "goto: state=manual" in fail (Failure "currently in manual mode") | Static -> + lwt () = Log.info "goto: state=static" in let date = Unix.gettimeofday () in if date < dev.inhibit_forward_until then fail (Failure "inhibited move") @@ -365,24 +391,33 @@ struct | Manually sets the velocity and acceleration of each motor | +---------------------------------------------------------------+ *) + let string_of_stop_mode = function + | `Abrupt -> "abrupt" + | `Smooth -> "smooth" + | `Off -> "off" + let stop_motors dev mode = + lwt () = Log.info_f "stop-motors: mode=%s" (string_of_stop_mode mode) in match dev.state with | Trajectory trajectory -> + lwt () = Log.info "stop-motors: state=trajectory" in trajectory.stopped <- true; lwt () = USB_commands.Motors.traj_stop dev.card `Both mode in wakeup trajectory.abort (); return () | Manual(stopper, left, right) -> + lwt () = Log.info "stop-motors: state=manual" in lwt () = USB_commands.Motors.traj_stop dev.card `Both mode in dev.state <- Static; cancel stopper; return () | Static -> + lwt () = Log.info "stop-motors: state=static" in USB_commands.Motors.traj_stop dev.card `Both mode - let _set_velocities dev (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = - let fake_direction_l, direction_l, velocity_l = if velocity_l < 0 then (`Backward, `Backward, -velocity_l) else (`Forward, `Forward, velocity_l) in - let fake_direction_r, direction_r, velocity_r = if velocity_r < 0 then (`Forward, `Backward, -velocity_r) else (`Backward, `Forward, velocity_r) in + let _set_velocities dev stopper (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = + let direction_l, velocity_l = if velocity_l < 0 then (`Backward, -velocity_l) else (`Forward, velocity_l) in + let direction_r, velocity_r = if velocity_r < 0 then (`Backward, -velocity_r) else (`Forward, velocity_r) in let date = Unix.gettimeofday () in if (((direction_l = `Forward && velocity_l > 0) || (direction_r = `Forward && velocity_r > 0)) && date < dev.inhibit_forward_until) || (((direction_l = `Backward && velocity_l > 0) || (direction_r = `Backward && velocity_r > 0)) && date < dev.inhibit_backward_until) then @@ -391,31 +426,42 @@ struct if velocity_l <> 0 || velocity_r <> 0 then dev.state <- Manual(Lwt_unix.sleep duration >> stop_motors dev `Smooth, { velocity = velocity_l; acceleration = acceleration_l; direction = direction_l }, - { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }); + { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }) + else + dev.state <- Static; + cancel stopper; lwt () = if acceleration_l <> settings_l.acceleration then - USB_commands.Motors.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l + USB_commands.Motors.traj_new_velocity dev.card `Left velocity_l acceleration_l direction_l else - USB_commands.Motors.traj_change_velocity dev.card `Left velocity_l fake_direction_l + USB_commands.Motors.traj_change_velocity dev.card `Left velocity_l direction_l and () = if acceleration_r <> settings_r.acceleration then - USB_commands.Motors.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r + USB_commands.Motors.traj_new_velocity dev.card `Right velocity_r acceleration_r direction_r else - USB_commands.Motors.traj_change_velocity dev.card `Right velocity_r fake_direction_r + USB_commands.Motors.traj_change_velocity dev.card `Right velocity_r direction_r in USB_commands.Motors.traj_start dev.card `Both end let set_velocities dev velocities accelerations duration = + lwt () = + Log.info_f "set-velocities: velocities=(%d, %d) accelerations=(%d, %d) duration=%f" + (fst velocities) (snd velocities) + (fst accelerations) (snd accelerations) + duration + in match dev.state with | Trajectory _ -> + lwt () = Log.info "set-velocities: state=trajectory" in fail (Failure "currently in trajectory mode") | Manual(stopper, left, right) -> - cancel stopper; - _set_velocities dev (left, right) velocities accelerations duration + lwt () = Log.info "set-velocities: state=manual" in + _set_velocities dev stopper (left, right) velocities accelerations duration | Static -> + lwt () = Log.info "set-velocities: state=static" in let static = { velocity = 0; acceleration = 0; direction = `Forward } in - _set_velocities dev (static, static) velocities accelerations duration + _set_velocities dev (return ()) (static, static) velocities accelerations duration OL_method StopMotors : Types.stop_mode -> unit OL_method SetVelocities : int * int -> int * int -> float -> unit hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-02-24 20:55:48
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 09b96167adb43821ec7c1a4023be8cb1686a1a27 (commit) from b816f48eab76c6b03cde9297fdf561dd83168995 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 09b96167adb43821ec7c1a4023be8cb1686a1a27 Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:55:25 2010 +0100 Try to fix direction consistency (3) ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 0a1d694..48ba798 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index 45e059d..a79b116 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -599,11 +599,11 @@ void moveForward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -621,11 +621,11 @@ void moveBackward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -643,11 +643,11 @@ void turnRight(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -665,11 +665,11 @@ void turnLeft(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -745,7 +745,7 @@ void goTo(short x, short y, short vel, short acc, BYTE mode, short d) { if (mode == GOTO_CURVE_LEFT) { // angle2 = angle2 if we pass left - turnRight(90.0-angle2*180.0/PI, vel, acc); + turnLeft(90.0-angle2*180.0/PI, vel, acc); posRight = (r - (float) WHEELS_DIST/2.0)*angle3; posLeft = (r + (float) WHEELS_DIST/2.0)*angle3; @@ -756,7 +756,7 @@ void goTo(short x, short y, short vel, short acc, BYTE mode, short d) { // If we pass right, we need to adjust the calculated angle angle2 = 2.0*angle1 - angle2; - turnRight(90.0-angle2*180.0/PI, vel, acc); + turnLeft(90.0-angle2*180.0/PI, vel, acc); posRight = (r + (float) WHEELS_DIST/2.0)*angle3; posLeft = (r - (float) WHEELS_DIST/2.0)*angle3; @@ -767,11 +767,11 @@ void goTo(short x, short y, short vel, short acc, BYTE mode, short d) { waitTrajComplete(); newPosition(MOTOR_RIGHT, - (long) ((float) posRight * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) posRight * COEF_RIGHT_WHEEL), (long) ((float) velRight * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - (long) ((float) posLeft * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) posLeft * COEF_LEFT_WHEEL), (long) ((float) velLeft * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index fd808eb..332fb2e 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -1053,8 +1053,6 @@ void ProcessIO(void) { (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); } } - - traj_engaged = 1; break; case TRAJ_NEW_VELOCITY: @@ -1084,8 +1082,6 @@ void ProcessIO(void) { CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); } } - - traj_engaged = 1; break; case TRAJ_CHANGE_VELOCITY: @@ -1110,8 +1106,6 @@ void ProcessIO(void) { CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); } } - - traj_engaged = 1; break; case TRAJ_START: diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 49d411b..ca5c9f5 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index 8dfdec7..4d285e1 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,144 +1,144 @@ :020000040000FA -:06000000F9EF33F01200DD +:06000000F7EF33F01200DF :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000F9EF33F01200D5 +:06080000F7EF33F01200D7 :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A00040085680000D7 -:1008300026010000210000007D6800005F0100002B -:10084000080000006F680000470100000E00000073 -:0C0850006C6800006A010000030000005A +:06082A00040081680000DB +:100830002601000021000000796800005F0100002F +:10084000080000006B680000470100000E00000077 +:0C085000686800006A010000030000005E :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD :10088000FACFE4FF00EE29F0140EE80403E3EECF04 :10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD7D4EC13F09EA013D0DEEC13F0E2 +:1008A000E4FFFBD7CBEC13F09EA013D0D5EC13F0F4 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E5023A3EC2CF029 -:1008D0009E90E7EC13F002E2E16AE552E16EE55228 +:1008C00005E34D6B4E6B4F2B000E5023A1EC2CF02B +:1008D0009E90DEEC13F002E2E16AE552E16EE55231 :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 :10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D :10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 :10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A :10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FFD4EC13F0E7EC13F002E2A1 +:10094000E4FFF4CFE4FFCBEC13F0DEEC13F002E2B3 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D886EC1FF060D8FCD774 -:100980000F0EC11202D850EF1FF0F7EC13F0E65231 -:10099000ABEC13F00101676F070E675D10E1E66ACB -:1009A00013EC33F0E552DF6E000EDF80EFEC13F056 -:1009B000E66ACCEC33F0E552DF70EFEC13F0D08E4A +:10097000E5CFD8FF100004D884EC1FF060D8FCD776 +:100980000F0EC11202D84EEF1FF0EEEC13F0E6523C +:10099000A2EC13F00101676F070E675D10E1E66AD4 +:1009A00011EC33F0E552DF6E000EDF80E6EC13F061 +:1009B000E66ACAEC33F0E552DF70E6EC13F0D08E55 :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E86EC32F0E552C7 +:1009E000E66E7C0EE66EE10EE66E84EC32F0E552C9 :1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66EFCEC13F0E552838C8188828443 -:100A1000808A838E80888294010EE66E07EC34F023 -:100A2000E55282849D80C50EE66E5CEC33F0E552A3 -:100A3000DEEC13F0E552E552E7CFD9FF1200D9CF33 +:100A0000010EE66EF3EC13F0E552838C818882844C +:100A1000808A838E80888294010EE66E05EC34F025 +:100A2000E55282849D80C50EE66E5AEC33F0E552A5 +:100A3000D5EC13F0E552E552E7CFD9FF1200D9CF3C :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A5000F0EC12F0200E0101005D03E36D50020B7B -:100A600002E0E6EF12F0010149514A1102E1000EE5 +:100A5000E7EC12F0200E0101005D03E36D50020B84 +:100A600002E0DDEF12F0010149514A1102E1000EEE :100A700008D049C1E9FF4AC1EAFFEF50800B01E00D :100A8000010E000947E101014651EA6A260FE96EAD :100A9000010EEA22EF5000083DE20501406B010122 :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66EA1EC23F0006E050EE15E005003 +:100AD000010EE66E9FEC23F0006E050EE15E005005 :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E17EEC1BF00009BE +:100B300000092CE10101520529E179EC1BF00009C3 :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66EA1EC23F0006E050EE15E005062 +:100B7000010EE66E9FEC23F0006E050EE15E005064 :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EEFEC2DF0BA -:100BC000E55225EC17F0000904E00101020E516F17 +:100BB00013E0030A01E06ED0020EE66EEDEC2DF0BC +:100BC000E5521CEC17F0000904E00101020E516F20 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66EA7EC49 +:100BE000C80EE66EE66AE80EE66E030EE66E9EEC52 :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486BED0E006E1A +:100C3000050E426F0501436B0501486BE90E006E1E :100C4000640E016E026A00C0E6FF01C0E6FF02C04A -:100C5000E6FF480EE66E050EE66ED7EC32F0036E48 +:100C5000E6FF480EE66E050EE66ED5EC32F0036E4A :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66EA1EC23F0006E4C +:100C7000E66E010EE66E010EE66E9FEC23F0006E4E :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66ABEECAA +:100C9000516B02D00101516B020EE66EE66AB5ECB3 :100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66EBEEC16F0E552E552000902E00101D5 +:100CB000E66EB5EC16F0E552E552000902E00101DE :100CC000516901014751481102E1000E08D047C1A6 :100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E0E6EF12F005010251070A02E147EFC8 +:100CE00002E0DDEF12F005010251070A02E13EEFDA :100CF00012F00D0A01E148D2010A01E118D20D0AF1 :100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D1000A5EF12F0FF00E6EF12F0E66A13EC33F0F5 -:100D2000E552DF6E000EDB80DFCFE6FFE66AF3EC14 -:100D300032F0E552E552FF00E6EF12F001014951B1 +:100D10009CEF12F0FF00DDEF12F0E66A11EC33F009 +:100D2000E552DF6E000EDB80DFCFE6FFE66AF1EC16 +:100D300032F0E552E552FF00DDEF12F001014951BA :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 :100D5000EF50800B01E0010E000901E081D100C5D8 :100D600040F50501416B0501030E426F0501436B20 :100D7000050108510F0A01E110D1080A01E1BBD0B9 :100D8000010A01E17ED0020A71E0070A64E0010A6B :100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486BC90E006E640E016E026AEF +:100DA00038D10501486BC50E006E640E016E026AF3 :100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66ED7EC32F0036E050EE15E0350C1 -:100DD00020D10501486BBD0E006E640E016E026AE3 +:100DC000050EE66ED5EC32F0036E050EE15E0350C3 +:100DD00020D10501486BB90E006E640E016E026AE7 :100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66ED7EC32F0036E050EE15E035091 -:100E0000BB0E006E640E016E026A00C0E6FF01C0F8 -:100E1000E6FF02C0E6FF480EE66E050EE66ED7EC72 -:100E200032F0036E050EE15E0350B20E006E640EEA +:100DF000050EE66ED5EC32F0036E050EE15E035093 +:100E0000B70E006E640E016E026A00C0E6FF01C0FC +:100E1000E6FF02C0E6FF480EE66E050EE66ED5EC74 +:100E200032F0036E050EE15E0350AE0E006E640EEE :100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66ED7EC32F0036E050E28 +:100E4000480EE66E050EE66ED5EC32F0036E050E2A :100E5000E15E0350DED092CF48F593CF49F594CFB1 :100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA :100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A49EC2DF0E552010E2DC0DBFF1B +:100E8000C8D0E66A47EC2DF0E552010E2DC0DBFF1D :100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E :100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E49ECB8 +:100EB000DBCF4AF5010EDBCF4BF5010EE66E47ECBA :100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 :100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 :100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 -:100EF000DBCF4FF58ED00A0EE66EE66A4CEC14F0AE -:100F0000E552E552E66AB0EC15F0E552030EF3CF78 -:100F1000DBFF040EF4CFDBFFE66AB0EC15F0E55220 +:100EF000DBCF4FF58ED00A0EE66EE66A43EC14F0B7 +:100F0000E552E552E66AA7EC15F0E552030EF3CF81 +:100F1000DBFF040EF4CFDBFFE66AA7EC15F0E55229 :100F2000DE52F3CFDEFFF4CFDDFFDD52040EDBCF68 :100F300048F5030EDBCF49F5020EDBCF4AF5010E73 -:100F4000DBCF4BF50A0EE66E010EE66E4CEC14F0AC -:100F5000E552E552010EE66EB0EC15F0E552030ED7 -:100F6000F3CFDBFF040EF4CFDBFF010EE66EB0EC37 +:100F4000DBCF4BF50A0EE66E010EE66E43EC14F0B5 +:100F5000E552E552010EE66EA7EC15F0E552030EE0 +:100F6000F3CFDBFF040EF4CFDBFF010EE66EA7EC40 :100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 :100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A83EC18F03E +:100F90004EF5010EDBCF4FF53CD0E66A7AEC18F047 :100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B :100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 :100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E83EC18F0E552010E2DC0C4 +:100FD0004BF5010EE66E7AEC18F0E552010E2DC0CD :100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 :100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D :10100000020EDBCF4EF5010EDBCF4FF50501020ED0 :10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66EA1EC23F0006E050EE15EA9 +:10102000E66E010EE66E9FEC23F0006E050EE15EAB :101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66EA1EC23F092 +:10104000E66E050EE66EE66A010EE66E9FEC23F094 :10105000006E050EE15E0050F3CF47F1F4CF48F18A -:10106000E6EF12F005010851030A37E0010A25E016 +:10106000DDEF12F005010851030A37E0010A25E01F :10107000030A13E0010A01E040D005010951921270 :1010800005010A51931205010B51941205010C51EF :10109000951205010D51961235D00501091D9216C4 @@ -147,98 +147,98 @@ :1010C00005010A1D8A1605010B1D8B1605010C1D55 :1010D0008C1605010D1D8D1615D0050109518912BB :1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66E99EC90 +:1010F0008C1205010D518D1205D0030EE66E97EC92 :1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66EA1EC23F0006E050EE15EBC -:101120000050F3CF47F1F4CF48F1E6EF12F005019C +:10111000E66A010EE66E9FEC23F0006E050EE15EBE +:101120000050F3CF47F1F4CF48F1DDEF12F00501A5 :101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000EFEC2DF0E5520BD009C5E6FFFFEC2DF0DA -:10115000E55205D0010EE66E99EC33F0E552400EF3 +:10114000EDEC2DF0E5520BD009C5E6FFFDEC2DF0DE +:10115000E55205D0010EE66E97EC33F0E552400EF5 :10116000E66E000EE66E050EE66EE66A010EE66EAF -:10117000A1EC23F0006E050EE15E0050F3CF47F1C5 -:10118000F4CF48F1E6EF12F005010851060A02E13A -:1011900006EF12F0080A02E1CCEF11F0030A02E1B7 -:1011A000C3EF11F0070A02E196EF10F0030A02E123 -:1011B00076EF0EF0010A01E1D8D20F0A01E1C0D2A8 +:101170009FEC23F0006E050EE15E0050F3CF47F1C7 +:10118000F4CF48F1DDEF12F005010851060A02E143 +:10119000FDEF11F0080A02E1C3EF11F0030A02E1CA +:1011A000BAEF11F0070A02E190EF10F0030A02E132 +:1011B00073EF0EF0010A01E1D8D20F0A01E1C0D2AB :1011C000020A01E174D2010A01E142D2070A01E1F7 :1011D00010D2010A01E1DED1030A01E1ACD1010A1A :1011E00001E1A5D10C0A01E126D1030A01E194D065 -:1011F000040A02E02EEF12F00501095104E0020E8C -:101200000501095D40E10AC5E6FF010EE66EF3EC5B -:1012100032F0E552E5520BC5E6FF020EE66EF3EC46 -:1012200032F0E552E5520CC5E6FF030EE66EF3EC34 -:1012300032F0E552E5520DC5E6FF040EE66EF3EC22 -:1012400032F0E552E5520EC5E6FF050EE66EF3EC10 -:1012500032F0E552E5520FC5E6FF060EE66EF3ECFE -:1012600032F0E552E55210C5E6FF070EE66EF3ECEC -:1012700032F0E552E55211C5E6FF080EE66EF3ECDA +:1011F000040A02E025EF12F00501095104E0020E95 +:101200000501095D40E10AC5E6FF010EE66EF1EC5D +:1012100032F0E552E5520BC5E6FF020EE66EF1EC48 +:1012200032F0E552E5520CC5E6FF030EE66EF1EC36 +:1012300032F0E552E5520DC5E6FF040EE66EF1EC24 +:1012400032F0E552E5520EC5E6FF050EE66EF1EC12 +:1012500032F0E552E5520FC5E6FF060EE66EF1EC00 +:1012600032F0E552E55210C5E6FF070EE66EF1ECEE +:1012700032F0E552E55211C5E6FF080EE66EF1ECDC :1012800032F0E552E5520501090504E0020E0501C0 -:10129000095D40E10AC5E6FF090EE66EF3EC32F0A7 -:1012A000E552E5520BC5E6FF0A0EE66EF3EC32F0AE -:1012B000E552E5520CC5E6FF0B0EE66EF3EC32F09C -:1012C000E552E5520DC5E6FF0C0EE66EF3EC32F08A -:1012D000E552E5520EC5E6FF0D0EE66EF3EC32F078 -:1012E000E552E5520FC5E6FF0E0EE66EF3EC32F066 -:1012F000E552E55210C5E6FF0F0EE66EF3EC32F054 -:10130000E552E55211C5E6FF100EE66EF3EC32F041 -:10131000E552E55233EF12F000C540F50501416B8F -:101320000501030E426F0501436B010EE66E13ECDF -:1013300033F0E5520501486F020EE66E13EC33F010 -:10134000E5520501496F030EE66E13EC33F0E552EA -:1013500005014A6F040EE66E13EC33F0E552050109 -:101360004B6F050EE66E13EC33F0E55205014C6F42 -:10137000060EE66E13EC33F0E55205014D6F070ED5 -:10138000E66E13EC33F0E55205014E6F080EE66E83 -:1013900013EC33F0E55205014F6F090EE66E13ECC6 -:1013A00033F0E5520501506F0A0EE66E13EC33F090 -:1013B000E5520501516F0B0EE66E13EC33F0E5526A -:1013C0000501526F0C0EE66E13EC33F0E552050189 -:1013D000536F0D0EE66E13EC33F0E5520501546FBA -:1013E0000E0EE66E13EC33F0E5520501556F0F0E4D -:1013F000E66E13EC33F0E5520501566F100EE66E03 -:1014000013EC33F0E5520501576F400EE66E400EC7 -:10141000E66E050EE66E010EE66E010EE66EA1ECBE +:10129000095D40E10AC5E6FF090EE66EF1EC32F0A9 +:1012A000E552E5520BC5E6FF0A0EE66EF1EC32F0B0 +:1012B000E552E5520CC5E6FF0B0EE66EF1EC32F09E +:1012C000E552E5520DC5E6FF0C0EE66EF1EC32F08C +:1012D000E552E5520EC5E6FF0D0EE66EF1EC32F07A +:1012E000E552E5520FC5E6FF0E0EE66EF1EC32F068 +:1012F000E552E55210C5E6FF0F0EE66EF1EC32F056 +:10130000E552E55211C5E6FF100EE66EF1EC32F043 +:10131000E552E5522AEF12F000C540F50501416B98 +:101320000501030E426F0501436B010EE66E11ECE1 +:1013300033F0E5520501486F020EE66E11EC33F012 +:10134000E5520501496F030EE66E11EC33F0E552EC +:1013500005014A6F040EE66E11EC33F0E55205010B +:101360004B6F050EE66E11EC33F0E55205014C6F44 +:10137000060EE66E11EC33F0E55205014D6F070ED7 +:10138000E66E11EC33F0E55205014E6F080EE66E85 +:1013900011EC33F0E55205014F6F090EE66E11ECCA +:1013A00033F0E5520501506F0A0EE66E11EC33F092 +:1013B000E5520501516F0B0EE66E11EC33F0E5526C +:1013C0000501526F0C0EE66E11EC33F0E55205018B +:1013D000536F0D0EE66E11EC33F0E5520501546FBC +:1013E0000E0EE66E11EC33F0E5520501556F0F0E4F +:1013F000E66E11EC33F0E5520501566F100EE66E05 +:1014000011EC33F0E5520501576F400EE66E400EC9 +:10141000E66E050EE66E010EE66E010EE66E9FECC0 :1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF133EF12F0030EE66E010EE66EF3ECA6 -:1014400032F0E552E552E80EE66E020EE66EF3EC7F -:1014500032F0E552E552E66A030EE66EF3EC32F046 -:10146000E552E552010EE66E040EE66EF3EC32F044 -:10147000E552E552E66A050EE66EF3EC32F0E5520F -:10148000E552E66A060EE66EF3EC32F0E552E552FE -:10149000270EE66E070EE66EF3EC32F0E552E552EB -:1014A000100EE66E080EE66EF3EC32F0E552E552F1 -:1014B000030EE66E090EE66EF3EC32F0E552E552ED -:1014C000E80EE66E0A0EE66EF3EC32F0E552E552F7 -:1014D000E66A0B0EE66EF3EC32F0E552E552010ED1 -:1014E000E66E0C0EE66EF3EC32F0E552E552E66A7B -:1014F0000D0EE66EF3EC32F0E552E552E66A0E0EA2 -:10150000E66EF3EC32F0E552E552270EE66E0F0E72 -:10151000E66EF3EC32F0E552E552100EE66E100E78 -:10152000E66EF3EC32F0E552E55233EF12F025ECC3 -:1015300017F033EF12F0060E09C5DBFF050E0AC5E2 +:101430004AF12AEF12F0030EE66E010EE66EF1ECB1 +:1014400032F0E552E552E80EE66E020EE66EF1EC81 +:1014500032F0E552E552E66A030EE66EF1EC32F048 +:10146000E552E552010EE66E040EE66EF1EC32F046 +:10147000E552E552E66A050EE66EF1EC32F0E55211 +:10148000E552E66A060EE66EF1EC32F0E552E55200 +:10149000270EE66E070EE66EF1EC32F0E552E552ED +:1014A000100EE66E080EE66EF1EC32F0E552E552F3 +:1014B000030EE66E090EE66EF1EC32F0E552E552EF +:1014C000E80EE66E0A0EE66EF1EC32F0E552E552F9 +:1014D000E66A0B0EE66EF1EC32F0E552E552010ED3 +:1014E000E66E0C0EE66EF1EC32F0E552E552E66A7D +:1014F0000D0EE66EF1EC32F0E552E552E66A0E0EA4 +:10150000E66EF1EC32F0E552E552270EE66E0F0E74 +:10151000E66EF1EC32F0E552E552100EE66E100E7A +:10152000E66EF1EC32F0E552E5522AEF12F01CECD7 +:1015300017F02AEF12F0060E09C5DBFF050E0AC5EB :10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 :101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 :101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FFA7ECAE +:10157000E6FF050EDBCFE6FF060EDBCFE6FF9EECB7 :1015800018F0006E060EE15E00500101010E526F70 -:1015900033EF12F0060E09C5DBFF050E0AC5DBFFAF +:101590002AEF12F0060E09C5DBFF050E0AC5DBFFB8 :1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 :1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF :1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FFB3EC18F01F -:1015E000006E060EE15E00500101010E526F33EFF6 +:1015D000050EDBCFE6FF060EDBCFE6FFA8EC18F02A +:1015E000006E060EE15E00500101010E526F2AEFFF :1015F00012F0060E09C5DBFF050E0AC5DBFF080E5B :101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC :10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E :10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FFBDEC18F0006E59 -:10164000060EE15E00500101010E526F33EF12F001 +:10163000DBCFE6FF060EDBCFE6FFB4EC18F0006E62 +:10164000060EE15E00500101010E526F2AEF12F00A :10165000060E09C5DBFF050E0AC5DBFF080E0BC52C :10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 :101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 :10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FFC9EC18F0006E060E83 -:1016A000E15E00500101010E526F33EF12F0060EA1 +:10169000E6FF060EDBCFE6FFC0EC18F0006E060E8C +:1016A000E15E00500101010E526F2AEF12F0060EAA :1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 :1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC :1016D000DBFF0C0E0FC5DBFF0B0E10C5DBFF0E0E84 @@ -246,1339 +246,1343 @@ :1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC :101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 :10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FFD5EC18F0006E50 -:101730000B0EE15E00500101010E526F33EF12F00B +:10172000DBCFE6FF060EDBCFE6FFCCEC18F0006E59 +:101730000B0EE15E00500101010E526F2AEF12F014 :10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF79EC18F0E1 -:10176000E552E552E55233EF12F0060E0AC5DBFFF3 +:10175000E6FF060EDBCFE6FF09C5E6FF70EC18F0EA +:10176000E552E552E5522AEF12F0060E0AC5DBFFFC :10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 :10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 :101790000501095D02E0000E01D0010E000E0009F6 :1017A00001E1D9D0090EDBCF2FF00A0EDBCF30F0EC -:1017B000F6EC24F02EC008F02FC009F030C00AF07B +:1017B000F4EC24F02EC008F02FC009F030C00AF07D :1017C00031C00BF0A60E336E280E346E940E356EBB :1017D0003F0E366E08C02EF009C02FF00AC030F060 -:1017E0000BC031F010EC26F02EC004F02FC005F035 +:1017E0000BC031F00EEC26F02EC004F02FC005F037 :1017F00030C006F031C007F0CC0E336EBC0E346E34 :101800008C0E356E3B0E366E04C02EF005C02FF0E8 -:1018100006C030F007C031F010EC26F0ACEC26F03A +:1018100006C030F007C031F00EEC26F0AAEC26F03E :101820002DC000F02EC001F02FC002F030C003F038 :1018300000C0E6FF01C0E6FF02C0E6FF03C0E6FF0E -:10184000070EDBCF2FF0080EDBCF30F0F6EC24F0E4 +:10184000070EDBCF2FF0080EDBCF30F0F4EC24F0E6 :101850002EC014F02FC015F030C016F031C017F0B4 :10186000A60E336E280E346E940E356E3F0E366E15 :1018700014C02EF015C02FF016C030F017C031F094 -:1018800010EC26F02EC010F02FC011F030C012F076 +:101880000EEC26F02EC010F02FC011F030C012F078 :1018900031C013F0BD0E336E370E346E860E356ECA :1018A000410E366E10C02EF011C02FF012C030F075 -:1018B00013C031F010EC26F0ACEC26F02DC00CF08B +:1018B00013C031F00EEC26F0AAEC26F02DC00CF08F :1018C0002EC00DF02FC00EF030C00FF00CC0E6FFA0 :1018D0000DC0E6FF0EC0E6FF0FC0E6FF050EDBCF32 -:1018E0002FF0060EDBCF30F0F6EC24F02EC01CF00B +:1018E0002FF0060EDBCF30F0F4EC24F02EC01CF00D :1018F0002FC01DF030C01EF031C01FF0A60E336E99 :10190000280E346E940E356E3F0E366E1CC02EF0CF -:101910001DC02FF01EC030F01FC031F010EC26F0BB -:10192000ACEC26F02DC018F02EC019F02FC01AF024 +:101910001DC02FF01EC030F01FC031F00EEC26F0BD +:10192000AAEC26F02DC018F02EC019F02FC01AF026 :1019300030C01BF018C0E6FF19C0E6FF1AC0E6FF72 -:101940001BC0E6FF09C5E6FFA8EC17F0206E0D0EE0 +:101940001BC0E6FF09C5E6FF9FEC17F0206E0D0EE9 :10195000E15E2050C7D1020E0501095D04E00501DA :10196000090501E0E0D0090EDBCF2FF00A0EDBCF36 -:1019700030F0F6EC24F02EC008F02FC009F030C093 +:1019700030F0F4EC24F02EC008F02FC009F030C095 :101980000AF031C00BF0A60E336E280E346E940EA2 :10199000356E3F0E366E08C02EF009C02FF00AC01B -:1019A00030F00BC031F010EC26F02EC004F02FC048 +:1019A00030F00BC031F00EEC26F02EC004F02FC04A :1019B00005F030C006F031C007F0CC0E336EBC0E1F :1019C000346E8C0E356E3B0E366E04C02EF005C0A4 -:1019D0002FF006C030F007C031F010EC26F0ACEC70 +:1019D0002FF006C030F007C031F00EEC26F0AAEC74 :1019E00026F02DC000F02EC001F02FC002F030C054 :1019F00003F000C0E6FF01C0E6FF02C0E6FF03C03F -:101A0000E6FF070EDBCF2FF0080EDBCF30F0F6EC51 +:101A0000E6FF070EDBCF2FF0080EDBCF30F0F4EC53 :101A100024F02EC014F02FC015F030C016F031C0E5 :101A200017F0A60E336E280E346E940E356E3F0EF0 :101A3000366E14C02EF015C02FF016C030F017C04F -:101A400031F010EC26F02EC010F02FC011F030C095 +:101A400031F00EEC26F02EC010F02FC011F030C097 :101A500012F031C013F0BD0E336E370E346E860EA9 :101A6000356E410E366E10C02EF011C02FF012C030 -:101A700030F013C031F010EC26F0ACEC26F02DC0A5 +:101A700030F013C031F00EEC26F0AAEC26F02DC0A9 :101A80000CF02EC00DF02FC00EF030C00FF00CC0C7 :101A9000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E35 -:101AA000DBCF2FF0060EDBCF30F0F6EC24F02EC0AB +:101AA000DBCF2FF0060EDBCF30F0F4EC24F02EC0AD :101AB0001CF02FC01DF030C01EF031C01FF0A60E6C :101AC000336E280E346E940E356E3F0E366E1CC08B -:101AD0002EF01DC02FF01EC030F01FC031F010ECF2 -:101AE00026F0ACEC26F02DC018F02EC019F02FC057 +:101AD0002EF01DC02FF01EC030F01FC031F00EECF4 +:101AE00026F0AAEC26F02DC018F02EC019F02FC059 :101AF0001AF030C01BF0000E186C191E19221A1EA5 :101B00001A221B1E1B2218C0E6FF19C0E6FF1AC0CE -:101B1000E6FF1BC0E6FF010EE66EA8EC17F0206E94 +:101B1000E6FF1BC0E6FF010EE66E9FEC17F0206E9D :101B20000D0EE15E2050020E0501095D04E0050185 :101B3000095101E0D7D0090EDBCF2FF00A0EDBCF21 -:101B400030F0F6EC24F02EC008F02FC009F030C0C1 +:101B400030F0F4EC24F02EC008F02FC009F030C0C3 :101B50000AF031C00BF0A60E336E280E346E940ED0 :101B6000356E3F0E366E08C02EF009C02FF00AC049 -:101B700030F00BC031F010EC26F02EC004F02FC076 +:101B700030F00BC031F00EEC26F02EC004F02FC078 :101B800005F030C006F031C007F0CC0E336EBC0E4D :101B9000346E8C0E356E3B0E366E04C02EF005C0D2 -:101BA0002FF006C030F007C031F010EC26F0ACEC9E +:101BA0002FF006C030F007C031F00EEC26F0AAECA2 :101BB00026F02DC000F02EC001F02FC002F030C082 :101BC00003F000C0E6FF01C0E6FF02C0E6FF03C06D -:101BD000E6FF070EDBCF2FF0080EDBCF30F0F6EC80 +:101BD000E6FF070EDBCF2FF0080EDBCF30F0F4EC82 :101BE00024F02EC014F02FC015F030C016F031C014 :101BF00017F0A60E336E280E346E940E356E3F0E1F :101C0000366E14C02EF015C02FF016C030F017C07D -:101C100031F010EC26F02EC010F02FC011F030C0C3 +:101C100031F00EEC26F02EC010F02FC011F030C0C5 :101C200012F031C013F0BD0E336E370E346E860ED7 :101C3000356E410E366E10C02EF011C02FF012C05E -:101C400030F013C031F010EC26F0ACEC26F02DC0D3 +:101C400030F013C031F00EEC26F0AAEC26F02DC0D7 :101C50000CF02EC00DF02FC00EF030C00FF00CC0F5 :101C6000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E63 -:101C7000DBCF2FF0060EDBCF30F0F6EC24F02EC0D9 +:101C7000DBCF2FF0060EDBCF30F0F4EC24F02EC0DB :101C80001CF02FC01DF030C01EF031C01FF0A60E9A :101C9000336E280E346E940E356E3F0E366E1CC0B9 -:101CA0002EF01DC02FF01EC030F01FC031F010EC20 -:101CB00026F0ACEC26F02DC018F02EC019F02FC085 +:101CA0002EF01DC02FF01EC030F01FC031F00EEC22 +:101CB00026F0AAEC26F02DC018F02EC019F02FC087 :101CC0001AF030C01BF018C0E6FF19C0E6FF1AC0BA -:101CD000E6FF1BC0E6FFE66AA8EC17F0206E0D0ECB -:101CE000E15E20500101010E526FBDD3060E0AC500 -:101CF000DBFF050E0BC5DBFF080E0CC5DBFF070E77 -:101D00000DC5DBFF020E0501095D02E0000E01D0EA -:101D1000010E000E000901E1A7D00EC5E6FF070E77 -:101D2000DBCF2FF0080EDBCF30F0F6EC24F02EC026 -:101D300008F02FC009F030C00AF031C00BF0A60E39 -:101D4000336E280E346E940E356E3F0E366E08C01C -:101D50002EF009C02FF00AC030F00BC031F010ECAB -:101D600026F02EC004F02FC005F030C006F031C0C0 -:101D700007F0CC0E336EBC0E346E8C0E356E3B0EFF -:101D8000366E04C02EF005C02FF006C030F007C03C -:101D900031F010EC26F0ACEC26F02DC000F02EC097 -:101DA00001F02FC002F030C003F000C0E6FF01C018 -:101DB000E6FF02C0E6FF03C0E6FF050EDBCF2FF013 -:101DC000060EDBCF30F0F6EC24F02EC014F02FC05E -:101DD00015F030C016F031C017F0A60E336E280E85 -:101DE000346E940E356E3F0E366E14C02EF015C054 -:101DF0002FF016C030F017C031F010EC26F02EC0D6 -:101E000010F02FC011F030C012F031C013F0BD0E31 -:101E1000336E370E346E860E356E410E366E10C040 -:101E20002EF011C02FF012C030F013C031F010ECC2 -:101E300026F0ACEC26F02DC00CF02EC00DF02FC01B -:101E40000EF030C00FF00CC0E6FF0DC0E6FF0EC074 -:101E5000E6FF0FC0E6FF09C5E6FFEAEC17F0186ED3 -:101E60000A0EE15E18505ED1020E0501095D04E024 -:101E70000501090501E0A9D0FF0E05010E03F3508D -:101E8000E66E070EDBCF2FF0080EDBCF30F0F6EC5E -:101E900024F02EC008F02FC009F030C00AF031C085 -:101EA0000BF0A60E336E280E346E940E356E3F0E78 -:101EB000366E08C02EF009C02FF00AC030F00BC0FB -:101EC00031F010EC26F02EC004F02FC005F030C029 -:101ED00006F031C007F0CC0E336EBC0E346E8C0EA3 -:101EE000356E3B0E366E04C02EF005C02FF006C0D6 -:101EF00030F007C031F010EC26F0ACEC26F02DC02D -:101F000000F02EC001F02FC002F030C003F000C07E -:101F1000E6FF01C0E6FF02C0E6FF03C0E6FF050ED4 -:101F2000DBCF2FF0060EDBCF30F0F6EC24F02EC026 -:101F300014F02FC015F030C016F031C017F0A60E07 -:101F4000336E280E346E940E356E3F0E366E14C00E -:101F50002EF015C02FF016C030F017C031F010EC85 -:101F600026F02EC010F02FC011F030C012F031C09A -:101F700013F0BD0E336E370E346E860E356E410E85 -:101F8000366E10C02EF011C02FF012C030F013C00A -:101F900031F010EC26F0ACEC26F02DC00CF02EC089 -:101FA0000DF02FC00EF030C00FF00CC0E6FF0DC0DA -:101FB000E6FF0EC0E6FF0FC0E6FF010EE66EEAEC9C -:101FC00017F0186E0A0EE15E1850020E0501095D49 -:101FD00004E00501095101E0A5D00EC5E6FF070E9A -:101FE000DBCF2FF0080EDBCF30F0F6EC24F02EC064 -:101FF00008F02FC009F030C00AF031C00BF0A60E77 -:10200000336E280E346E940E356E3F0E366E08C059 -:102010002EF009C02FF00AC030F00BC031F010ECE8 -:1020200026F02EC004F02FC005F030C006F031C0FD -:1020300007F0CC0E336EBC0E346E8C0E356E3B0E3C -:10204000366E04C02EF005C02FF006C030F007C079 -:1020500031F010EC26F0ACEC26F02DC000F02EC0D4 -:1020600001F02FC002F030C003F000C0E6FF01C055 -:10207000E6FF02C0E6FF03C0E6FF050EDBCF2FF050 -:10208000060EDBCF30F0F6EC24F02EC014F02FC09B -:1020900015F030C016F031C017F0A60E336E280EC2 -:1020A000346E940E356E3F0E366E14C02EF015C091 -:1020B0002FF016C030F017C031F010EC26F02EC013 -:1020C00010F02FC011F030C012F031C013F0BD0E6F -:1020D000336E370E346E860E356E410E366E10C07E -:1020E0002EF011C02FF012C030F013C031F010EC00 -:1020F00026F0ACEC26F02DC00CF02EC00DF02FC059 -:102100000EF030C00FF00CC0E6FF0DC0E6FF0EC0B1 -:10211000E6FF0FC0E6FFE66AEAEC17F0186E0A0E5B -:10212000E15E18500101010E526F9DD1060E0AC5E5 -:10213000DBFF050E0BC5DBFF020E0501095D02E0AA -:10214000000E01D0010E000E000959E00CC5E6FF9B -:10215000050EDBCF2FF0060EDBCF30F0F6EC24F0CF -:102160002EC008F02FC009F030C00AF031C00BF0CB -:10217000A60E336E280E346E940E356E3F0E366EFC -:1021800008C02EF009C02FF00AC030F00BC031F0AB -:1021900010EC26F02EC004F02FC005F030C006F081 -:1021A00031C007F0BD0E336E370E346E860E356EBD -:1021B000410E366E04C02EF005C02FF006C030F080 -:1021C00007C031F010EC26F0ACEC26F02DC000F08A -:1021D0002EC001F02FC002F030C003F000C0E6FFB7 -:1021E00001C0E6FF02C0E6FF03C0E6FF09C5E6FF47 -:1021F0002EEC18F00C6E060EE15E0C50C0D0020EF4 -:102200000501095D03E0050109055BE1FF0E05011C -:102210000C03F350E66E050EDBCF2FF0060EDBCF7E -:1022200030F0F6EC24F02EC008F02FC009F030C0DA -:102230000AF031C00BF0A60E336E280E346E940EE9 -:10224000356E3F0E366E08C02EF009C02FF00AC062 -:1022500030F00BC031F010EC26F02EC004F02FC08F -:1022600005F030C006F031C007F0BD0E336E370EFA -:10227000346E860E356E410E366E04C02EF005C0EB -:102280002FF006C030F007C031F010EC26F0ACECB7 -:1022900026F02DC000F02EC001F02FC002F030C09B -:1022A00003F000C0E6FF01C0E6FF02C0E6FF03C086 -:1022B000E6FF010EE66E2EEC18F00C6E060EE15EE7 -:1022C0000C50020E0501095D03E00501095157E1BB -:1022D0000CC5E6FF050EDBCF2FF0060EDBCF30F08E -:1022E000F6EC24F02EC008F02FC009F030C00AF040 -:1022F00031C00BF0A60E336E280E346E940E356E80 -:102300003F0E366E08C02EF009C02FF00AC030F024 -:102310000BC031F010EC26F02EC004F02FC005F0F9 -:1023200030C006F031C007F0BD0E336E370E346E8C -:10233000860E356E410E366E04C02EF005C02FF0AD -:1023400006C030F007C031F010EC26F0ACEC26F0FF -:102350002DC000F02EC001F02FC002F030C003F0FD -:1023600000C0E6FF01C0E6FF02C0E6FF03C0E6FFD3 -:10237000E66A2EEC18F00C6E060EE15E0C500101C0 -:10238000010E526F70D009C5E6FF46EC18F0E55219 -:102390000101010E526F67D051EC1BF0050EF3CF17 -:1023A000DBFF060EF4CFDBFF67EC1BF0070EF3CF6D -:1023B000DBFF080EF4CFDBFF00C540F50501416BE4 -:1023C0000501030E426F0501436B060EDBCF48F596 -:1023D000050EDBCF49F5080EDBCF4AF5070EDBCF44 -:1023E0004BF5400EE66E400EE66E050EE66E010EF3 -:1023F000E66E010EE66EA1EC23F0006E050EE15EC6 -:102400000050F3CF49F1F4CF4AF12DD000C540F58B -:102410000501416B0501030E426F0501436B7EEC24 -:102420001BF0000904E00501010E486F02D0050110 -:10243000486B400EE66E400EE66E050EE66E010E2F -:10244000E66E010EE66EA1EC23F0006E050EE15E75 -:102450000050F3CF49F1F4CF4AF105D0010EE66EFA -:1024600099EC33F0E552400EE66E000EE66E050E76 -:10247000E66EE66A010EE66EA1EC23F0006E050E34 -:10248000E15E0050F3CF47F1F4CF48F19FD0010156 -:1024900049514A1102E1000E08D049C1E9FF4AC181 -:1024A000EAFFEF50800B01E0010E00094DE1010150 -:1024B000010E516F0501406B01014C514C2B050180 -:1024C000416F0501050E426F0501436B0501486B25 -:1024D0009E0E006E640E016E026A00C0E6FF01C02F -:1024E000E6FF02C0E6FF480EE66E050EE66ED7EC8C -:1024F00032F0036E050EE15E0350400EE66E400EB4 -:10250000E66E050EE66E010EE66E010EE66EA1ECBD -:1025100023F0006E050EE15E0050F3CF49F1F4CFD9 -:102520004AF1400EE66E000EE66E050EE66EE66AB5 -:10253000010EE66EA1EC23F0006E050EE15E005088 -:10254000F3CF47F1F4CF48F141D0010149514A118D -:1025500002E1000E08D049C1E9FF4AC1EAFFEF508D -:10256000800B01E0010E000931E100C540F50501D5 -:10257000416B0501030E426F0501010E436F400ED2 -:10258000E66E400EE66E050EE66E010EE66E010E7C -:10259000E66EA1EC23F0006E050EE15E0050F3CF75 -:1025A00049F1F4CF4AF1400EE66E000EE66E050EDC -:1025B000E66EE66A010EE66EA1EC23F0006E050EF3 -:1025C000E15E0050F3CF47F1F4CF48F10F0EE15C2C -:1025D00002E2E16AE552E16EE552E7CFD9FF12006F -:1025E00001015351541104E1100E536F270E546F23 -:1025F0005307000E545B6DA207D0535154112EE1C6 -:102600008C748CB413D027D00101005102E18C945A -:1026100022D0000502E18C8409D0020E005D02E1A7 -:102620008C8419D0040E005D03E18C948C8612001A -:10263000100E005D06E10101535154110FE18C743D -:102640000AD0200E005D0AE101015351541106E148 -:102650008C748CA402D08C9612008C86120012000E -:1026600012001200120040EF31F012001E0EE66E52 -:10267000010EE66E6FEC23F0E552E552400EE66E79 -:10268000000EE66E050EE66EE66A010EE66EA1EC41 -:1026900023F0006E050EE15E0050F3CF47F1F4CF5A -:1026A00048F112006D840101080E686F070E696F12 -:1026B0006807000E695B68516911FAE16D941200B8 -:1026C000D9CFE6FFE1CFD9FFFD0EDBCF2FF0FE0E15 -:1026D000DBCF30F0010E2F1801E1305033E0E86815 -:1026E0002F1802E1E86830182BE0030E2F1801E1E3 -:1026F000305024E0040E2F1801E130501DE0020E8E -:102700002F1801E1305016E0170E2F1801E130505C -:102710000FE0160E2F1801E1305008E0150E2F18AB -:1027200001E1305001E010D0A1DF0FD09EDF0DD0CD -:102730009ADF0BD096DF09D092DF07D091DF05D06A -:1027400091DF03D0000001D000D0010E00D0E5528F -:10275000E7CFD9FF12004BD8E652D0B202D0010E1B -:1027600015D0D0B802D0020E11D0D0B002D0030ED6 -:102770000DD0D0B602D0040E09D0FCAE02D0050EAA -:1027800005D0FCAC02D0060E01D0070EDF6ED0885B -:10279000D086D084D082D080FC9EFC9CDF50E55255 -:1027A000E552E7CFD9FF1200E65221D8020EE1260A -:1027B000F350DF6E010EF4CFDBFF1200C00EE66EA9 -:1027C000E00EE66E7DEC33F0E552E5521200DF508C -:1027D000F36E010EDB50F46E020EE15C1200DFCFEF -:1027E000E6FFE66AF3EC32F0E552E5521200D9CF8B -:0827F000E6FFE1CFD9FF120062 -:0827F8008CEC1CF0FE0EDB501E -:1028000006E1F80E96163C0E9416959808D0FE0E2A -:10281000DB0405E1070E9612C30E9412958891EF22 -:102820001CF0D9CFE6FFE1CFD9FFE652010EE66EEC -:10283000E3DFE552809AFE0EDB5004E0FE0EDB5033 -:1028400002080FE1839C81880000839E0000000045 -:1028500000008450010BDF6E838E00000000DF0457 -:10286000F4E0FE0EDB0404E0FE0EDB5002080FE194 -:10287000838C81980000839E00000000000084503B -:10288000010BDF6E838E00000000DF04F4E0E552F0 -:10289000E552E7CFD9FF1200D9CFE6FFE1CFD9FF4C -:1028A000E652FD0EDB50DF6EFE0EDBCFE6FFB9DF3A -:1028B000E552E66AA1DFE552FE0EDB5003E1839CA0 -:1028C00081880CD0FE0EDB0403E1838C819806D056 -:1028D000FE0EDB50020802E1839C8198809A000082 -:1028E0008098D9CFE9FFDACFEAFFEF50010B02E081 -:1028F000848001D08490D9CFE9FFDACFEAFFEF508E -:10290000020B02E0848201D08492D9CFE9FFDACFB2 -:10291000EAFFEF50040B02E0848401D08494D9CF05 -:10292000E9FFDACFEAFFEF50080B02E0838801D01D -:102930008398D9CFE9FFDACFEAFFEF50100B02E01E -:10294000828201D08292D9CFE9FFDACFEAFFEF503D -:10295000200B02E0828E01D0829ED9CFE9FFDACF30 -:10296000EAFFEF50400B02E0828001D08290D9CF85 -:10297000E9FFDACFEAFFEF50800B02E0828C01D052 -:10298000829C00000000808800000000E552E552B3 -:10299000E7CFD9FF1200D9CFE6FFE1CFD9FF020E72 -:1029A000E126FC0EDBCFDEFFDBCFDDFFFE0EDBCF53 -:1029B000E6FF37DFE552E66A1FDFE552FE0EDB5029 -:1029C00003E1839C81880CD0FE0EDB0403E1838C41 -:1029D000819806D0FE0EDB50020802E1839C8198AC -:1029E000808A00008098D9CFE9FFDACFEAFFEE5263 -:1029F000EF50010B02E0848001D08490D9CFE9FF31 -:102A0000DACFEAFFEE52EF50020B02E0848201D0EF -:102A10008492D9CFE9FFDACFEAFFEE52EF50040BF0 -:102A200002E0848401D08494D9CFE9FFDACFEAFFB1 -:102A3000EE52EF50080B02E0838801D08398D9CF83 -:102A4000E9FFDACFEAFFEE52EF50100B02E082828C -:102A500001D08292D9CFE9FFDACFEAFFEE52EF50F0 -:102A6000200B02E0828E01D0829ED9CFE9FFDACF1F -:102A7000EAFFEE52EF50400B02E0828001D08290DC -:102A8000D9CFE9FFDACFEAFFEE52EF50800B02E038 -:102A9000828C01D0829C0000000080880000000031 -:102AA0008098D9CFE9FFDACFEAFFEF50010B02E0BF -:102AB000848001D08490D9CFE9FFDACFEAFFEF50CC -:102AC000020B02E0848201D08492D9CFE9FFDACFF1 -:102AD000EAFFEF50040B02E0848401D08494D9CF44 -:102AE000E9FFDACFEAFFEF50080B02E0838801D05C -:102AF0008398D9CFE9FFDACFEAFFEF50100B02E05D -:102B0000828201D08292D9CFE9FFDACFEAFFEF507B -:102B1000200B02E0828E01D0829ED9CFE9FFDACF6E -:102B2000EAFFEF50400B02E0828001D08290D9CFC3 -:102B3000E9FFDACFEAFFEF50800B02E0828C01D090 -:102B4000829C00000000808800000000020EE15C12 -:102B500002E2E16AE552E16EE552E7CFD9FF1200E9 -:102B6000D9CFE6FFE1CFD9FF020EE126FE0EDBCF83 -:102B7000E6FF57DEE552010EE66E3EDEE552FE0E42 -:102B8000DB5003E1839C818805D0FE0EDB0402E16B -:102B9000838C8198808A0000839E000000000000E2 -:102BA0008450010B066E8450020B01E0010EE824F4 -:102BB000056E8450040B01E0010E040DF3CF04F008 -:102BC0008350100B01E0010E080DF3CF03F082508B -:102BD000020B01E0010E100DF3CF02F08250800BCA -:102BE00001E0010E200DF3CF01F08250010B400DEA -:102BF000F3CF00F08250400B01E0010E800DF35046 -:102C00000010011002100310041005100610E76EEA -:102C1000010EE7CFDBFF838E00000000839E0000E3 -:102C2000000000008450010B066E8450020B01E08E -:102C3000010EE824056E8450040B01E0010E040D22 -:102C4000F3CF04F08350100B01E0010E080DF3CF19 -:102C500003F08250020B01E0010E100DF3CF02F0E1 -:102C60008250800B01E0010E200DF3CF01F0825065 -:102C7000010B400DF3CF00F08250400B01E0010E3C -:102C8000800DF35000100110021003100410051005 -:102C90000610DF6E838EDECF00F0DDCF01F000C0C6 -:102CA000F3FF01C0F4FF00D0020EE15C02E2E16A32 -:102CB000E552E16EE552E7CFD9FF1200D9CFE6FF2A -:102CC000E1CFD9FFE652DF6AFE0EDBCFE6FFA9DDDA -:102CD000E552010EE66E90DDE552FE0EDB5003E19B -:102CE000839C818805D0FE0EDB0402E1838C8198F1 -:102CF000809A0000839E0000000000008450010BB9 -:102D0000066E8450020B01E0010EE824056E84502B -:102D1000040B01E0010E040DF3CF04F08350100BFF -:102D200001E0010E080DF3CF03F08250020B01E029 -:102D3000010E100DF3CF02F08250800B01E0010E66 -:102D4000200DF3CF01F08250010B400DF3CF00F0C6 -:102D50008250400B01E0010E800DF3500010011075 -:102D600002100310041005100610DF6E838EDF5072 -:102D700000D0E552E552E7CFD9FF12008CEC1CF0F1 -:102D8000E652DF6AF2EC1CF0DF6EFD0EDB50DF1462 -:102D9000DF6EDF5002E0010E01D0000EE55291EF30 -:102DA0001CF08CEC1CF01D0E57EC1CF0000E70ECAF -:102DB0001EF091EF1CF08CEC1CF0F2EC1CF084087F -:102DC0000FE0F2EC1CF0C4080BE0E66A79EC1EF0B0 -:102DD00034EC1EF0020EE66ECCEC33F0E552EDD78B -:102DE0001C0E57EC1CF00A0E70EC1EF045EC1DF0AA -:102DF000F2EC1CF0800804E0F2EC1CF0C008E5E105 -:102E0000F2EC1CF0C00802E145EC1DF01E0E57EC80 -:102E10001CF00F0E70EC1EF01AEC1FF0FA0EDBCF58 -:102E2000E6FFFB0EE4EC1DF0F80EDBCFE6FFF90E3B -:102E3000E4EC1DF0F60EDBCFE6FFF70EE4EC1DF040 -:102E4000040E57EC1CF091EF1CF08CEC1CF0080EFB -:102E5000E126010E89EC1CF0010EE7CFDBFF020E2C -:102E600095EC1EF0DF6E030E89EC1CF0030EE7CF2D -:102E7000DBFF040E89EC1CF0020EE7CFDBFF050E32 -:102E800089EC1CF0050EE7CFDBFF060E89EC1CF089 -:102E9000040EE7CFDBFF070E89EC1CF0070EE7CF2F -:102EA000DBFF080E89EC1CF0BEEC1CF0E66A4AEC75 -:102EB0001DF0090E89EC1CF0010EE7CFDBFF0A0EB6 -:102EC00095EC1EF0DF6E0B0E89EC1CF0030EE7CFC5 -:102ED000DBFF0C0E89EC1CF0020EE7CFDBFF0D0EC2 -:102EE00089EC1CF0050EE7CFDBFF0E0E89EC1CF021 -:102EF000040EE7CFDBFF0F0E89EC1CF0070EE7CFC7 -:102F0000DBFF100E89EC1CF0BEEC1CF0010EE66E2F -:102F10004AEC1DF0020EE66E3DEC1DF0020EE66E70 -:102F2000E66A30EC1DF007E1020EE66E010EE66E79 -:102F300030EC1DF002E0000E01D0010E006E080E14 -:102F4000E15C02E2E16AE552E16E005091EF1CF0B3 -:102F50008CEC1CF00C0E95EC1CF0D950F20F74ECBC -:102F60001EF0080EEECFDBFF090EEECFDBFF0A0EE0 -:102F7000EECFDBFF0B0EEECFDBFF1F0E57EC1CF08E -:102F800036EC1DF00A0EDBCF02F00B0E51EC1DF0FB -:102F900010E02B0E70EC1EF00A0EDBCFE6FF0B0EDE -:102FA000E4EC1DF0080EDBCFE6FF090EDBCFE6FFF9 -:102FB00003D00B0EE66EE66AE9EC1EF0E4EC1DF0C1 -:102FC000F4EC1EF00C0EE15C02E2E16AE552E16E07 -:102FD00091EF1CF08CEC1CF00A0E95EC1CF0080E26 -:102FE000DB6A090EDB6A1F0E57EC1CF0F50EDBCF17 -:102FF00000F0003407E2080EDB6A100EF36E090ED3 -:10300000F3CFDBFF040EDBCF00F0050EDBCF01F0CA -:10301000060EDBCF02F0070E51EC1DF00DE036EC92 -:103020001DF0280E0012080E01125FEC1DF0E9ECF5 -:103030001EF0DBCFE6FF07D036EC1DF0080E0012C5 -:1030400001125FEC1DF0F6DBF4EC1EF00A0EE15C01 -:1030500002E2E16AE552E16E91EF1CF08CEC1CF0AB -:10306000F90EDBCFE6FFE66AE66AE66AE66AD95061 -:10307000FA0F74EC1EF0FBEC1EF079EC1EF0AADFE8 -:10308000006E0A0EE15E005091EF1CF08CEC1CF01B -:10309000FE0EDB5004E0FE0EDB5002080FE120ECD8 -:1030A0001FF084EC1EF0F3CF61F1F4CF62F1E66A19 -:1030B00084EC1EF0F3CF5FF1F4CF60F1FE0EDB0481 -:1030C00004E0FE0EDB50020810E17DEC1EF084EC03 -:1030D0001EF0F3CF65F1F4CF66F1010EE66E84ECDD -:1030E0001EF0F3CF63F1F4CF64F1010EE0DB91EF5A -:1030F0001CF08CEC1CF01F0EDADB1AEC1FF0010E3A -:10310000D6DB91EF1CF09AEC1EF0FE0EDB500208AD -:1031100005E12D6A2E6A2F6A306A12D00B0EC7DBCA -:1031200079EC1EF0FFEC1CF0DE6ADD6ADECF2DF0DC -:10313000DECF2EF0DECF2FF0DDCF30F0DD52DD52CE -:10314000040EE15C02E2E16AE552E16EEAD339EC99 -:103150001EF09CDBE66AFCDE3EEC1EF0ABEC1EF0E3 -:10316000D7EC1CF0DED339EC1EF0F7EC1CF03EEC93 -:103170001EF08CDBD7EC1CF0D4D326EC1FF0F7EC60 -:103180001CF040EC1DF07DEC1DF0ABEC1EF00AEFE6 -:103190001EF026EC1FF07ADBE66ADADE40EC1DF06A -:1031A0007DEC1DF073DB0AEF1EF0B6DB3C0EE12672 -:1031B000D6EC1DF0B8EC1EF0D6EC1DF004EC1FF0C0 -:1031C000AFEC1EF008C02EF009C02FF00AC030F09E -:1031D0000BC031F010EC26F0D7EC1EF022EC1EF004 -:1031E000C1EC1EF0E0EC1EF022EC1EF00DEC1DF028 -:1031F000AFEC1EF014C02EF015C02FF016C030F04A -:1032000017C031F010EC26F0F4EC1DF0CEEC1EF0FF -:1032100027EC25F0A2EC1EF0336A346A800E356E7E -:103220009EEC1EF0380E2EC0DBFF390E2FC0DBFFE8 -:103230003A0E30C0DBFF3B0E31C0DBFFD6EC1DF099 -:10324000A2EC1EF0D8DB22EC1EF042DBD4DB6FECEC -:103250002EF0086E080EE15E0850080E2DC0DBFF50 -:10326000090E2EC0DBFF0A0E2FC0DBFF0B0E30C095 -:10327000DBFFCDDBF60EDB5007E0D950F40F74EC2A -:103280001EF0EE50ED103AE171DB080EDBCF0EF0D0 -:10329000090EDBCF0FF00A0EDBCF10F00B0E58DA61 -:1032A0003ADA15EC1EF02E6A2F6A800E306E400E50 -:1032B000316E380EDBCF33F0390EDBCF34F03A0EFF -:1032C000DBCF35F03B0E16EC1FF042EC1EF093DB2B -:1032D0002DEC1EF02DC002F02EC003F02FC004F024 -:1032E00030C005F02DC02EF08EEC1EF027EC1EF045 -:1032F0002EDF0A6E060EE15E0A50CCD1380EDBCF0F -:1033000004F0390EDBCF05F03A0EDBCF06F03B0EB2 -:10331000DBCF07F00C6A0D6A0E6A400E0F6E91DA71 -:1033200010EC26F0A2EC1DF0F40EDBCF2FF0F50E22 -:1033300074DB87DBF1EC1DF027EC25F0140E2EC0BA -:10334000DBFF150E2FC0DBFF160E30C0DBFF170EA4 -:103350002EDAD6EC1DF0F1EC1DF010EC26F0180E74 -:103360002EC0DBFF190E2FC0DBFF1A0E30C0DBFFB3 -:103370001B0E1DDA22EC1EF0C1EC1EF0F1EC1DF06C -:1033800010EC26F01C0E2EC0DBFF1D0E2FC0DBFF45 -:103390001E0E30C0DBFF1F0E31C0DBFF1C0EDBCF6B -:1033A00000F01D0EDBCF01F01E0EDBCF02F01F0E72 -:1033B000DBCF03F07DDBE8EC1DF010EC26F0200EF7 -:1033C0002EC0DBFF210E2FC0DBFF220E30C0DBFF43 -:1033D000230E31C0DBFFD950180FE96EDACFEAFFB8 -:1033E000240EEECFDBFF250EEECFDBFF260EEECF59 -:1033F000DBFF270EEECFDBFFFD0EDBCF2FF0FE0E47 -:1034000044EC1FF0200EDBCF33F0210EDBCF34F085 -:10341000220EDBCF35F0230EEADB280E2EC0DBFFB9 -:10342000290E2FC0DBFF2A0E30C0DBFF2B0E31C070 -:10343000DBFF22EC1EF044EC1FF0240EDBCF33F058 -:10344000250EDBCF34F0260EDBCF35F0270ECFDB99 -:103450002C0E2EC0DBFF2D0E2FC0DBFF2E0E30C03A -:10346000DBFF2F0E31C0DBFF2C0EDBCF04F02D0E67 -:10347000DBCF05F02E0EDBCF06F02F0EDBCF07F0F3 -:1034800017DBCEEC1EF010EC26F09CDA300E2EC0CE -:10349000DBFF310E2FC0DBFF320E30C0DBFF330EFF -:1034A00031C0DBFF280EDBCF2EF0290EDBCF2FF053 -:1034B0002A0EDBCF30F02B0EDBCF31F083DA340E67 -:1034C0002EC0DBFF350E2FC0DBFF360E30C0DBFF1A -:1034D000370E31C0DBFFD950300F63DBD950340FCA -:1034E00060DB6FEC2EF0006E080EE15E00500C0EFB -:1034F0002DC0DBFF0D0E2EC0DBFF0E0E2FC0DBFF3D -:103500000F0E30C0DBFF006A016A026A400E036ED4 -:10351000D6DA02C0E6FFE66E35DBB8EC1EF06BDAF9 -:103520002AEC1FF02DC014F02EC015F02FC016F09D -:1035300030C017F0ABEC1EF06FEC2EF0186E080EDA -:10354000E15E1850E552E7CF03F0E552E7CF02F015 -:10355000E552E7CF01F0E552E7CF00F02DC004F0CF -:103560002EC005F02FC006F030C007F094DB30DB32 -:1035700010EC26F0100E2EC0DBFF110E2FC0DBFF6B -:10358000120E30C0DBFF130E31C0DBFFF60EDB5036 -:1035900002081BE131DB26EC25F086DB27EC25F069 -:1035A0008AD945DA060E2FC0DBFF070E30C0DBFFDD -:1035B000000EDFCF2FF0010E8BD97DDBC3DAFCDAF2 -:1035C000040E2FC0DBFF050E4ED02E6A2F6A306A24 -:1035D000400E316E080EDBCF33F0090EDBCF34F036 -:1035E0000A0EDBCF35F00B0E16EC1FF0ABDB0C0E2A -:1035F000DBCF04F00D0EDBCF05F00E0EDBCF06F0B7 -:103600000F0EDBCF07F004C033F005C034F006C066 -:1036100035F007C036F026EC25F00C0E2EC0DBFF8F -:103620000D0E2FC0DBFF0E0E30C0DBFF0F0E31C0C2 -:10363000DBFFE2DA27EC25F037DB26EC25F03BD97F -:10364000F6D9040E2FC0DBFF050E30C0DBFF020EE3 -:10365000DBCF2FF0030E3CD934DB74DAADDA060E83 -:103660002FC0DBFF070E30C0DBFF55D809D9040E91 -:10367000DBCF2FF0050E28DA24DB57D8B8D9F6DBDC -:10368000FFD8060EDBCF2FF0070E1EDA14DB4DD865 -:10369000FDD88DD93C0EE15C02E2E16AE552E16EB3 -:1036A00040D148DBCDDBABD9E66AD0D901015F510F -:1036B000EE5C066E6051EE58076E6151EE58086E72 -:1036C000625109D902E2E16AE552E16E2AD132DBA8 -:1036D00014DB95D9010EE66EB9D901016351EE5C98 -:1036E000066E6451EE58076E6551EE58086E6651CD -:1036F000F2D802E2E16AE552E16E13D1040EE66E01 -:10370000E66AAED906E0040EE66E010EE66EA8D9B2 -:1037100001E1000C010CF2DF0009FDE01200ABDB5F -:1037200018DA90DAD1D9D6EF1DF02EC01CF02FC0D8 -:103730001DF030C01EF031C01FF027DBA1DB2DC013 -:1037400018F02EC019F02FC01AF030C01BF0120074 -:10375000DBCF11F0336A346A340E356E430E366EA9 -:103760000EC02EF00FC02FF010C030F011C031F09D -:1037700010EC26F02EC00AF02FC00BF030C00CF079 -:1037800031C00DF0DB0E336E0F0E346E490E356E08 -:10379000D5DA78DAE4DA02C02EF0C0DA26EC25F0C9 -:1037A00056DAEBDC126E060EE15E1250120031C0EA -:1037B000DBFF046A056A800E066E3F0E076E0C6A18 -:1037C0000D6A0E6A400E0F6E04C0E6FF05C0E6FFEC -:1037D00006C0E6FF07C0E6FF0CC0E6FF0DC0E6FF2F -:1037E0000EC0E6FFE66E36DBE552E7CF0FF0E5529E -:1037F000E7CF0EF0E552E7CF0DF0E552E7CF0CF042 -:10380000E552E7CF07F0E552E7CF06F0E552E7CF04 -:1038100005F0E552E7CF04F02DC010F02EC011F0F6 -:103820002FC012F030C013F036DA51DA10EC26F067 -:10383000A2EF1DF05EDACBEC14F0E552E552E55252 -:103840001200F40EDBCF2FF0F50E9BDACDD967EF27 -:103850001EF085DAE8EF1DF0140EDBCF00F0150E38 -:10386000DBCF01F0160EDBCF02F0170EDBCF03F03B -:10387000336A346ADC0E356E420E366EE8EF1DF0A8 -:10388000F70EDBCF2FF0F80EA9EF1DF0000E186C2D -:10389000191E19221A1E1A221B1E1B2218C0E6FF0F -:1038A00019C0E6FF1AC0E6FF1BC0E6FF1200E66E75 -:1038B00020DA34EF1EF0100EDBCF33F0110EDBCF29 -:1038C00034F0120EDBCF35F0130EB0DA7DEF26F0B8 -:1038D00058DAD7EF1EF0EE58096E06C02DF007C07B -:1038E0002EF008C02FF0306E0DEC25F02EC002F047 -:1038F0002FC003F030C004F031C005F046DABDEC53 -:1039000025F0ADDA2FC0F3FF30C0F4FF040EE15C08 -:1039100012000BDAE76E1200D9CFE6FFE1CFD9FF34 -:103920001200E552E7CFD9FF1200E126D9CFE9FF17 -:10393000DACFEAFFFA0EDBCFEEFFFB0EDBCFEEFFB6 -:10394000FC0EDBCFEEFFFD0EDBCFEEFFD950F60F06 -:10395000CBD9040EEECFDBFF050EEECFDBFF060E5C -:10396000EECFDBFF070EEECFDBFF12005ED9026A5F -:10397000036AB40E046E420E056E1200060EE7CF07 -:10398000DBFFDBCFE6FF070EDBCFE6FF040EDBCF6E -:10399000E6FF050EDBCFE6FF020EDBCFE6FF030EF0 -:1039A000DBCFE6FFDECFE6FFDDCFE6FF1200010E44 -:1039B000E66EA8EC17F05ADA020EE66E46EC18F046 -:1039C000E5521200140EDBCF33F0150EDBCF34F0CE -:1039D000160EDBCF35F0170EDBCF36F0BDEC25F041 -:1039E000A2EF1EF086D95EEC16F0E5521200B3D9B4 -:1039F000E66AA8EF17F04DDA31C0E6FF120084D96D -:103A0000020EF3CFDBFF030EF4CFDBFF1200020E3A -:103A1000E66ED1EC16F0E5521200B3D92EC018F0C4 -:103A20002FC019F030C01AF031C01BF01200020E86 -:103A30002FC0DBFF030E30C0DBFF1DDADBCF30F021 -:103A40001200336A346A356A9EEF1EF05DD9F3CFF7 -:103A5000DEFFF4CFDDFFD9CFE9FFDACFEAFF1200B6 -:103A6000BEEC16F0E552E55200091200080EDBCF5D -:103A700000F0090EDBCF01F01200E66E34EF1EF00D -:103A8000286E0D0EE15E2850120033D9D1EC16F0ED -:103A9000E5521200DBEC16F0006E090EE15E0050FC -:103AA0001200DBCF03F000500110021003101200CF -:103AB000336A346A800E356EBF0E366E120000C057 -:103AC000E6FF01C0E6FF12005CD97AD95ED910EC9E -:103AD00026F0A3D9BD0E336E370E346E860E356ECA -:103AE000410E366ECDD92DC00CF02EC00DF02FC07A -:103AF0000EF030C00FF0ABEF1EF011DE2EC024F040 -:103B00002FC025F030C026F031C027F0350E336EBF -:103B1000FA0E346E0E0E356E3C0E366E10EC26F03C -:103B20002EC020F02FC021F030C022F031C023F091 -:103B3000336A346A5C0E356E430E366E10EC26F036 -:103B400095EF1BF015D90BD929D9BDEC25F0A2EFC3 -:103B50001EF017D90DD919D910EC26F028D9CC0EA2 -:103B6000336EBC0E346E8C0E356E3B0E366E88D9BD -:103B70002DC000F02EC001F02FC002F030C003F0C5 -:103B8000ABEF1EF0140EDBCF0CF0150EDBCF0DF0FB -:103B9000160EDBCF0EF0170EDBCF0FF052DE26EF46 -:103BA00025F0E96EDACFEAFFFBEF1EF0FD0EDBCF6A -:103BB0002FF0FE0EC1EF1EF05ED9E3D825D949DE05 -:103BC00010EC26F07DEF26F0DBCFE6FF1AEF1CF0BD -:103BD00000C02EF001C02FF002C030F003C031F061 -:103BE0001200EED829EF1CF018D9AFEF1EF01ED945 -:103BF000BFD82FDE26EF25F0B9DE0C0EDBCF0EF09E -:103C00000D0EDBCF0FF00E0EDBCF10F00F0EA0DD90 -:103C10002CEF1CF0010EE66EA8EC17F031DF020E5F -:103C2000E66E46EC18F0E5527CD6F70EDBCFE6FFE9 -:103C3000F80EDBCFE6FFF90EDBCFE6FFFA0EDBCFA7 -:103C4000E6FF1200FB0EDBCF2FF0FC0E120007D9AF -:103C50002FC0E6FF30C0E6FF120082EC2AF0E552EA -:103C6000E552E552E55212004CEC14F0E552E552F3 -:103C7000120052DECCDE53DD95EF1BF0F7D84FDD9E -:103C800095EF1BF02EC006F02FC007F030C008F0F3 -:103C900031C009F012002DC033F02EC034F02FC017 -:103CA00035F030C036F0120006DE2FC0DEFF30C027 -:103CB000DDFF2CEF1CF0020EDBCF2FF0030EC1EF67 -:103CC0001EF0000EDFCF2FF0010EC1EF1EF00CC072 -:103CD0002EF00DC02FF00EC030F00FC031F01200EA -:103CE000E66EE66A1AEF1CF0E96EFF0EDA20EA6E65 -:103CF0001200FE0EDBCFE6FF12000A0EE66E010E8A -:103D0000BCDE010EE66E1200B0EC15F0E5521200BA -:103D1000DECFE6FFDDCFE6FF1AEF1CF003C02FF089 -:103D200004C030F005C031F01200E66E13EC33F041 -:103D3000E5521200F1DD040EE1261200400E366E4F -:103D4000BDEF25F02EC000F02FC001F030C002F012 -:103D500031C003F012002DC0E6FF49EF1FF02EC066 -:103D600033F02FC034F030C035F031C036F01200DF -:103D70002EC008F02FC009F030C00AF031C00BF09F -:103D80001200DBCF30F0F8EF24F0A60E336E280ED1 -:103D9000346E940E356E3F0E366E120004C02EF057 -:103DA00005C02FF006C030F007C031F012002EC061 -:103DB00004F02FC005F030C006F031C007F012004B -:103DC0002EC014F02FC015F030C016F031C017F01F -:103DD000120030DD060EDBCFE6FF070EF5DE040E27 -:103DE000DBCFE6FF050E1200020EDBCFE6FF030E6F -:103DF000EBDE88EF1EF0EECFE6FFEECFE6FFEECF74 -:103E0000E6FFEFCFE6FF12002EC00CF02FC00DF042 -:103E100030C00EF031C00FF012002EC010F02FC0D5 -:103E200011F030C012F031C013F01200DBCF36F0C9 -:103E300010EF26F0FC0EDBCFE6FFFD0EE4EF1DF0E9 -:103E40000A0EE66EE66A10DFE66A120065DDDFDD67 -:103E50007DEF1DF0D950380FA4DE2DEF1EF07DEC64 -:103E600026F02FC000F030C001F01200206E0D0EC1 -:103E7000E15E20501200F90EDBCF2FF0FA0E120097 -:103E800010EC26F0ACEF26F023DDDBDD5BDFC2EFCC -:103E90001DF02EC0E6FF2FC0E6FF30C0E6FF120087 -:103EA00048EC24F06A6A686A7BEC24F06D8C6E6AD8 -:103EB0002BEC24F06D9CDF6A5CEC24F010E2DF5008 -:103EC000040DF3CFE9FFF4CFEAFF000EE926040E5C -:103ED000EA22EE6AEE6AEE6AEE6ADF2AEDD7160E85 -:103EE000706E68A604D0030EF1EC23F0FAD701013E -:103EF000136B186B196B1A6B6D98080E0B6F040E11 -:103F00000C6F016B006BE55206EF24F048EC24F0D7 -:103F1000010100510BE16D6A696A7BEC24F06DB61A -:103F200002D06D86FCD70101010E006F000508E18B -:103F30006DBA06D0686A696A69806988020E006F86 -:103F40006850040B07E06950040B04E0020EF1EC2A -:103F500023F089D86DB247D06850010B14E0695046 -:103F6000010B11E09DDF0101040E006F0401200E22 -:103F7000026F040E036F080E016F006B8C0E0013AE -:103F8000E66ABAEC24F06850100B07E06950100B99 -:103F900004E060D8040EF1EC23F06850400B0BE015 -:103FA0006950400B08E082EC24F0020EF9EC23F09B -:103FB000060EF1EC23F06850200B04E06950200B52 -:103FC00001E035D86850020B0AE06950020B07E0A7 -:103FD00082EC24F0E668E668DAEC24F06A6A040E03 -:103FE0000101005D02E2A19A1FD069A61CD0DF6A20 -:103FF000040EDF5C18E268A616D06CCF20F1030E29 -:10400000F1EC23F0780E0101201502E138D809D037 -:10401000000EE66EE66A200EE66E010EE66E010EFA -:10402000E8DBDF2AE5D7A19AE55206EF24F070A07D -:104030000ED014EC24F0EF50800808E1D5DBEF50EF -:10404000840804E114EC24F08C0EEF6E7090050EE1 -:10405000F1EF23F06984040EC4DB6D8234EC24F0AC -:10406000040EF9EF23F034EC24F0030EC2DB6D9262 -:10407000699468A403D0020EB4DBFBD7120048ECAD -:1040800024F0FD0E010120153DE17E0E2015E840D3 -:104090007F0B040DF3CF03F1F4CF04F1000E0327DF -:1040A000040E042303C105F104C106F10575BCDB50 -:1040B000EF503C0BE842E8420D0822E1B5DBB1ECE1 -:1040C00024F0EECF00F0EFCF01F0280E001816E13B -:1040D000040E011813E1EBEC24F0DF6AEDDB0EE2D5 -:1040E000DF5064EC24F0DF50EA6A200FE96E040E22 -:1040F000EA22E552E750EF6EDF2AF0D70AD807D060 -:104100001AD805D0FD0E2015040801E122D8E55289 -:104110007DD36ADBEF50800B02E066DBEF6A0101C2 -:104120000F6B106B146B156B136B64D89DDB170E44 -:1041300060DB2FEF22F0020E0101105D02E1BCEF07 -:1041400022F034D80101215102E1B6EF24F0216BB5 -:1041500012009EDB49DBEF50400B01E0010EDF6EE9 -:1041600001010B75080E005D09E122C46EFF6E505F -:10417000000802E2100E01D0040E006F100513E1DA -:10418000EFEC24F0A6D9020E01010F5D03E12CDB58 -:10419000840E07D0DF5003E127DBC80E02D024DBFA -:1041A000880EEF6E01D002D8E55230D32BDB01012F -:1041B000106B1ADBEF6A040E0B19006E0CC101F0D4 -:1041C000DE6E0CC1DDFF19DBEF6A18AF0CD01B519E -:1041D0001C1107E005D01CC1FAFF01011B51F96E4B -:1041E000FADF0101189F020EE15C02E2E16AE5528A -:1041F000E16E0CD304012051600BE842E842E84232 -:10420000E842E842000901E0120021510C0A45E0B1 -:104210000B0A3FE00C0A31E0010A22E00B0A1EE023 -:10422000020A1CE0030A18E0080A10E0010A0CE088 -:104230000F0A08E0030A01E012000101138F080EC3 -:10424000006F1200AFEF21F018EF23F00101010E13 -:10425000116F010E126F0CD0F0EF21F04EEF21F034 -:1042600024510101116F126B020E1127010E12234E -:104270001381010E146F138F12000101138F0401BB -:104280002451EA6A020FE96E010EEA2222C4EFFF0E -:104290001200EADA160EF9EF23F012007EDB040EAC -:1042A000E1260401220510E120511F0B00090CE159 -:1042B0000101138F030E0401215D04E10101010ED0 -:1042C0001F6F02D001011F6B0401225141E12051F7 -:1042D0001F0B02083DE124510F0B000939E00101D9 -:1042E000138F040124BF05D0A4DA070EE926010EBE -:1042F00004D09FDA0B0EE926010ED2DA030E215DFF -:1043000003E17BDA840E23D024510F0B016A700F76 -:10431000006E0F0E0122020E00C0DBFF030E01C073 -:10432000DBFF020EDBCFE9FF030EDBCFEAFFEE90EF -:10433000ED5224AF06D061DAEF6ADF745EDA400E28 -:1043400006D05BDA880EEF6EDF7457DAC80EEF6EB8 -:10435000040EE15C02E2E16AE552E16E57D2800EA2 -:104360000401205D3CE10101C00E136F04012351E3 -:10437000030A1EE0010A09E0030A2FE101014E0EC3 -:10438000116F630E126F120E22D0C3DAF80EF626EA -:10439000630EA2DA020E0101F76A1125F66E1251C0 -:1043A000F7220900F5CF14F10A00F5CF15F112003C -:1043B000030E225D0FE2ADDAFA0EF626630E8CDAFA -:1043C00011C1F6FF12C1F7FF0800F5500101146F8B -:1043D000156B12000101136B12000101136B120027 -:1043E00011DA0401286B296B20511F0B020A11E01E -:1043F000030A0CE0010A22E10101138F0401288164 -:1044000001011F051BE10401288318D00101138F4E -:1044100015D00101138F040124BF05D00ADA070E5D -:10442000E926010E04D005DA0B0EE926010E38DA72 -:10443000E4D9EF50040B02E0010E286F010113AF25 -:1044400007D0280E116F040E126F1381020E146F25 -:10445000020EE15C02E2E16AE552E16ED7D16D98AD -:10446000010113BF08D018AF02D061DA2AD07EDA7A -:10447000BBD9840E27D018BF2BD0040120AF24D085 -:10448000010114510401265D010115510401275950 -:1044900004E226C414F127C415F11BD80101010E52 -:1044A000106FA1DA800EEF6E216BBED9EE52080EAE -:1044B000EF6E91DAB9D9840EEF6E010E216F8FDAAB -:1044C00093D9C80EEF6E1200010131DAC80EEF6EFB -:1044D000120098D90101080E145D000E15590DE265 -:1044E00014C1DEFF15C1DDFF0F5102E1010E03D043 -:1044F0000F0506E1020E0F6F03D0080EDE6EDD6AB7 -:1045000073D9EF9271D9EF906FD9010EDB50EF1292 -:104510006BD9EE52DFCFEFFF000EDB50145F010EC0 -:10452000DB50155B280E1D6F040E1E6F13B10FD0EC -:10453000F7D91BE011C1F6FF12C1F7FF112B000ED6 -:1045400012230800F55096D9F3E2DB06F1D7E8D93B -:104550000CE011C1E9FF12C1EAFF112B000E12237A -:10456000EF5088D9F4E2DB06F2D7020EE15C02E2FA -:10457000E16AE552E16E4AD145D956D9EE52EFCF04 -:10458000DFFFDFCF00F000500101195D000E1A5966 -:1045900003E219C1DFFF09D0DF50006E016AE85065 -:1045A000195D196F01501A591A6F010EDB6ADF503D -:1045B000F36E010EDBCFF4FFF350F45C10E2010E5A -:1045C000DB5082D916C1E9FF17C1EAFF162B000E96 -:1045D0001723E552E750EF6E010EDB2AE8... [truncated message content] |
From: Olivier B. <Ba...@us...> - 2010-02-24 20:41:10
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via b816f48eab76c6b03cde9297fdf561dd83168995 (commit) from 25eabbea383d06ad591978ba725b9e9b8081599f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b816f48eab76c6b03cde9297fdf561dd83168995 Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:40:25 2010 +0100 Try to fix direction consistency (2) ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index f053b69..0a1d694 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/lm629.h b/USB_Module/Motor_Controller/Firmware/lm629.h index 8ead717..c3040e9 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.h +++ b/USB_Module/Motor_Controller/Firmware/lm629.h @@ -25,8 +25,8 @@ #define ENCODER_RES 90 ///< Impulsions du codeur par tour de roue (prendre en compte le rcteur selon le cas !) #define WHEELS_DIAMETER 99 ///< Diame des roues (en mm) #define WHEELS_DIST 220 ///< Distance entre les 2 roues (en mm) -#define CON_MOTOR_LEFT 1 -#define CON_MOTOR_RIGHT -1 +#define CON_MOTOR_LEFT -1 +#define CON_MOTOR_RIGHT 1 /** * Parames par dult du correcteur. diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 83ad095..49d411b 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index 4ba8c6d..8dfdec7 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,144 +1,144 @@ :020000040000FA -:0600000007EF34F01200CE +:06000000F9EF33F01200DD :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:0608000007EF34F01200C6 +:06080000F9EF33F01200D5 :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A000400A1680000BB -:100830002601000021000000996800005F0100000F -:10084000080000008B680000470100000E00000057 -:0C085000886800006A010000030000003E +:06082A00040085680000D7 +:1008300026010000210000007D6800005F0100002B +:10084000080000006F680000470100000E00000073 +:0C0850006C6800006A010000030000005A :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD :10088000FACFE4FF00EE29F0140EE80403E3EECF04 :10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD7E2EC13F09EA013D0ECEC13F0C6 +:1008A000E4FFFBD7D4EC13F09EA013D0DEEC13F0E2 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E5023B1EC2CF01B -:1008D0009E90F5EC13F002E2E16AE552E16EE5521A +:1008C00005E34D6B4E6B4F2B000E5023A3EC2CF029 +:1008D0009E90E7EC13F002E2E16AE552E16EE55228 :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 :10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D :10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 :10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A :10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FFE2EC13F0F5EC13F002E285 +:10094000E4FFF4CFE4FFD4EC13F0E7EC13F002E2A1 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D894EC1FF060D8FCD766 -:100980000F0EC11202D85EEF1FF005EC14F0E65214 -:10099000B9EC13F00101676F070E675D10E1E66ABD -:1009A00021EC33F0E552DF6E000EDF80FDEC13F03A -:1009B000E66ADAEC33F0E552DF70FDEC13F0D08E2E +:10097000E5CFD8FF100004D886EC1FF060D8FCD774 +:100980000F0EC11202D850EF1FF0F7EC13F0E65231 +:10099000ABEC13F00101676F070E675D10E1E66ACB +:1009A00013EC33F0E552DF6E000EDF80EFEC13F056 +:1009B000E66ACCEC33F0E552DF70EFEC13F0D08E4A :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E94EC32F0E552B9 +:1009E000E66E7C0EE66EE10EE66E86EC32F0E552C7 :1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66E0AEC14F0E552838C8188828434 -:100A1000808A838E80888294010EE66E15EC34F015 -:100A2000E55282849D80C50EE66E6AEC33F0E55295 -:100A3000ECEC13F0E552E552E7CFD9FF1200D9CF25 +:100A0000010EE66EFCEC13F0E552838C8188828443 +:100A1000808A838E80888294010EE66E07EC34F023 +:100A2000E55282849D80C50EE66E5CEC33F0E552A3 +:100A3000DEEC13F0E552E552E7CFD9FF1200D9CF33 :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A5000FEEC12F0200E0101005D03E36D50020B6D -:100A600002E0F4EF12F0010149514A1102E1000ED7 +:100A5000F0EC12F0200E0101005D03E36D50020B7B +:100A600002E0E6EF12F0010149514A1102E1000EE5 :100A700008D049C1E9FF4AC1EAFFEF50800B01E00D :100A8000010E000947E101014651EA6A260FE96EAD :100A9000010EEA22EF5000083DE20501406B010122 :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66EAFEC23F0006E050EE15E0050F5 +:100AD000010EE66EA1EC23F0006E050EE15E005003 :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E18CEC1BF00009B0 +:100B300000092CE10101520529E17EEC1BF00009BE :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66EAFEC23F0006E050EE15E005054 +:100B7000010EE66EA1EC23F0006E050EE15E005062 :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EFDEC2DF0AC -:100BC000E55233EC17F0000904E00101020E516F09 +:100BB00013E0030A01E06ED0020EE66EEFEC2DF0BA +:100BC000E55225EC17F0000904E00101020E516F17 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66EB5EC3B +:100BE000C80EE66EE66AE80EE66E030EE66EA7EC49 :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486B090E006EFE -:100C4000650E016E026A00C0E6FF01C0E6FF02C049 -:100C5000E6FF480EE66E050EE66EE5EC32F0036E3A +:100C3000050E426F0501436B0501486BED0E006E1A +:100C4000640E016E026A00C0E6FF01C0E6FF02C04A +:100C5000E6FF480EE66E050EE66ED7EC32F0036E48 :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66EAFEC23F0006E3E +:100C7000E66E010EE66E010EE66EA1EC23F0006E4C :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66ACCEC9C +:100C9000516B02D00101516B020EE66EE66ABEECAA :100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66ECCEC16F0E552E552000902E00101C7 +:100CB000E66EBEEC16F0E552E552000902E00101D5 :100CC000516901014751481102E1000E08D047C1A6 :100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E0F4EF12F005010251070A02E155EFAC +:100CE00002E0E6EF12F005010251070A02E147EFC8 :100CF00012F00D0A01E148D2010A01E118D20D0AF1 :100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D1000B3EF12F0FF00F4EF12F0E66A21EC33F0CB -:100D2000E552DF6E000EDB80DFCFE6FFE66A01EC06 -:100D300033F0E552E552FF00F4EF12F001014951A2 +:100D1000A5EF12F0FF00E6EF12F0E66A13EC33F0F5 +:100D2000E552DF6E000EDB80DFCFE6FFE66AF3EC14 +:100D300032F0E552E552FF00E6EF12F001014951B1 :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 :100D5000EF50800B01E0010E000901E081D100C5D8 :100D600040F50501416B0501030E426F0501436B20 :100D7000050108510F0A01E110D1080A01E1BBD0B9 :100D8000010A01E17ED0020A71E0070A64E0010A6B :100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486BE50E006E640E016E026AD3 +:100DA00038D10501486BC90E006E640E016E026AEF :100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66EE5EC32F0036E050EE15E0350B3 -:100DD00020D10501486BD90E006E640E016E026AC7 +:100DC000050EE66ED7EC32F0036E050EE15E0350C1 +:100DD00020D10501486BBD0E006E640E016E026AE3 :100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66EE5EC32F0036E050EE15E035083 -:100E0000D70E006E640E016E026A00C0E6FF01C0DC -:100E1000E6FF02C0E6FF480EE66E050EE66EE5EC64 -:100E200032F0036E050EE15E0350CE0E006E640ECE +:100DF000050EE66ED7EC32F0036E050EE15E035091 +:100E0000BB0E006E640E016E026A00C0E6FF01C0F8 +:100E1000E6FF02C0E6FF480EE66E050EE66ED7EC72 +:100E200032F0036E050EE15E0350B20E006E640EEA :100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66EE5EC32F0036E050E1A +:100E4000480EE66E050EE66ED7EC32F0036E050E28 :100E5000E15E0350DED092CF48F593CF49F594CFB1 :100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA :100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A57EC2DF0E552010E2DC0DBFF0D +:100E8000C8D0E66A49EC2DF0E552010E2DC0DBFF1B :100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E :100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E57ECAA +:100EB000DBCF4AF5010EDBCF4BF5010EE66E49ECB8 :100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 :100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 :100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 -:100EF000DBCF4FF58ED00A0EE66EE66A5AEC14F0A0 -:100F0000E552E552E66ABEEC15F0E552030EF3CF6A -:100F1000DBFF040EF4CFDBFFE66ABEEC15F0E55212 +:100EF000DBCF4FF58ED00A0EE66EE66A4CEC14F0AE +:100F0000E552E552E66AB0EC15F0E552030EF3CF78 +:100F1000DBFF040EF4CFDBFFE66AB0EC15F0E55220 :100F2000DE52F3CFDEFFF4CFDDFFDD52040EDBCF68 :100F300048F5030EDBCF49F5020EDBCF4AF5010E73 -:100F4000DBCF4BF50A0EE66E010EE66E5AEC14F09E -:100F5000E552E552010EE66EBEEC15F0E552030EC9 -:100F6000F3CFDBFF040EF4CFDBFF010EE66EBEEC29 +:100F4000DBCF4BF50A0EE66E010EE66E4CEC14F0AC +:100F5000E552E552010EE66EB0EC15F0E552030ED7 +:100F6000F3CFDBFF040EF4CFDBFF010EE66EB0EC37 :100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 :100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A91EC18F030 +:100F90004EF5010EDBCF4FF53CD0E66A83EC18F03E :100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B :100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 :100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E91EC18F0E552010E2DC0B6 +:100FD0004BF5010EE66E83EC18F0E552010E2DC0C4 :100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 :100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D :10100000020EDBCF4EF5010EDBCF4FF50501020ED0 :10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66EAFEC23F0006E050EE15E9B +:10102000E66E010EE66EA1EC23F0006E050EE15EA9 :101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66EAFEC23F084 +:10104000E66E050EE66EE66A010EE66EA1EC23F092 :10105000006E050EE15E0050F3CF47F1F4CF48F18A -:10106000F4EF12F005010851030A37E0010A25E008 +:10106000E6EF12F005010851030A37E0010A25E016 :10107000030A13E0010A01E040D005010951921270 :1010800005010A51931205010B51941205010C51EF :10109000951205010D51961235D00501091D9216C4 @@ -147,98 +147,98 @@ :1010C00005010A1D8A1605010B1D8B1605010C1D55 :1010D0008C1605010D1D8D1615D0050109518912BB :1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66EA7EC82 +:1010F0008C1205010D518D1205D0030EE66E99EC90 :1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66EAFEC23F0006E050EE15EAE -:101120000050F3CF47F1F4CF48F1F4EF12F005018E +:10111000E66A010EE66EA1EC23F0006E050EE15EBC +:101120000050F3CF47F1F4CF48F1E6EF12F005019C :101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000FDEC2DF0E5520BD009C5E6FF0DEC2EF0BD -:10115000E55205D0010EE66EA7EC33F0E552400EE5 +:10114000EFEC2DF0E5520BD009C5E6FFFFEC2DF0DA +:10115000E55205D0010EE66E99EC33F0E552400EF3 :10116000E66E000EE66E050EE66EE66A010EE66EAF -:10117000AFEC23F0006E050EE15E0050F3CF47F1B7 -:10118000F4CF48F1F4EF12F005010851060A02E12C -:1011900014EF12F0080A02E1DAEF11F0030A02E19B -:1011A000D1EF11F0070A02E1A1EF10F0030A02E10A -:1011B0007EEF0EF0010A01E1D8D20F0A01E1C0D2A0 +:10117000A1EC23F0006E050EE15E0050F3CF47F1C5 +:10118000F4CF48F1E6EF12F005010851060A02E13A +:1011900006EF12F0080A02E1CCEF11F0030A02E1B7 +:1011A000C3EF11F0070A02E196EF10F0030A02E123 +:1011B00076EF0EF0010A01E1D8D20F0A01E1C0D2A8 :1011C000020A01E174D2010A01E142D2070A01E1F7 :1011D00010D2010A01E1DED1030A01E1ACD1010A1A :1011E00001E1A5D10C0A01E126D1030A01E194D065 -:1011F000040A02E03CEF12F00501095104E0020E7E -:101200000501095D40E10AC5E6FF010EE66E01EC4D -:1012100033F0E552E5520BC5E6FF020EE66E01EC37 -:1012200033F0E552E5520CC5E6FF030EE66E01EC25 -:1012300033F0E552E5520DC5E6FF040EE66E01EC13 -:1012400033F0E552E5520EC5E6FF050EE66E01EC01 -:1012500033F0E552E5520FC5E6FF060EE66E01ECEF -:1012600033F0E552E55210C5E6FF070EE66E01ECDD -:1012700033F0E552E55211C5E6FF080EE66E01ECCB -:1012800033F0E552E5520501090504E0020E0501BF -:10129000095D40E10AC5E6FF090EE66E01EC33F098 -:1012A000E552E5520BC5E6FF0A0EE66E01EC33F09F -:1012B000E552E5520CC5E6FF0B0EE66E01EC33F08D -:1012C000E552E5520DC5E6FF0C0EE66E01EC33F07B -:1012D000E552E5520EC5E6FF0D0EE66E01EC33F069 -:1012E000E552E5520FC5E6FF0E0EE66E01EC33F057 -:1012F000E552E55210C5E6FF0F0EE66E01EC33F045 -:10130000E552E55211C5E6FF100EE66E01EC33F032 -:10131000E552E55241EF12F000C540F50501416B81 -:101320000501030E426F0501436B010EE66E21ECD1 -:1013300033F0E5520501486F020EE66E21EC33F002 -:10134000E5520501496F030EE66E21EC33F0E552DC -:1013500005014A6F040EE66E21EC33F0E5520501FB -:101360004B6F050EE66E21EC33F0E55205014C6F34 -:10137000060EE66E21EC33F0E55205014D6F070EC7 -:10138000E66E21EC33F0E55205014E6F080EE66E75 -:1013900021EC33F0E55205014F6F090EE66E21ECAA -:1013A00033F0E5520501506F0A0EE66E21EC33F082 -:1013B000E5520501516F0B0EE66E21EC33F0E5525C -:1013C0000501526F0C0EE66E21EC33F0E55205017B -:1013D000536F0D0EE66E21EC33F0E5520501546FAC -:1013E0000E0EE66E21EC33F0E5520501556F0F0E3F -:1013F000E66E21EC33F0E5520501566F100EE66EF5 -:1014000021EC33F0E5520501576F400EE66E400EB9 -:10141000E66E050EE66E010EE66E010EE66EAFECB0 +:1011F000040A02E02EEF12F00501095104E0020E8C +:101200000501095D40E10AC5E6FF010EE66EF3EC5B +:1012100032F0E552E5520BC5E6FF020EE66EF3EC46 +:1012200032F0E552E5520CC5E6FF030EE66EF3EC34 +:1012300032F0E552E5520DC5E6FF040EE66EF3EC22 +:1012400032F0E552E5520EC5E6FF050EE66EF3EC10 +:1012500032F0E552E5520FC5E6FF060EE66EF3ECFE +:1012600032F0E552E55210C5E6FF070EE66EF3ECEC +:1012700032F0E552E55211C5E6FF080EE66EF3ECDA +:1012800032F0E552E5520501090504E0020E0501C0 +:10129000095D40E10AC5E6FF090EE66EF3EC32F0A7 +:1012A000E552E5520BC5E6FF0A0EE66EF3EC32F0AE +:1012B000E552E5520CC5E6FF0B0EE66EF3EC32F09C +:1012C000E552E5520DC5E6FF0C0EE66EF3EC32F08A +:1012D000E552E5520EC5E6FF0D0EE66EF3EC32F078 +:1012E000E552E5520FC5E6FF0E0EE66EF3EC32F066 +:1012F000E552E55210C5E6FF0F0EE66EF3EC32F054 +:10130000E552E55211C5E6FF100EE66EF3EC32F041 +:10131000E552E55233EF12F000C540F50501416B8F +:101320000501030E426F0501436B010EE66E13ECDF +:1013300033F0E5520501486F020EE66E13EC33F010 +:10134000E5520501496F030EE66E13EC33F0E552EA +:1013500005014A6F040EE66E13EC33F0E552050109 +:101360004B6F050EE66E13EC33F0E55205014C6F42 +:10137000060EE66E13EC33F0E55205014D6F070ED5 +:10138000E66E13EC33F0E55205014E6F080EE66E83 +:1013900013EC33F0E55205014F6F090EE66E13ECC6 +:1013A00033F0E5520501506F0A0EE66E13EC33F090 +:1013B000E5520501516F0B0EE66E13EC33F0E5526A +:1013C0000501526F0C0EE66E13EC33F0E552050189 +:1013D000536F0D0EE66E13EC33F0E5520501546FBA +:1013E0000E0EE66E13EC33F0E5520501556F0F0E4D +:1013F000E66E13EC33F0E5520501566F100EE66E03 +:1014000013EC33F0E5520501576F400EE66E400EC7 +:10141000E66E050EE66E010EE66E010EE66EA1ECBE :1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF141EF12F0030EE66E010EE66E01EC8A -:1014400033F0E552E552E80EE66E020EE66E01EC70 -:1014500033F0E552E552E66A030EE66E01EC33F036 -:10146000E552E552010EE66E040EE66E01EC33F035 -:10147000E552E552E66A050EE66E01EC33F0E55200 -:10148000E552E66A060EE66E01EC33F0E552E552EF -:10149000270EE66E070EE66E01EC33F0E552E552DC -:1014A000100EE66E080EE66E01EC33F0E552E552E2 -:1014B000030EE66E090EE66E01EC33F0E552E552DE -:1014C000E80EE66E0A0EE66E01EC33F0E552E552E8 -:1014D000E66A0B0EE66E01EC33F0E552E552010EC2 -:1014E000E66E0C0EE66E01EC33F0E552E552E66A6C -:1014F0000D0EE66E01EC33F0E552E552E66A0E0E93 -:10150000E66E01EC33F0E552E552270EE66E0F0E63 -:10151000E66E01EC33F0E552E552100EE66E100E69 -:10152000E66E01EC33F0E552E55241EF12F033EC98 -:1015300017F041EF12F0060E09C5DBFF050E0AC5D4 +:101430004AF133EF12F0030EE66E010EE66EF3ECA6 +:1014400032F0E552E552E80EE66E020EE66EF3EC7F +:1014500032F0E552E552E66A030EE66EF3EC32F046 +:10146000E552E552010EE66E040EE66EF3EC32F044 +:10147000E552E552E66A050EE66EF3EC32F0E5520F +:10148000E552E66A060EE66EF3EC32F0E552E552FE +:10149000270EE66E070EE66EF3EC32F0E552E552EB +:1014A000100EE66E080EE66EF3EC32F0E552E552F1 +:1014B000030EE66E090EE66EF3EC32F0E552E552ED +:1014C000E80EE66E0A0EE66EF3EC32F0E552E552F7 +:1014D000E66A0B0EE66EF3EC32F0E552E552010ED1 +:1014E000E66E0C0EE66EF3EC32F0E552E552E66A7B +:1014F0000D0EE66EF3EC32F0E552E552E66A0E0EA2 +:10150000E66EF3EC32F0E552E552270EE66E0F0E72 +:10151000E66EF3EC32F0E552E552100EE66E100E78 +:10152000E66EF3EC32F0E552E55233EF12F025ECC3 +:1015300017F033EF12F0060E09C5DBFF050E0AC5E2 :10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 :101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 :101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FFB5ECA0 +:10157000E6FF050EDBCFE6FF060EDBCFE6FFA7ECAE :1015800018F0006E060EE15E00500101010E526F70 -:1015900041EF12F0060E09C5DBFF050E0AC5DBFFA1 +:1015900033EF12F0060E09C5DBFF050E0AC5DBFFAF :1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 :1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF :1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FFBFEC18F013 -:1015E000006E060EE15E00500101010E526F41EFE8 +:1015D000050EDBCFE6FF060EDBCFE6FFB3EC18F01F +:1015E000006E060EE15E00500101010E526F33EFF6 :1015F00012F0060E09C5DBFF050E0AC5DBFF080E5B :101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC :10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E :10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FFCBEC18F0006E4B -:10164000060EE15E00500101010E526F41EF12F0F3 +:10163000DBCFE6FF060EDBCFE6FFBDEC18F0006E59 +:10164000060EE15E00500101010E526F33EF12F001 :10165000060E09C5DBFF050E0AC5DBFF080E0BC52C :10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 :101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 :10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FFD7EC18F0006E060E75 -:1016A000E15E00500101010E526F41EF12F0060E93 +:10169000E6FF060EDBCFE6FFC9EC18F0006E060E83 +:1016A000E15E00500101010E526F33EF12F0060EA1 :1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 :1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC :1016D000DBFF0C0E0FC5DBFF0B0E10C5DBFF0E0E84 @@ -246,1345 +246,1339 @@ :1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC :101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 :10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FFE3EC18F0006E42 -:101730000B0EE15E00500101010E526F41EF12F0FD +:10172000DBCFE6FF060EDBCFE6FFD5EC18F0006E50 +:101730000B0EE15E00500101010E526F33EF12F00B :10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF87EC18F0D3 -:10176000E552E552E55241EF12F0060E0AC5DBFFE5 +:10175000E6FF060EDBCFE6FF09C5E6FF79EC18F0E1 +:10176000E552E552E55233EF12F0060E0AC5DBFFF3 :10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 :10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 :101790000501095D02E0000E01D0010E000E0009F6 -:1017A00001E1E1D0090EDBCF2FF00A0EDBCF30F0E4 -:1017B00004EC25F02EC008F02FC009F030C00AF06C +:1017A00001E1D9D0090EDBCF2FF00A0EDBCF30F0EC +:1017B000F6EC24F02EC008F02FC009F030C00AF07B :1017C00031C00BF0A60E336E280E346E940E356EBB :1017D0003F0E366E08C02EF009C02FF00AC030F060 -:1017E0000BC031F01EEC26F02EC004F02FC005F027 +:1017E0000BC031F010EC26F02EC004F02FC005F035 :1017F00030C006F031C007F0CC0E336EBC0E346E34 :101800008C0E356E3B0E366E04C02EF005C02FF0E8 -:1018100006C030F007C031F01EEC26F0BAEC26F01E +:1018100006C030F007C031F010EC26F0ACEC26F03A :101820002DC000F02EC001F02FC002F030C003F038 :1018300000C0E6FF01C0E6FF02C0E6FF03C0E6FF0E -:10184000070EDBCF2FF0080EDBCF30F004EC25F0D5 +:10184000070EDBCF2FF0080EDBCF30F0F6EC24F0E4 :101850002EC014F02FC015F030C016F031C017F0B4 :10186000A60E336E280E346E940E356E3F0E366E15 :1018700014C02EF015C02FF016C030F017C031F094 -:101880001EEC26F02EC010F02FC011F030C012F068 +:1018800010EC26F02EC010F02FC011F030C012F076 :1018900031C013F0BD0E336E370E346E860E356ECA :1018A000410E366E10C02EF011C02FF012C030F075 -:1018B00013C031F01EEC26F0BAEC26F02DC00CF06F +:1018B00013C031F010EC26F0ACEC26F02DC00CF08B :1018C0002EC00DF02FC00EF030C00FF00CC0E6FFA0 :1018D0000DC0E6FF0EC0E6FF0FC0E6FF050EDBCF32 -:1018E0002FF0060EDBCF30F004EC25F02EC01CF0FC +:1018E0002FF0060EDBCF30F0F6EC24F02EC01CF00B :1018F0002FC01DF030C01EF031C01FF0A60E336E99 :10190000280E346E940E356E3F0E366E1CC02EF0CF -:101910001DC02FF01EC030F01FC031F01EEC26F0AD -:10192000BAEC26F02DC018F02EC019F02FC01AF016 -:1019300030C01BF0000E186C191E19221A1E1A2234 -:101940001B1E1B2218C0E6FF19C0E6FF1AC0E6FFE7 -:101950001BC0E6FF09C5E6FFB6EC17F0206E0D0EC2 -:10196000E15E2050C7D1020E0501095D04E00501CA -:10197000090501E0D8D0090EDBCF2FF00A0EDBCF2E -:1019800030F004EC25F02EC008F02FC009F030C074 -:101990000AF031C00BF0A60E336E280E346E940E92 -:1019A000356E3F0E366E08C02EF009C02FF00AC00B -:1019B00030F00BC031F01EEC26F02EC004F02FC02A -:1019C00005F030C006F031C007F0CC0E336EBC0E0F -:1019D000346E8C0E356E3B0E366E04C02EF005C094 -:1019E0002FF006C030F007C031F01EEC26F0BAEC44 -:1019F00026F02DC000F02EC001F02FC002F030C044 -:101A000003F000C0E6FF01C0E6FF02C0E6FF03C02E -:101A1000E6FF070EDBCF2FF0080EDBCF30F004EC33 -:101A200025F02EC014F02FC015F030C016F031C0D4 -:101A300017F0A60E336E280E346E940E356E3F0EE0 -:101A4000366E14C02EF015C02FF016C030F017C03F -:101A500031F01EEC26F02EC010F02FC011F030C077 -:101A600012F031C013F0BD0E336E370E346E860E99 -:101A7000356E410E366E10C02EF011C02FF012C020 -:101A800030F013C031F01EEC26F0BAEC26F02DC079 -:101A90000CF02EC00DF02FC00EF030C00FF00CC0B7 -:101AA000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E25 -:101AB000DBCF2FF0060EDBCF30F004EC25F02EC08C -:101AC0001CF02FC01DF030C01EF031C01FF0A60E5C -:101AD000336E280E346E940E356E3F0E366E1CC07B -:101AE0002EF01DC02FF01EC030F01FC031F01EECD4 -:101AF00026F0BAEC26F02DC018F02EC019F02FC039 -:101B00001AF030C01BF018C0E6FF19C0E6FF1AC07B -:101B1000E6FF1BC0E6FF010EE66EB6EC17F0206E86 +:101910001DC02FF01EC030F01FC031F010EC26F0BB +:10192000ACEC26F02DC018F02EC019F02FC01AF024 +:1019300030C01BF018C0E6FF19C0E6FF1AC0E6FF72 +:101940001BC0E6FF09C5E6FFA8EC17F0206E0D0EE0 +:10195000E15E2050C7D1020E0501095D04E00501DA +:10196000090501E0E0D0090EDBCF2FF00A0EDBCF36 +:1019700030F0F6EC24F02EC008F02FC009F030C093 +:101980000AF031C00BF0A60E336E280E346E940EA2 +:10199000356E3F0E366E08C02EF009C02FF00AC01B +:1019A00030F00BC031F010EC26F02EC004F02FC048 +:1019B00005F030C006F031C007F0CC0E336EBC0E1F +:1019C000346E8C0E356E3B0E366E04C02EF005C0A4 +:1019D0002FF006C030F007C031F010EC26F0ACEC70 +:1019E00026F02DC000F02EC001F02FC002F030C054 +:1019F00003F000C0E6FF01C0E6FF02C0E6FF03C03F +:101A0000E6FF070EDBCF2FF0080EDBCF30F0F6EC51 +:101A100024F02EC014F02FC015F030C016F031C0E5 +:101A200017F0A60E336E280E346E940E356E3F0EF0 +:101A3000366E14C02EF015C02FF016C030F017C04F +:101A400031F010EC26F02EC010F02FC011F030C095 +:101A500012F031C013F0BD0E336E370E346E860EA9 +:101A6000356E410E366E10C02EF011C02FF012C030 +:101A700030F013C031F010EC26F0ACEC26F02DC0A5 +:101A80000CF02EC00DF02FC00EF030C00FF00CC0C7 +:101A9000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E35 +:101AA000DBCF2FF0060EDBCF30F0F6EC24F02EC0AB +:101AB0001CF02FC01DF030C01EF031C01FF0A60E6C +:101AC000336E280E346E940E356E3F0E366E1CC08B +:101AD0002EF01DC02FF01EC030F01FC031F010ECF2 +:101AE00026F0ACEC26F02DC018F02EC019F02FC057 +:101AF0001AF030C01BF0000E186C191E19221A1EA5 +:101B00001A221B1E1B2218C0E6FF19C0E6FF1AC0CE +:101B1000E6FF1BC0E6FF010EE66EA8EC17F0206E94 :101B20000D0EE15E2050020E0501095D04E0050185 -:101B3000095101E0DFD0090EDBCF2FF00A0EDBCF19 -:101B400030F004EC25F02EC008F02FC009F030C0B2 +:101B3000095101E0D7D0090EDBCF2FF00A0EDBCF21 +:101B400030F0F6EC24F02EC008F02FC009F030C0C1 :101B50000AF031C00BF0A60E336E280E346E940ED0 :101B6000356E3F0E366E08C02EF009C02FF00AC049 -:101B700030F00BC031F01EEC26F02EC004F02FC068 +:101B700030F00BC031F010EC26F02EC004F02FC076 :101B800005F030C006F031C007F0CC0E336EBC0E4D :101B9000346E8C0E356E3B0E366E04C02EF005C0D2 -:101BA0002FF006C030F007C031F01EEC26F0BAEC82 +:101BA0002FF006C030F007C031F010EC26F0ACEC9E :101BB00026F02DC000F02EC001F02FC002F030C082 :101BC00003F000C0E6FF01C0E6FF02C0E6FF03C06D -:101BD000E6FF070EDBCF2FF0080EDBCF30F004EC72 -:101BE00025F02EC014F02FC015F030C016F031C013 +:101BD000E6FF070EDBCF2FF0080EDBCF30F0F6EC80 +:101BE00024F02EC014F02FC015F030C016F031C014 :101BF00017F0A60E336E280E346E940E356E3F0E1F :101C0000366E14C02EF015C02FF016C030F017C07D -:101C100031F01EEC26F02EC010F02FC011F030C0B5 +:101C100031F010EC26F02EC010F02FC011F030C0C3 :101C200012F031C013F0BD0E336E370E346E860ED7 :101C3000356E410E366E10C02EF011C02FF012C05E -:101C400030F013C031F01EEC26F0BAEC26F02DC0B7 +:101C400030F013C031F010EC26F0ACEC26F02DC0D3 :101C50000CF02EC00DF02FC00EF030C00FF00CC0F5 :101C6000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E63 -:101C7000DBCF2FF0060EDBCF30F004EC25F02EC0CA +:101C7000DBCF2FF0060EDBCF30F0F6EC24F02EC0D9 :101C80001CF02FC01DF030C01EF031C01FF0A60E9A :101C9000336E280E346E940E356E3F0E366E1CC0B9 -:101CA0002EF01DC02FF01EC030F01FC031F01EEC12 -:101CB00026F0BAEC26F02DC018F02EC019F02FC077 -:101CC0001AF030C01BF0000E186C191E19221A1ED3 -:101CD0001A221B1E1B2218C0E6FF19C0E6FF1AC0FD -:101CE000E6FF1BC0E6FFE66AB6EC17F0206E0D0EAD -:101CF000E15E20500101010E526FC3D3060E0AC5EA -:101D0000DBFF050E0BC5DBFF080E0CC5DBFF070E66 -:101D10000DC5DBFF020E0501095D02E0000E01D0DA -:101D2000010E000E000901E1AAD0FF0E05010E030D -:101D3000F350E66E070EDBCF2FF0080EDBCF30F04E -:101D400004EC25F02EC008F02FC009F030C00AF0D6 -:101D500031C00BF0A60E336E280E346E940E356E25 -:101D60003F0E366E08C02EF009C02FF00AC030F0CA -:101D70000BC031F01EEC26F02EC004F02FC005F091 -:101D800030C006F031C007F0CC0E336EBC0E346E9E -:101D90008C0E356E3B0E366E04C02EF005C02FF053 -:101DA00006C030F007C031F01EEC26F0BAEC26F089 -:101DB0002DC000F02EC001F02FC002F030C003F0A3 -:101DC00000C0E6FF01C0E6FF02C0E6FF03C0E6FF79 -:101DD000050EDBCF2FF0060EDBCF30F004EC25F044 -:101DE0002EC014F02FC015F030C016F031C017F01F -:101DF000A60E336E280E346E940E356E3F0E366E80 -:101E000014C02EF015C02FF016C030F017C031F0FE -:101E10001EEC26F02EC010F02FC011F030C012F0D2 -:101E200031C013F0BD0E336E370E346E860E356E34 -:101E3000410E366E10C02EF011C02FF012C030F0DF -:101E400013C031F01EEC26F0BAEC26F02DC00CF0D9 -:101E50002EC00DF02FC00EF030C00FF00CC0E6FF0A -:101E60000DC0E6FF0EC0E6FF0FC0E6FF09C5E6FFA6 -:101E7000F8EC17F0186E0A0EE15E18505ED1020EF3 -:101E80000501095D04E00501090501E0A6D00EC5C4 -:101E9000E6FF070EDBCF2FF0080EDBCF30F004ECAF -:101EA00025F02EC008F02FC009F030C00AF031C074 -:101EB0000BF0A60E336E280E346E940E356E3F0E68 -:101EC000366E08C02EF009C02FF00AC030F00BC0EB -:101ED00031F01EEC26F02EC004F02FC005F030C00B -:101EE00006F031C007F0CC0E336EBC0E346E8C0E93 -:101EF000356E3B0E366E04C02EF005C02FF006C0C6 -:101F000030F007C031F01EEC26F0BAEC26F02DC000 -:101F100000F02EC001F02FC002F030C003F000C06E -:101F2000E6FF01C0E6FF02C0E6FF03C0E6FF050EC4 -:101F3000DBCF2FF0060EDBCF30F004EC25F02EC007 -:101F400014F02FC015F030C016F031C017F0A60EF7 -:101F5000336E280E346E940E356E3F0E366E14C0FE -:101F60002EF015C02FF016C030F017C031F01EEC67 -:101F700026F02EC010F02FC011F030C012F031C08A -:101F800013F0BD0E336E370E346E860E356E410E75 -:101F9000366E10C02EF011C02FF012C030F013C0FA -:101FA00031F01EEC26F0BAEC26F02DC00CF02EC05D -:101FB0000DF02FC00EF030C00FF00CC0E6FF0DC0CA -:101FC000E6FF0EC0E6FF0FC0E6FF010EE66EF8EC7E -:101FD00017F0186E0A0EE15E1850020E0501095D39 -:101FE00004E00501095101E0A8D0FF0E05010E0330 -:101FF000F350E66E070EDBCF2FF0080EDBCF30F08C -:1020000004EC25F02EC008F02FC009F030C00AF013 -:1020100031C00BF0A60E336E280E346E940E356E62 -:102020003F0E366E08C02EF009C02FF00AC030F007 -:102030000BC031F01EEC26F02EC004F02FC005F0CE -:1020400030C006F031C007F0CC0E336EBC0E346EDB -:102050008C0E356E3B0E366E04C02EF005C02FF090 -:1020600006C030F007C031F01EEC26F0BAEC26F0C6 -:102070002DC000F02EC001F02FC002F030C003F0E0 -:1020800000C0E6FF01C0E6FF02C0E6FF03C0E6FFB6 -:10209000050EDBCF2FF0060EDBCF30F004EC25F081 -:1020A0002EC014F02FC015F030C016F031C017F05C -:1020B000A60E336E280E346E940E356E3F0E366EBD -:1020C00014C02EF015C02FF016C030F017C031F03C -:1020D0001EEC26F02EC010F02FC011F030C012F010 -:1020E00031C013F0BD0E336E370E346E860E356E72 -:1020F000410E366E10C02EF011C02FF012C030F01D -:1021000013C031F01EEC26F0BAEC26F02DC00CF016 -:102110002EC00DF02FC00EF030C00FF00CC0E6FF47 -:102120000DC0E6FF0EC0E6FF0FC0E6FFE66AF8EC62 -:1021300017F0186E0A0EE15E18500101010E526F81 -:10214000A0D1060E0AC5DBFF050E0BC5DBFF020E94 -:102150000501095D02E0000E01D0010E000E00092C -:102160005CE0FF0E05010C03F350E66E050EDBCFBD -:102170002FF0060EDBCF30F004EC25F02EC008F077 -:102180002FC009F030C00AF031C00BF0A60E336E3C -:10219000280E346E940E356E3F0E366E08C02EF04B -:1021A00009C02FF00AC030F00BC031F01EEC26F051 -:1021B0002EC004F02FC005F030C006F031C007F08B -:1021C000BD0E336E370E346E860E356E410E366E92 -:1021D00004C02EF005C02FF006C030F007C031F06B -:1021E0001EEC26F0BAEC26F02DC000F02EC001F057 -:1021F0002FC002F030C003F000C0E6FF01C0E6FFD0 -:1022000002C0E6FF03C0E6FF09C5E6FF3CEC18F09C -:102210000C6E060EE15E0C50C0D0020E0501095D89 -:1022200003E00501090558E10CC5E6FF050EDBCF0B -:102230002FF0060EDBCF30F004EC25F02EC008F0B6 -:102240002FC009F030C00AF031C00BF0A60E336E7B -:10225000280E346E940E356E3F0E366E08C02EF08A -:1022600009C02FF00AC030F00BC031F01EEC26F090 -:102270002EC004F02FC005F030C006F031C007F0CA -:10228000BD0E336E370E346E860E356E410E366ED1 -:1022900004C02EF005C02FF006C030F007C031F0AA -:1022A0001EEC26F0BAEC26F02DC000F02EC001F096 -:1022B0002FC002F030C003F000C0E6FF01C0E6FF0F -:1022C00002C0E6FF03C0E6FF010EE66E3CEC18F02C -:1022D0000C6E060EE15E0C50020E0501095D03E076 -:1022E000050109515AE1FF0E05010C03F350E66E9A -:1022F000050EDBCF2FF0060EDBCF30F004EC25F01F -:102300002EC008F02FC009F030C00AF031C00BF029 -:10231000A60E336E280E346E940E356E3F0E366E5A -:1023200008C02EF009C02FF00AC030F00BC031F009 -:102330001EEC26F02EC004F02FC005F030C006F0D1 -:1023400031C007F0BD0E336E370E346E860E356E1B -:10235000410E366E04C02EF005C02FF006C030F0DE -:1023600007C031F01EEC26F0BAEC26F02DC000F0CC -:102370002EC001F02FC002F030C003F000C0E6FF15 -:1023800001C0E6FF02C0E6FF03C0E6FFE66A3CECE0 -:1023900018F00C6E060EE15E0C500101010E526F3A -:1023A00070D009C5E6FF54EC18F0E5520101010EAA -:1023B000526F67D05FEC1BF0050EF3CFDBFF060E0C -:1023C000F4CFDBFF75EC1BF0070EF3CFDBFF080E3D -:1023D000F4CFDBFF00C540F50501416B0501030E9D -:1023E000426F0501436B060EDBCF48F5050EDBCFD0 -:1023F00049F5080EDBCF4AF5070EDBCF4BF5400E53 -:10240000E66E400EE66E050EE66E010EE66E010EFD -:10241000E66EAFEC23F0006E050EE15E0050F3CFE8 -:1024200049F1F4CF4AF12DD000C540F50501416BCB -:102430000501030E426F0501436B8CEC1BF0000994 -:1024400004E00501010E486F02D00501486B400E03 -:10245000E66E400EE66E050EE66E010EE66E010EAD -:10246000E66EAFEC23F0006E050EE15E0050F3CF98 -:1024700049F1F4CF4AF105D0010EE66EA7EC33F036 -:10248000E552400EE66E000EE66E050EE66EE66A5A -:10249000010EE66EAFEC23F0006E050EE15E00501B -:1024A000F3CF47F1F4CF48F19FD0010149514A11D0 -:1024B00002E1000E08D049C1E9FF4AC1EAFFEF502E -:1024C000800B01E0010E00094DE10101010E516F89 -:1024D0000501406B01014C514C2B0501416F050179 -:1024E000050E426F0501436B0501486BBA0E006E85 -:1024F000640E016E026A00C0E6FF01C0E6FF02C082 -:10250000E6FF480EE66E050EE66EE5EC32F0036E71 -:10251000050EE15E0350400EE66E400EE66E050EBF -:10252000E66E010EE66E010EE66EAFEC23F0006E75 -:10253000050EE15E0050F3CF49F1F4CF4AF1400EB1 -:10254000E66E000EE66E050EE66EE66A010EE66EBB -:10255000AFEC23F0006E050EE15E0050F3CF47F1C3 -:10256000F4CF48F141D0010149514A1102E1000E76 -:1025700008D049C1E9FF4AC1EAFFEF50800B01E0F2 -:10258000010E000931E100C540F50501416B05016F -:10259000030E426F0501010E436F400EE66E400EC2 -:1025A000E66E050EE66E010EE66E010EE66EAFEC0F -:1025B00023F0006E050EE15E0050F3CF49F1F4CF39 -:1025C0004AF1400EE66E000EE66E050EE66EE66A15 -:1025D000010EE66EAFEC23F0006E050EE15E0050DA -:1025E000F3CF47F1F4CF48F10F0EE15C02E2E16A6C -:1025F000E552E16EE552E7CFD9FF120001015351D8 -:10260000541104E1100E536F270E546F5307000E40 -:10261000545B6DA207D0535154112EE18C748CB4CD -:1026200013D027D00101005102E18C9422D0000583 -:1026300002E18C8409D0020E005D02E18C8419D085 -:10264000040E005D03E18C948C861200100E005D78 -:1026500006E10101535154110FE18C740AD0200E90 -:10266000005D0AE101015351541106E18C748CA400 -:1026700002D08C9612008C861200120012001200FA -:1026800012004EEF31F012001E0EE66E010EE66EE5 -:102690007DEC23F0E552E552400EE66E000EE66E4C -:1026A000050EE66EE66A010EE66EAFEC23F0006EF4 -:1026B000050EE15E0050F3CF47F1F4CF48F1120070 -:1026C0006D840101080E686F070E696F6807000EC0 -:1026D000695B68516911FAE16D941200D9CFE6FF88 -:1026E000E1CFD9FFFD0EDBCF2FF0FE0EDBCF30F0B8 -:1026F000010E2F1801E1305033E0E8682F1802E195 -:10270000E86830182BE0030E2F1801E1305024E068 -:10271000040E2F1801E130501DE0020E2F1801E1C8 -:10272000305016E0170E2F1801E130500FE0160E52 -:102730002F1801E1305008E0150E2F1801E130503C -:1027400001E010D0A1DF0FD09EDF0DD09ADF0BD0BB -:1027500096DF09D092DF07D091DF05D091DF03D05B -:10276000000001D000D0010E00D0E552E7CFD9FF24 -:1027700012004BD8E652D0B202D0010E15D0D0B81C -:1027800002D0020E11D0D0B002D0030E0DD0D0B6C0 -:1027900002D0040E09D0FCAE02D0050E05D0FCAC70 -:1027A00002D0060E01D0070EDF6ED088D086D0840E -:1027B000D082D080FC9EFC9CDF50E552E552E7CFF2 -:1027C000D9FF1200E65221D8020EE126F350DF6E47 -:1027D000010EF4CFDBFF1200C00EE66EE00EE66ED7 -:1027E0008BEC33F0E552E5521200DF50F36E010E30 -:1027F000DB50F46E020EE15C1200DFCFE6FFE66A0A -:1028000001EC33F0E552E5521200D9CFE6FFE1CFFB -:04281000D9FF1200DA -:0C2814009AEC1CF0FE0EDB5006E1F80E02 -:1028200096163C0E9416959808D0FE0EDB0405E132 -:10283000070E9612C30E941295889FEF1CF0D9CF05 -:10284000E6FFE1CFD9FFE652010EE66EE3DFE55287 -:10285000809AFE0EDB5004E0FE0EDB5002080FE112 -:10286000839C81880000839E00000000000084504B -:10287000010BDF6E838E00000000DF04F4E0FE0E2B -:10288000DB0404E0FE0EDB5002080FE1838C81982C -:102890000000839E0000000000008450010BDF6EEA -:1028A000838E00000000DF04F4E0E552E552E7CF3C -:1028B000D9FF1200D9CFE6FFE1CFD9FFE652FD0ED6 -:1028C000DB50DF6EFE0EDBCFE6FFB9DFE552E66AD6 -:1028D000A1DFE552FE0EDB5003E1839C81880CD022 -:1028E000FE0EDB0403E1838C819806D0FE0EDB50E4 -:1028F000020802E1839C8198809A00008098D9CFD9 -:10290000E9FFDACFEAFFEF50010B02E0848001D04B -:102910008490D9CFE9FFDACFEAFFEF50020B02E053 -:10292000848201D08492D9CFE9FFDACFEAFFEF5059 -:10293000040B02E0848401D08494D9CFE9FFDACF7C -:10294000EAFFEF50080B02E0838801D08398D9CFCB -:10295000E9FFDACFEAFFEF50100B02E0828201D0EC -:102960008292D9CFE9FFDACFEAFFEF50200B02E0E5 -:10297000828E01D0829ED9CFE9FFDACFEAFFEF50F5 -:10298000400B02E0828001D08290D9CFE9FFDACFFC -:10299000EAFFEF50800B02E0828C01D0829C0000A5 -:1029A0000000808800000000E552E552E7CFD9FF23 -:1029B0001200D9CFE6FFE1CFD9FF020EE126FC0ECF -:1029C000DBCFDEFFDBCFDDFFFE0EDBCFE6FF37DF49 -:1029D000E552E66A1FDFE552FE0EDB5003E1839C01 -:1029E00081880CD0FE0EDB0403E1838C819806D035 -:1029F000FE0EDB50020802E1839C8198808A000071 -:102A00008098D9CFE9FFDACFEAFFEE52EF50010B01 -:102A100002E0848001D08490D9CFE9FFDACFEAFFC9 -:102A2000EE52EF50020B02E0848201D08492D9CFA3 -:102A3000E9FFDACFEAFFEE52EF50040B02E08484A4 -:102A400001D08494D9CFE9FFDACFEAFFEE52EF50FC -:102A5000080B02E0838801D08398D9CFE9FFDACF51 -:102A6000EAFFEE52EF50100B02E0828201D0829218 -:102A7000D9CFE9FFDACFEAFFEE52EF50200B02E0A8 -:102A8000828E01D0829ED9CFE9FFDACFEAFFEE52E3 -:102A9000EF50400B02E0828001D08290D9CFE9FF55 -:102AA000DACFEAFFEE52EF50800B02E0828C01D0C9 -:102AB000829C000000008088000000008098D9CF30 -:102AC000E9FFDACFEAFFEF50010B02E0848001D08A -:102AD0008490D9CFE9FFDACFEAFFEF50020B02E092 -:102AE000848201D08492D9CFE9FFDACFEAFFEF5098 -:102AF000040B02E0848401D08494D9CFE9FFDACFBB -:102B0000EAFFEF50080B02E0838801D08398D9CF09 -:102B1000E9FFDACFEAFFEF50100B02E0828201D02A -:102B20008292D9CFE9FFDACFEAFFEF50200B02E023 -:102B3000828E01D0829ED9CFE9FFDACFEAFFEF5033 -:102B4000400B02E0828001D08290D9CFE9FFDACF3A -:102B5000EAFFEF50800B02E0828C01D0829C0000E3 -:102B60000000808800000000020EE15C02E2E16AE1 -:102B7000E552E16EE552E7CFD9FF1200D9CFE6FF6B -:102B8000E1CFD9FF020EE126FE0EDBCFE6FF57DED6 -:102B9000E552010EE66E3EDEE552FE0EDB5003E12D -:102BA000839C818805D0FE0EDB0402E1838C819832 -:102BB000808A0000839E0000000000008450010B0A -:102BC000066E8450020B01E0010EE824056E84506D -:102BD000040B01E0010E040DF3CF04F08350100B41 -:102BE00001E0010E080DF3CF03F08250020B01E06B -:102BF000010E100DF3CF02F08250800B01E0010EA8 -:102C0000200DF3CF01F08250010B400DF3CF00F007 -:102C10008250400B01E0010E800DF35000100110B6 -:102C200002100310041005100610E76E010EE7CF26 -:102C3000DBFF838E00000000839E00000000000088 -:102C40008450010B066E8450020B01E0010EE82453 -:102C5000056E8450040B01E0010E040DF3CF04F067 -:102C60008350100B01E0010E080DF3CF03F08250EA -:102C7000020B01E0010E100DF3CF02F08250800B29 -:102C800001E0010E200DF3CF01F08250010B400D49 -:102C9000F3CF00F08250400B01E0010E800DF350A5 -:102CA0000010011002100310041005100610DF6E52 -:102CB000838EDECF00F0DDCF01F000C0F3FF01C056 -:102CC000F4FF00D0020EE15C02E2E16AE552E16E3F -:102CD000E552E7CFD9FF1200D9CFE6FFE1CFD9FF08 -:102CE000E652DF6AFE0EDBCFE6FFA9DDE552010EFC -:102CF000E66E90DDE552FE0EDB5003E1839C818899 -:102D000005D0FE0EDB0402E1838C8198809A0000DE -:102D1000839E0000000000008450010B066E84506A -:102D2000020B01E0010EE824056E8450040B01E063 -:102D3000010E040DF3CF04F08350100B01E0010EDF -:102D4000080DF3CF03F08250020B01E0010E100DCD -:102D5000F3CF02F08250800B01E0010E200DF3CF83 -:102D600001F08250010B400DF3CF00F08250400B78 -:102D700001E0010E800DF35000100110021003104D -:102D8000041005100610DF6E838EDF5000D0E55270 -:102D9000E552E7CFD9FF12009AEC1CF0E652DF6A49 -:102DA00000EC1DF0DF6EFD0EDB50DF14DF6EDF5038 -:102DB00002E0010E01D0000EE5529FEF1CF09AECEC -:102DC0001CF01D0E65EC1CF0000E7EEC1EF09FEF5B -:102DD0001CF09AEC1CF000EC1DF084080FE000ECF5 -:102DE0001DF0C4080BE0E66A87EC1EF042EC1EF012 -:102DF000020EE66EDAEC33F0E552EDD71C0E65EC10 -:102E00001CF00A0E7EEC1EF053EC1DF000EC1DF0E1 -:102E1000800804E000EC1DF0C008E5E100EC1DF0C6 -:102E2000C00802E153EC1DF01E0E65EC1CF00F0E05 -:102E30007EEC1EF028EC1FF0FA0EDBCFE6FFFB0E57 -:102E4000F2EC1DF0F80EDBCFE6FFF90EF2EC1DF010 -:102E5000F60EDBCFE6FFF70EF2EC1DF0040E65EC8C -:102E60001CF09FEF1CF09AEC1CF0080EE126010EFE -:102E700097EC1CF0010EE7CFDBFF020EA3EC1EF077 -:102E8000DF6E030E97EC1CF0030EE7CFDBFF040EA2 -:102E900097EC1CF0020EE7CFDBFF050E97EC1CF061 -:102EA000050EE7CFDBFF060E97EC1CF0040EE7CF14 -:102EB000DBFF070E97EC1CF0070EE7CFDBFF080ED9 -:102EC00097EC1CF0CCEC1CF0E66A58EC1DF0090EF7 -:102ED00097EC1CF0010EE7CFDBFF0A0EA3EC1EF00F -:102EE000DF6E0B0E97EC1CF0030EE7CFDBFF0C0E32 -:102EF00097EC1CF0020EE7CFDBFF0D0E97EC1CF0F9 -:102F0000050EE7CFDBFF0E0E97EC1CF0040EE7CFAB -:102F1000DBFF0F0E97EC1CF0070EE7CFDBFF100E68 -:102F200097EC1CF0CCEC1CF0010EE66E58EC1DF09A -:102F3000020EE66E4BEC1DF0020EE66EE66A3EEC0B -:102F40001DF007E1020EE66E010EE66E3EEC1DF08E -:102F500002E0000E01D0010E006E080EE15C02E2FC -:102F6000E16AE552E16E00509FEF1CF09AEC1CF014 -:102F70000C0EA3EC1CF0D950F20F82EC1EF0080EE0 -:102F8000EECFDBFF090EEECFDBFF0A0EEECFDBFF4D -:102F90000B0EEECFDBFF1F0E65EC1CF044EC1DF0BA -:102FA0000A0EDBCF02F00B0E5FEC1DF010E02B0ED3 -:102FB0007EEC1EF00A0EDBCFE6FF0B0EF2EC1DF0EE -:102FC000080EDBCFE6FF090EDBCFE6FF03D00B0ECA -:102FD000E66EE66AF7EC1EF0F2EC1DF002EC1FF074 -:102FE0000C0EE15C02E2E16AE552E16E9FEF1CF03B -:102FF0009AEC1CF00A0EA3EC1CF0080EDB6A090E1A -:10300000DB6A1F0E65EC1CF0F50EDBCF00F0003420 -:1030100007E2080EDB6A100EF36E090EF3CFDBFF3A -:10302000040EDBCF00F0050EDBCF01F0060EDBCF88 -:1030300002F0070E5FEC1DF00DE044EC1DF0280ED1 -:103040000012080E01126DEC1DF0F7EC1EF0DBCF44 -:10305000E6FF07D044EC1DF0080E001201126DECE3 -:103060001DF0F6DB02EC1FF00A0EE15C02E2E16A01 -:10307000E552E16E9FEF1CF09AEC1CF0F90EDBCFED -:10308000E6FFE66AE66AE66AE66AD950FA0F82EC7B -:103090001EF009EC1FF087EC1EF0AADF006E0A0E8E -:1030A000E15E00509FEF1CF09AEC1CF0FE0EDB502E -:1030B00004E0FE0EDB5002080FE12EEC1FF092EC54 -:1030C0001EF0F3CF61F1F4CF62F1E66A92EC1EF0EC -:1030D000F3CF5FF1F4CF60F1FE0EDB0404E0FE0EEF -:1030E000DB50020810E18BEC1EF092EC1EF0F3CFE7 -:1030F00065F1F4CF66F1010EE66E92EC1EF0F3CFAF -:1031000063F1F4CF64F1010EE0DB9FEF1CF09AEC69 -:103110001CF01F0EDADB28EC1FF0010ED6DB9FEF50 -:103120001CF0A8EC1EF0FE0EDB50020805E12D6A33 -:103130002E6A2F6A306A12D00B0EC7DB87EC1EF0A6 -:103140000DEC1DF0DE6ADD6ADECF2DF0DECF2EF055 -:10315000DECF2FF0DDCF30F0DD52DD52040EE15C2A -:1031600002E2E16AE552E16EEAD347EC1EF005ECBB -:103170001DF04CEC1EF098DBE5EC1CF0E0D347ECC6 -:103180001EF092DBE66AF2DE4CEC1EF0B9EC1EF0AB -:10319000E5EC1CF0D4D334EC1FF086DBE66AE6DE07 -:1031A0004EEC1DF08BEC1DF07FDB18EF1EF034ECC5 -:1031B0001FF005EC1DF04EEC1DF08BEC1DF0B9EC92 -:1031C0001EF018EF1EF0B6DB3C0EE126E4EC1DF01D -:1031D000C6EC1EF0E4EC1DF012EC1FF0BDEC1EF08E -:1031E00008C02EF009C02FF00AC030F00BC031F03B -:1031F0001EEC26F0E5EC1EF030EC1EF0CFEC1EF0DD -:10320000EEEC1EF030EC1EF01BEC1DF0BDEC1EF0E1 -:1032100014C02EF015C02FF016C030F017C031F0DA -:103220001EEC26F002EC1EF0DCEC1EF035EC25F076 -:10323000B0EC1EF0336A346A800E356EACEC1EF0D2 -:10324000380E2EC0DBFF390E2FC0DBFF3A0E30C028 -:10325000DBFF3B0E31C0DBFFE4EC1DF0B0EC1EF0F9 -:10326000D8DB30EC1EF042DBD4DB7DEC2EF0086EB8 -:10327000080EE15E0850080E2DC0DBFF090E2EC0BF -:10328000DBFF0A0E2FC0DBFF0B0E30C0DBFFCDDBF8 -:10329000F60EDB5007E0D950F40F82EC1EF0EE5032 -:1032A000ED103AE171DB080EDBCF0EF0090EDBCF3B -:1032B0000FF00A0EDBCF10F00B0E58DA3ADA23ECDF -:1032C0001EF02E6A2F6A800E306E400E316E380E60 -:1032D000DBCF33F0390EDBCF34F03A0EDBCF35F0F5 -:1032E0003B0E24EC1FF050EC1EF093DB3BEC1EF089 -:1032F0002DC002F02EC003F02FC004F030C005F046 -:103300002DC02EF09CEC1EF035EC1EF02EDF0A6E68 -:10331000060EE15E0A50CCD1380EDBCF04F0390E38 -:10332000DBCF05F03A0EDBCF06F03B0EDBCF07F02C -:103330000C6A0D6A0E6A400E0F6E91DA1EEC26F0D2 -:10334000B0EC1DF0F40EDBCF2FF0F50E74DB87DB55 -:10335000FFEC1DF035EC25F0140E2EC0DBFF150E32 -:103360002FC0DBFF160E30C0DBFF170E2EDAE4ECA9 -:103370001DF0FFEC1DF01EEC26F0180E2EC0DBFF3A -:10338000190E2FC0DBFF1A0E30C0DBFF1B0E1DDA3B -:1033900030EC1EF0CFEC1EF0FFEC1DF01EEC26F022 -:1033A0001C0E2EC0DBFF1D0E2FC0DBFF1E0E30C01B -:1033B000DBFF1F0E31C0DBFF1C0EDBCF00F01D0E4C -:1033C000DBCF01F01E0EDBCF02F01F0EDBCF03F0D0 -:1033D0007DDBF6EC1DF01EEC26F0200E2EC0DBFF90 -:1033E000210E2FC0DBFF220E30C0DBFF230E31C0C9 -:1033F000DBFFD950180FE96EDACFEAFF240EEECFCB -:10340000DBFF250EEECFDBFF260EEECFDBFF270E18 -:10341000EECFDBFFFD0EDBCF2FF0FE0E52EC1FF0E8 -:10342000200EDBCF33F0210EDBCF34F0220EDBCFCA -:1034300035F0230EEADB280E2EC0DBFF290E2FC04D -:10344000DBFF2A0E30C0DBFF2B0E31C0DBFF30EC80 -:103450001EF052EC1FF0240EDBCF33F0250EDBCF35 -:1034600034F0260EDBCF35F0270ECFDB2C0E2EC02E -:10347000DBFF2D0E2FC0DBFF2E0E30C0DBFF2F0E2B -:1034800031C0DBFF2C0EDBCF04F02D0EDBCF05F0BF -:103490002E0EDBCF06F02F0EDBCF07F017DBDCECB8 -:1034A0001EF01EEC26F09CDA300E2EC0DBFF310E33 -:1034B0002FC0DBFF320E30C0DBFF330E31C0DBFF2D -:1034C000280EDBCF2EF0290EDBCF2FF02A0EDBCF1C -:1034D00030F02B0EDBCF31F083DA340E2EC0DBFF61 -:1034E000350E2FC0DBFF360E30C0DBFF370E31C08C -:1034F000DBFFD950300F63DBD950340F60DB7DEC3C -:103500002EF0006E080EE15E00500C0E2DC0DBFFA9 -:103510000D0E2EC0DBFF0E0E2FC0DBFF0F0E30C0D6 -:10352000DBFF006A016A026A400E036ED6DA02C04F -:10353000E6FFE66E35DBC6EC1EF06BDA38EC1FF00A -:103540002DC014F02EC015F02FC016F030C017F0AB -:10355000B9EC1EF07DEC2EF0186E080EE15E1850EE -:10356000E552E7CF03F0E552E7CF02F0E552E7CFAF -:1035700001F0E552E7CF00F02DC004F02EC005F0B9 -:103580002FC006F030C007F094DB30DB1EEC26F0D5 -:10359000100E2EC0DBFF110E2FC0DBFF120E30C04D -:1035A000DBFF130E31C0DBFFF60EDB5002081BE120 -:1035B00031DB34EC25F086DB35EC25F08AD945DAB1 -:1035C000060E2FC0DBFF070E30C0DBFF000EDFCF83 -:1035D0002FF0010E8BD97DDBC3DAFCDA040E2FC08D -:1035E000DBFF050E4ED02E6A2F6A306A400E316E18 -:1035F000080EDBCF33F0090EDBCF34F00A0EDBCF41 -:1036000035F00B0E24EC1FF0ABDB0C0EDBCF04F01F -:103610000D0EDBCF05F00E0EDBCF06F00F0EDBCF6D -:1036200007F004C033F005C034F006C035F007C021 -:1036300036F034EC25F00C0E2EC0DBFF0D0E2FC043 -:10364000DBFF0E0E30C0DBFF0F0E31C0DBFFE2DA16 -:1036500035EC25F037DB34EC25F03BD9F6D9040EF8 -:103660002FC0DBFF050E30C0DBFF020EDBCF2FF0DB -:10367000030E3CD934DB74DAADDA060E2FC0DBFF63 -:10368000070E30C0DBFF55D809D9040EDBCF2FF071 -:10369000050E28DA24DB57D8B8D9F6DBFFD8060E9A -:1036A000DBCF2FF0070E1EDA14DB4DD8FDD88DD9F5 -:1036B0003C0EE15C02E2E16AE552E16E40D148DB9A -:1036C000CDDBABD9E66AD0D901015F51EE5C066E65 -:1036D0006051EE58076E6151EE58086E625109D97B -:1036E00002E2E16AE552E16E2AD132DB14DB95D9C0 -:1036F000010EE66EB9D901016351EE5C066E6451AC -:10370000EE58076E6551EE58086E6651F2D802E227 -:10371000E16AE552E16E13D1040EE66EE66AAED9B7 -:1037200006E0040EE66E010EE66EA8D901E1000C7B -:10373000010CF2DF0009FDE01200ABDB18DA90DAD1 -:10374000D1D9E4EF1DF02EC01CF02FC01DF030C009 -:103750001EF031C01FF027DBA1DB2DC018F02EC0FA -:1037600019F02FC01AF030C01BF01200DBCF11F09F -:10377000336A346A340E356E430E366E0EC02EF048 -:103780000FC02FF010C030F011C031F01EEC26F049 -:103790002EC00AF02FC00BF030C00CF031C00DF07D -:1037A000DB0E336E0F0E346E490E356ED5DA78DAD5 -:1037B000E4DA02C02EF0C0DA34EC25F056DAEBDCA5 -:1037C000126E060EE15E1250120031C0DBFF046A79 -:1037D000056A800E066E3F0E076E0C6A0D6A0E6A51 -:1037E000400E0F6E04C0E6FF05C0E6FF06C0E6FF10 -:1037F00007C0E6FF0CC0E6FF0DC0E6FF0EC0E6FF07 -:10380000E66E36DBE552E7CF0FF0E552E7CF0EF07C -:10381000E552E7CF0DF0E552E7CF0CF0E552E7CFE8 -:1038200007F0E552E7CF06F0E552E7CF05F0E552A5 -:10383000E7CF04F02DC010F02EC011F02FC012F011 -:1038400030C013F036DA51DA1EEC26F0B0EF1DF07E -:103850005EDAD9EC14F0E552E552E5521200F40EAE -:10386000DBCF2FF0F50E9BDACDD975EF1EF085DAA0 -:10387000F6EF1DF0140EDBCF00F0150EDBCF01F0DC -:10388000160EDBCF02F0170EDBCF03F0336A346A7B -:10389000DC0E356E420E366EF6EF1DF0F70EDBCF06 -:1038A0002FF0F80EB7EF1DF0000E186C191E19223C -:1038B0001A1E1A221B1E1B2218C0E6FF19C0E6FFA3 -:1038C0001AC0E6FF1BC0E6FF1200E66E20DA42EFE8 -:1038D0001EF0100EDBCF33F0110EDBCF34F0120EE2 -:1038E000DBCF35F0130EB0DA8BEF26F058DAE5EFC8 -:1038F0001EF0EE58096E06C02DF007C02EF008C06D -:103900002FF0306E1BEC25F02EC002F02FC003F01C -:1039100030C004F031C005F046DACBEC25F0ADDA6A -:103920002FC0F3FF30C0F4FF040EE15C12000BDA8D -:10393000E76E1200D9CFE6FFE1CFD9FF1200E552C2 -:10394000E7CFD9FF1200E126D9CFE9FFDACFEAFFAE -:10395000FA0EDBCFEEFFFB0EDBCFEEFFFC0EDBCF74 -:10396000EEFFFD0EDBCFEEFFD950F60FCBD9040EE4 -:10397000EECFDBFF050EEECFDBFF060EEECFDBFF5B -:10398000070EEECFDBFF12005ED9026A036AB40EA7 -:10399000046E420E056E1200060EE7CFDBFFDBCF92 -:1039A000E6FF070EDBCFE6FF040EDBCFE6FF050EDA -:1039B000DBCFE6FF020EDBCFE6FF030EDBCFE6FF39 -:1039C000DECFE6FFDDCFE6FF1200010EE66EB6ECBD -:1039D00017F05ADA020EE66E54EC18F0E5521200B7 -:1039E000140EDBCF33F0150EDBCF34F0160EDBCF29 -:1039F00035F0170EDBCF36F0CBEC25F0B0EF1EF034 -:103A000086D96CEC16F0E5521200B3D9E66AB6EF2F -:103A100017F04DDA31C0E6FF120084D9020EF3CF61 -:103A2000DBFF030EF4CFDBFF1200020EE66EDFECCD -:103A300016F0E5521200B3D92EC018F02FC019F0BD -:103A400030C01AF031C01BF01200020E2FC0DBFF95 -:103A5000030E30C0DBFF1DDADBCF30F01200336A1B -:103A6000346A356AACEF1EF05DD9F3CFDEFFF4CFD8 -:103A7000DDFFD9CFE9FFDACFEAFF1200CCEC16F078 -:103A8000E552E55200091200080EDBCF00F0090EE6 -:103A9000DBCF01F01200E66E42EF1EF0286E0D0E35 -:103AA000E15E2850120033D9DFEC16F0E552120027 -:103AB000E9EC16F0006E090EE15E00501200DBCF5B -:103AC00003F000500110021003101200336A346A30 -:103AD000800E356EBF0E366E120000C0E6FF01C0CC -:103AE000E6FF12005CD97AD95ED91EEC26F0A3D984 -:103AF000BD0E336E370E346E860E356E410E366E49 -:103B0000CDD92DC00CF02EC00DF02FC00EF030C05E -:103B10000FF0B9EF1EF011DE2EC024F02FC025F0FB -:103B200030C026F031C027F0350E336EFA0E346EF9 -:103B30000E0E356E3C0E366E1EEC26F02EC020F0BA -:103B40002FC021F030C022F031C023F0336A346A34 -:103B50005C0E356E430E366E1EEC26F0A3EF1BF0A6 -:103B600015D90BD929D9CBEC25F0B0EF1EF017D918 -:103B70000DD919D91EEC26F028D9CC0E336EBC0E07 -:103B8000346E8C0E356E3B0E366E88D92DC000F02B -:103B90002EC001F02FC002F030C003F0B9EF1EF0CC -:103BA000140EDBCF0CF0150EDBCF0DF0160EDBCFB5 -:103BB0000EF0170EDBCF0FF052DE34EF25F0E96E7A -:103BC000DACFEAFF09EF1FF0FD0EDBCF2FF0FE0E7C -:103BD000CFEF1EF05ED9E3D825D949DE1EEC26F0E2 -:103BE0008BEF26F0DBCFE6FF28EF1CF000C02EF0B5 -:103BF00001C02FF002C030F003C031F01200EED847 -:103C000037EF1CF018D9BDEF1EF01ED9BFD82FDE3C -:103C100034EF25F0B9DE0C0EDBCF0EF00D0EDBCF4E -:103C20000FF00E0EDBCF10F00F0EA0DD3AEF1CF000 -:103C3000010EE66EB6EC17F031DF020EE66E54ECC4 -:103C400018F0E5527CD6F70EDBCFE6FFF80EDBCF9F -:103C5000E6FFF90EDBCFE6FFFA0EDBCFE6FF120040 -:103C6000FB0EDBCF2FF0FC0E120007D92FC0E6FFB2 -:103C700030C0E6FF120090EC2AF0E552E552E55222 -:103C8000E55212005AEC14F0E552E552120052DEF1 -:103C9000CCDE53DDA3EF1BF0F7D84FDDA3EF1BF015 -:103CA0002EC006F02FC007F030C008F031C009F078 -:103CB00012002DC033F02EC034F02FC035F030C0CC -:103CC00036F0120006DE2FC0DEFF30C0DDFF3AEF17 -:103CD0001CF0020EDBCF2FF0030ECFEF1EF0000E14 -:103CE000DFCF2FF0010ECFEF1EF00CC02EF00DC075 -:103CF0002FF00EC030F00FC031F01200E66EE66A11 -:103D000028EF1CF0E96EFF0EDA20EA6E1200FE0EBC -:103D1000DBCFE6FF12000A0EE66E010EBCDE010EDE -:103D2000E66E1200BEEC15F0E5521200DECFE6FFA3 -:103D3000DDCFE6FF28EF1CF003C02FF004C030F009 -:103D400005C031F01200E66E21EC33F0E5521200AE -:103D5000F1DD040EE1261200400E366ECBEF25F0A9 -:103D60002EC000F02FC001F030C002F031C003F0CF -:103D700012002DC0E6FF57EF1FF02EC033F02FC00A -:103D800034F030C035F031C036F012002EC008F0EB -:103D90002FC009F030C00AF031C00BF01200DBCFA9 -:103DA00030F006EF25F0A60E336E280E346E940E1A -:103DB000356E3F0E366E120004C02EF005C02FF097 -:103DC00006C030F007C031F012002EC004F02FC042 -:103DD00005F030C006F031C007F012002EC014F01C -:103DE0002FC015F030C016F031C017F0120030DDD2 -:103DF000060EDBCFE6FF070EF5DE040EDBCFE6FF97 -:103E0000050E1200020EDBCFE6FF030EEBDE96EF8F -:103E10001EF0EECFE6FFEECFE6FFEECFE6FFEFCFF0 -:103E2000E6FF12002EC00CF02FC00DF030C00EF0D7 -:103E300031C00FF012002EC010F02FC011F030C0B2 -:103E400012F031C013F01200DBCF36F01EEF26F077 -:103E5000FC0EDBCFE6FFFD0EF2EF1DF00A0EE66E64 -:103E6000E66A10DFE66A120065DDDFDD8BEF1DF02C -:103E7000D950380FA4DE3BEF1EF08BEC26F02FC09C -:103E800000F030C001F01200206E0D0EE15E2050F7 -:103E90001200F90EDBCF2FF0FA0E12001EEC26F006 -:103EA000BAEF26F023DDDBDD5BDFD0EF1DF02EC0A7 -:0C3EB000E6FF2FC0E6FF30C0E6FF120066 -:043EBC0056EC24F0AC -:103EC0006A6A686A89EC24F06D8C6E6A39EC24F0B9 -:103ED0006D9CDF6A6AEC24F010E2DF50040DF3CF32 -:103EE000E9FFF4CFEAFF000EE926040EEA22EE6AAB -:103EF000EE6AEE6AEE6ADF2AEDD7160E706E68A6DD -:103F000004D0030EFFEC23F0FAD70101136B186BFA -:103F1000196B1A6B6D98080E0B6F040E0C6F016B0A -:103F2000006BE55214EF24F056EC24F0010100512F -:103F30000BE16D6A696A89EC24F06DB602D06D867A -:103F4000FCD70101010E006F000508E16DBA06D033 -:103F5000686A696A69806988020E006F6850040B9C -:103F600007E06950040B04E0020EFFEC23F089D84F -:103F70006DB247D06850010B14E06950010B11E09D -:103F80009DDF0101040E006F0401200E026F040E7C -:103F9000036F080E016F006B8C0E0013E66AC8EC0D -:103FA00024F06850100B07E06950100B04E060D853 -:103FB000040EFFEC23F06850400B0BE06950400BFF -:103FC00008E090EC24F0020E07EC24F0060EFFEC63 -:103FD00023F06850200B04E06950200B01E035D835 -:103FE0006850020B0AE06950020B07E090EC24F0E5 -:103FF000E668E668E8EC24F06A6A040E0101005DF8 -:1040000002E2A19A1FD069A61CD0DF6A040EDF5C11 -:1040100018E268A616D06CCF20F1030EFFEC23F057 -:10402000780E0101201502E138D809D0000EE66EA5 -:10403000E66A200EE66E010EE66E010EE8DBDF2A70 -:10404000E5D7A19AE55214EF24F070A00ED022EC2F -:1040500024F0EF50800808E1D5DBEF50840804E13C -:1040600022EC24F08C0EEF6E7090050EFFEF23F023 -:104070006984040EC4DB6D8242EC24F0040E07EF69 -:1040800024F042EC24F0030EC2DB6D92699468A424 -:1040900003D0020EB4DBFBD7120056EC24F0FD0E69 -:1040A000010120153DE17E0E2015E8407F0B040D37 -:1040B000F3CF03F1F4CF04F1000E0327040E042321 -:1040C00003C105F104C106F10575BCDBEF503C0BE3 -:1040D000E842E8420D0822E1B5DBBFEC24F0EECF68 -:1040E00000F0EFCF01F0280E001816E1040E0118C1 -:1040F00013E1F9EC24F0DF6AEDDB0EE2DF5072EC45 -:1041000024F0DF50EA6A200FE96E040EEA22E5523D -:10411000E750EF6EDF2AF0D70AD807D01AD805D0BB -:10412000FD0E2015040801E122D8E5527DD36ADB9B -:10413000EF50800B02E066DBEF6A01010F6B106B42 -:10414000146B156B136B64D89DDB170E60DB3DEFB2 -:1041500022F0020E0101105D02E1CAEF22F034D814 -:104160000101215102E1C4EF24F0216B12009EDB1A -:1041700049DBEF50400B01E0010EDF6E01010B75D2 -:10418000080E005D09E122C46EFF6E50000802E2D5 -:10419000100E01D0040E006F100513E1FDEC24F0A9 -:1041A000A6D9020E01010F5D03E12CDB840E07D0BE -:1041B000DF5003E127DBC80E02D024DB880EEF6E50 -:1041C00001D002D8E55230D32BDB0101106B1ADB92 -:1041D000EF6A040E0B19006E0CC101F0DE6E0CC10B -:1041E000DDFF19DBEF6A18AF0CD01B511C1107E083 -:1041F00005D01CC1FAFF01011B51F96EFADF010164 -:10420000189F020EE15C02E2E16AE552E16E0CD316 -:1042100004012051600BE842E842E842E842E842EB -:10422000000901E0120021510C0A45E00B0A3FE0B1 -:104230000C0A31E0010A22E00B0A1EE0020A1CE02F -:10424000030A18E0080A10E0010A0CE00F0A08E06F -:10425000030A01E012000101138F080E006F120023 -:10426000BDEF21F026EF23F00101010E116F010EC9 -:10427000126F0CD0FEEF21F05CEF21F02451010110 -:10428000116F126B020E1127010E12231381010E02 -:10429000146F138F12000101138F04012451EA6A75 -:1042A000020FE96E010EEA2222C4EFFF1200EADAE1 -:1042B000160E07EF24F012007EDB040EE126040147 -:1042C000220510E120511F0B00090CE10101138FA1 -:1042D000030E0401215D04E10101010E1F6F02D0F4 -:1042E00001011F6B0401225141E120511F0B020803 -:1042F0003DE124510F0B000939E00101138F040146 -:1043000024BF05D0A4DA070EE926010E04D09FDAF7 -:104310000B0EE926010ED2DA030E215D03E17BDAF2 -:10432000840E23D024510F0B016A700F006E0F0E04 -:104330000122020E00C0DBFF030E01C0DBFF020EF4 -:10434000DBCFE9FF030EDBCFEAFFEE90ED5224AFA7 -:1043500006D061DAEF6ADF745EDA400E06D05BDA0F -:10436000880EEF6EDF7457DAC80EEF6E040EE15C54 -:1043700002E2E16AE552E16E57D2800E0401205D4F -:104380003CE10101C00E136F04012351030A1EE03A -:10439000010A09E0030A2FE101016A0E116F630EA1 -:1043A000126F120E22D0C3DA140EF626640EA2DAB1 -:1043B000020E0101F76A1125F66E1251F72209006B -:1043C000F5CF14F10A00F5CF15F11200030E225DAE -:1043D0000FE2ADDA160EF626640E8CDA11C1F6FF86 -:1043E00012C1F7FF0800F5500101146F156B1200A0 -:1043F0000101136B12000101136B120011DA0401A9 -:10440000286B296B20511F0B020A11E0030A0CE0F4 -:10441000010A22E10101138F0401288101011F0516 -:104420001BE10401288318D00101138F15D001016D -:10443000138F040124BF05D00ADA070EE926010E06 -:1044400004D005DA0B0EE926010E38DAE4D9EF5074 -:10445000040B02E0010E286F010113AF07D0280EF4 -:10446000116F040E126F1381020E146F020EE15CC5 -:1044700002E2E16AE552E16ED7D16D98010113BF06 -:1044800008D018AF02D061DA2AD07EDABBD9840E08 -:1044900027D018BF2BD0040120AF24D00101145124 -:1044A0000401265D010115510401275904E226C4C7 -:1044B00014F127C415F11BD80101010E106FA1DA08 -:1044C000800EEF6E216BBED9EE52080EEF6E91DAC0 -:1044D000B9D9840EEF6E010E216F8FDA93D9C80E11 -:1044E000EF6E1200010131DAC80EEF6E120098D99A -:1044F0000101080E145D000E15590DE214C1DEFF16 -:1045000015C1DDFF0F5102E1010E03D00F0506E1D9 -:10451000020E0F6F03D0080EDE6EDD6A73D9EF92C4 -:1045200071D9EF906FD9010EDB50EF126BD9EE52BB -:10453000DFCFEFFF000EDB50145F010EDB50155B89 -:10454000280E1D6F040E1E6F13B10FD0F7D91BE09C -:1045500011C1F6FF12C1F7FF112B000E1223080044 -:10456000F55096D9F3E2DB06F1D7E8D90CE011C19A -:10457000E9FF12C1EAFF112B000E1223EF5088D978 -:10458000F4E2DB06F2D7020EE15C02E2E16AE552F8 -:10459000E16E4AD145D956D9EE52EFCFDFFFDFCFDA -:1045A00000F000500101195D000E1A5903E219C113 -:1045B000DFFF09D0DF50006E016AE850195D196F06 -:1045C00001501A591A6F010EDB6ADF50F36E010EAB -:1045D000DBCFF4FFF350F45C10E2010EDB5082D924 -:1045E00016C1E9FF17C1EAFF162B000E1723E5528B -:1045F000E750EF6E010EDB2AE8D7000ED880195580 -:10460000000E1A550DE2F4D854D91CD9EF50400BC6 -:1046100003E1EAD9C80E02D0E7D9880EEF6E0FD0B9 -:10462000F0D9840EEF6E1B511C1107E005D01CC1A0 -:10463000FAFF01011B51F96EFADF0101189F020E0A -:10464000E15C02E2E16AE552E16EEED00101138F16 -:1046500010D9010EE66EE66AE66A020EE66E010EFB -:10466000AFD922C401F10401225104E10101100E6D -:10467000006F12000101200E006F04D9150E07EF24 -:1046800024F0CED8000EDE6E040EDD6EE8D8040DE8 -:10469000F350006E016A020E0F0B05E0D890013254 -:1046A0000032E806FBE1D89000360136D89000369B -:1046B0000136D9CFE9FFDACFEAFF0050EE260150EC -:1046C000ED22A9D8EF9EFD0EDB5002E16AD901D0A0 -:1046D0006DD9EA22DECFEEFFDDCFEDFF9CD8EF9C57 -:1046E0009AD8040EE926000EEA22EF8C020EE15C55 -:1046F00002E2E16AE552E16E97D092D8FE0EDB50FD -:10470000016A700F006E0F0EDFD885D8FD0EDBCF6B -:10471000EFFFDBA402D0E66AF5D8FD0EDBA203D0E2 -:10472000010EE66EEFD8020EE15C02E2E16AE552AC -:10473000E16E7AD075D8FE0EDB5005E125D962D83E -:10474000840EEF6E05D08BD80CD989D8010F09D90A -:10475000020EE15C02E2E16AE552E16E65D060D8EA -:10476000FD0EDB5002E022D901D01BD9A7D853D8C7 -:1047700006D9FB0EDBCFEEFFFC0EDBCFEDFF4BD8F7 -:10478000EE52FA0EDBCFEFFF400E45D8E850EF16A1 -:10479000880E41D8E850EF12FD0EDB5002E006D93A -:1047A00001D0FFD8EA22EF74DECF00F0DDCF01F0B8 -:1047B00000C0F3FF01C0F4FF020EE15C02E2E16A17 -:1047C000E552E16E31D0F7D8010EF36EFC0EDB50EE -:1047D00004E0D890F336E806FCE1F31C006EFD0E11 -:1047E000DBCFE9FFFE0EDBCFEAFF0050EF161CD057 -:1047F000FBD8EE52080EEF6EF7D8BFEF24F0E66E4E -:10480000C8EF24F00BC1E9FF0CC1EAFF1200E66E0D -:10481000E66AE8EF24F0DECFE9FFDDCFEAFF120021 -:10482000CAD8020EE1261200E552E7CFD9FF1200E6 -:10483000D6D8F4EF24F0FE0EEA6ADB34FE0BEA363B -:10484000E96E120003C1E9FF04C1EAFF120024511E -:104850000F0BE96EEA6AD890E936EA361200FD0ECF -:10486000DB50E824026EFE0EDB50040DF3500224F0 -:104870001200000EE66EE66AE66A710EE66E0F0E34 -:10488000E0EF24F0000EE66EE66AE66EE66A1200DD -:10489000E66E1DC1E9FF1EC1EAFF1D2B000E1E239F -:1048A000E552E750EF6EDF06010E120084D8E652A3 -:1048B0001200280EEE6E040EED6E1200EA22EECF0C -:1048C000DEFFEDCFDDFF1200012200C0DEFF01C0E0 -:1048D000DDFF1200DF50006E016A080E005C000E62 -:1048E00001581200EA6A280FE96E040EEA22EF501E -:1048F000E66E1200F7220900F5CF11F10A00F5CF9C -:1049000012F11200FE0EDBCFE6FFBBDEE552E552F0 -:104910001200160E6F6E9F0E6B6E7B0E696E12008C -:10492000010EE66EE66A000EE66EE66A120022519D -:10493000F66EF76AD890F636F7361200D9CFE9FF4F -:10494000DACFEAFFEE50ED101200020E106F5ADFC0 -:10495000EE52EF6A57DFC80EEF6E4ADFAADFF4EFC0 -:1049600024F0040DF3CF00F0F4CF01F0000E002688 -:10497000040EAADF840E4FDFE850EF121200020E81 -:10498000E926000EEA2212003CD88C0EEF6E1200CF -:10499000680EE66E0F0EE66E16DFE552E552E55242 -:1049A000120049DF070EE926010E120044DF0B0E4C -:1049B000E926010E1200D9CFE6FFE1CFD9FF1200A0 -:1049C000E66ECBEC32F0006E050EE15E0050120098 -:1049D0006EEC13F0006E060EE15E00501200200E29 -:1049E000EE6E040EED6E120005C1E9FF06C1EAFF8E -:1049F000120028DFC4DFEFEF24F004DFC0DF59EF3F -:084A000024F0F6DE18EF24F0AB -:084A0800389E08D0389E30AE44 -:104A100005D02F6C301EE86A3022388E30C02AF064 -:104A20002FC029F03C6A3B6A8E0E2B6E2C6A0DEF6C -:104A300027F0389E0CD0389E30AE09D02D6C2E1E3B -:104A40002F1E301EE86A2E222F223022388E30C0D0 -:104A50002AF02FC029F02EC03CF02DC03BF09E0E56 -:104A60002B6E2C6A0DEF27F0367E386A49EC27F062 -:104A700061EC27F038B6F1EF26F038A20AD038AA58 -:104A800003D038BEF1EF26F038A4FDEF26F0FAEFA0 -:104A900026F038AA05D038ACFDEF26F0FAEF26F064 -:104AA00038A00AD038A808D038BE04D038A402D024 -:104AB00006EF27F00AEF27F03B6A2C6A3650315C8C -:104AC0003A6E10E32EC03CF02FC029F030C02AF01F -:104AD00031C039F033C02EF034C02FF035C030F083 -:104AE000383A09D033C03CF034C029F035C02AF040 -:104AF00036C039F03A6C389E38BC388E39C02BF04D -:104B000038B039EF27F01A0E3A6039EF27F02B6AE8 -:104B1000316A38A408D02E6C2F1E301E311EE86A70 -:104B20002F223022312238AC08D03C6C291E2A1E9C -:104B30002B1EE86A29222A222B222D6A3A5207E0EC -:104B4000313430322F322E322D323A2EF9D72E50C8 -:104B50003C262F50292230502A2231502B222DC0A2 -:104B60003BF0389E2BAE0BD03B6C3C1E291E2A1E00 -:104B70002B1EE86A3C2229222A222B22388E2BA0C7 -:104B800006D0D8802A3229323C323B32392A39C009 -:104B90002BF00DEF27F0386A49EC27F061EC27F095 -:104BA00038B6F1EF26F038A205D038BAF1EF2... [truncated message content] |
From: Olivier B. <Ba...@us...> - 2010-02-24 20:33:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 25eabbea383d06ad591978ba725b9e9b8081599f (commit) from 03b2d41ebef871da47dc3cc3a72773b838fc5c5d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 25eabbea383d06ad591978ba725b9e9b8081599f Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:33:31 2010 +0100 Try to fix direction consistency ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 0846784..f053b69 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs b/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs new file mode 100644 index 0000000..7e843b1 --- /dev/null +++ b/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs @@ -0,0 +1,149 @@ +[Header] +MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7} +Version=1.0 +[File000] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\usb_descriptors.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File001] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\main.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File002] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\eeprom.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File003] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\motor.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File004] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\lm629.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File005] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\usb_device.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File006] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\usb_function_hid.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File007] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\error.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File008] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\Motor_controller.cof +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[File009] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\Motor_controller.hex +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[File010] +Location=C:\krobot\USB_Module\Motor_Controller\Firmware\output\Motor_controller.map +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[TOOL_LOC_STAMPS] +tool_loc{96C98149-AA1B-4CF9-B967-FAE79CAB663C}=C:\MCC18\bin\mplink.exe +tool_loc{E56A1C86-9D32-4DF6-8C34-FE0388B1B644}=C:\MCC18\bin\mcc18.exe diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index 044ff6c..45e059d 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -599,11 +599,11 @@ void moveForward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -621,11 +621,11 @@ void moveBackward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -643,11 +643,11 @@ void turnRight(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -665,11 +665,11 @@ void turnLeft(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); diff --git a/USB_Module/Motor_Controller/Firmware/lm629.h b/USB_Module/Motor_Controller/Firmware/lm629.h index c3040e9..8ead717 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.h +++ b/USB_Module/Motor_Controller/Firmware/lm629.h @@ -25,8 +25,8 @@ #define ENCODER_RES 90 ///< Impulsions du codeur par tour de roue (prendre en compte le rcteur selon le cas !) #define WHEELS_DIAMETER 99 ///< Diame des roues (en mm) #define WHEELS_DIST 220 ///< Distance entre les 2 roues (en mm) -#define CON_MOTOR_LEFT -1 -#define CON_MOTOR_RIGHT 1 +#define CON_MOTOR_LEFT 1 +#define CON_MOTOR_RIGHT -1 /** * Parames par dult du correcteur. diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index 332fb2e..fd808eb 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -1053,6 +1053,8 @@ void ProcessIO(void) { (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); } } + + traj_engaged = 1; break; case TRAJ_NEW_VELOCITY: @@ -1082,6 +1084,8 @@ void ProcessIO(void) { CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); } } + + traj_engaged = 1; break; case TRAJ_CHANGE_VELOCITY: @@ -1106,6 +1110,8 @@ void ProcessIO(void) { CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); } } + + traj_engaged = 1; break; case TRAJ_START: diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 22e52c7..83ad095 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index d38c509..4ba8c6d 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,144 +1,144 @@ :020000040000FA -:06000000F0EF33F01200E6 +:0600000007EF34F01200CE :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000F0EF33F01200DE +:0608000007EF34F01200C6 :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A00040073680000E9 -:1008300026010000210000006B6800005F0100003D -:10084000080000005D680000470100000E00000085 -:0C0850005A6800006A010000030000006C +:06082A000400A1680000BB +:100830002601000021000000996800005F0100000F +:10084000080000008B680000470100000E00000057 +:0C085000886800006A010000030000003E :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD :10088000FACFE4FF00EE29F0140EE80403E3EECF04 :10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD7CBEC13F09EA013D0D5EC13F0F4 +:1008A000E4FFFBD7E2EC13F09EA013D0ECEC13F0C6 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E50239AEC2CF032 -:1008D0009E90DEEC13F002E2E16AE552E16EE55231 +:1008C00005E34D6B4E6B4F2B000E5023B1EC2CF01B +:1008D0009E90F5EC13F002E2E16AE552E16EE5521A :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 :10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D :10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 :10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A :10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FFCBEC13F0DEEC13F002E2B3 +:10094000E4FFF4CFE4FFE2EC13F0F5EC13F002E285 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D87DEC1FF060D8FCD77D -:100980000F0EC11202D847EF1FF0EEEC13F0E65243 -:10099000A2EC13F00101676F070E675D10E1E66AD4 -:1009A0000AEC33F0E552DF6E000EDF80E6EC13F068 -:1009B000E66AC3EC33F0E552DF70E6EC13F0D08E5C +:10097000E5CFD8FF100004D894EC1FF060D8FCD766 +:100980000F0EC11202D85EEF1FF005EC14F0E65214 +:10099000B9EC13F00101676F070E675D10E1E66ABD +:1009A00021EC33F0E552DF6E000EDF80FDEC13F03A +:1009B000E66ADAEC33F0E552DF70FDEC13F0D08E2E :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E7DEC32F0E552D0 +:1009E000E66E7C0EE66EE10EE66E94EC32F0E552B9 :1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66EF3EC13F0E552838C818882844C -:100A1000808A838E80888294010EE66EFEEC33F02D -:100A2000E55282849D80C50EE66E53EC33F0E552AC -:100A3000D5EC13F0E552E552E7CFD9FF1200D9CF3C +:100A0000010EE66E0AEC14F0E552838C8188828434 +:100A1000808A838E80888294010EE66E15EC34F015 +:100A2000E55282849D80C50EE66E6AEC33F0E55295 +:100A3000ECEC13F0E552E552E7CFD9FF1200D9CF25 :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A5000E7EC12F0200E0101005D03E36D50020B84 -:100A600002E0DDEF12F0010149514A1102E1000EEE +:100A5000FEEC12F0200E0101005D03E36D50020B6D +:100A600002E0F4EF12F0010149514A1102E1000ED7 :100A700008D049C1E9FF4AC1EAFFEF50800B01E00D :100A8000010E000947E101014651EA6A260FE96EAD :100A9000010EEA22EF5000083DE20501406B010122 :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66E98EC23F0006E050EE15E00500C +:100AD000010EE66EAFEC23F0006E050EE15E0050F5 :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E175EC1BF00009C7 +:100B300000092CE10101520529E18CEC1BF00009B0 :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66E98EC23F0006E050EE15E00506B +:100B7000010EE66EAFEC23F0006E050EE15E005054 :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EE6EC2DF0C3 -:100BC000E5521CEC17F0000904E00101020E516F20 +:100BB00013E0030A01E06ED0020EE66EFDEC2DF0AC +:100BC000E55233EC17F0000904E00101020E516F09 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66E9EEC52 +:100BE000C80EE66EE66AE80EE66E030EE66EB5EC3B :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486BDB0E006E2C -:100C4000640E016E026A00C0E6FF01C0E6FF02C04A -:100C5000E6FF480EE66E050EE66ECEEC32F0036E51 +:100C3000050E426F0501436B0501486B090E006EFE +:100C4000650E016E026A00C0E6FF01C0E6FF02C049 +:100C5000E6FF480EE66E050EE66EE5EC32F0036E3A :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66E98EC23F0006E55 +:100C7000E66E010EE66E010EE66EAFEC23F0006E3E :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66AB5ECB3 +:100C9000516B02D00101516B020EE66EE66ACCEC9C :100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66EB5EC16F0E552E552000902E00101DE +:100CB000E66ECCEC16F0E552E552000902E00101C7 :100CC000516901014751481102E1000E08D047C1A6 :100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E0DDEF12F005010251070A02E13EEFDA +:100CE00002E0F4EF12F005010251070A02E155EFAC :100CF00012F00D0A01E148D2010A01E118D20D0AF1 :100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D10009CEF12F0FF00DDEF12F0E66A0AEC33F010 -:100D2000E552DF6E000EDB80DFCFE6FFE66AEAEC1D -:100D300032F0E552E552FF00DDEF12F001014951BA +:100D1000B3EF12F0FF00F4EF12F0E66A21EC33F0CB +:100D2000E552DF6E000EDB80DFCFE6FFE66A01EC06 +:100D300033F0E552E552FF00F4EF12F001014951A2 :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 :100D5000EF50800B01E0010E000901E081D100C5D8 :100D600040F50501416B0501030E426F0501436B20 :100D7000050108510F0A01E110D1080A01E1BBD0B9 :100D8000010A01E17ED0020A71E0070A64E0010A6B :100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486BB70E006E640E016E026A01 +:100DA00038D10501486BE50E006E640E016E026AD3 :100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66ECEEC32F0036E050EE15E0350CA -:100DD00020D10501486BAB0E006E640E016E026AF5 +:100DC000050EE66EE5EC32F0036E050EE15E0350B3 +:100DD00020D10501486BD90E006E640E016E026AC7 :100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66ECEEC32F0036E050EE15E03509A -:100E0000A90E006E640E016E026A00C0E6FF01C00A -:100E1000E6FF02C0E6FF480EE66E050EE66ECEEC7B -:100E200032F0036E050EE15E0350A00E006E640EFC +:100DF000050EE66EE5EC32F0036E050EE15E035083 +:100E0000D70E006E640E016E026A00C0E6FF01C0DC +:100E1000E6FF02C0E6FF480EE66E050EE66EE5EC64 +:100E200032F0036E050EE15E0350CE0E006E640ECE :100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66ECEEC32F0036E050E31 +:100E4000480EE66E050EE66EE5EC32F0036E050E1A :100E5000E15E0350DED092CF48F593CF49F594CFB1 :100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA :100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A40EC2DF0E552010E2DC0DBFF24 +:100E8000C8D0E66A57EC2DF0E552010E2DC0DBFF0D :100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E :100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E40ECC1 +:100EB000DBCF4AF5010EDBCF4BF5010EE66E57ECAA :100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 :100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 :100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 -:100EF000DBCF4FF58ED00A0EE66EE66A43EC14F0B7 -:100F0000E552E552E66AA7EC15F0E552030EF3CF81 -:100F1000DBFF040EF4CFDBFFE66AA7EC15F0E55229 +:100EF000DBCF4FF58ED00A0EE66EE66A5AEC14F0A0 +:100F0000E552E552E66ABEEC15F0E552030EF3CF6A +:100F1000DBFF040EF4CFDBFFE66ABEEC15F0E55212 :100F2000DE52F3CFDEFFF4CFDDFFDD52040EDBCF68 :100F300048F5030EDBCF49F5020EDBCF4AF5010E73 -:100F4000DBCF4BF50A0EE66E010EE66E43EC14F0B5 -:100F5000E552E552010EE66EA7EC15F0E552030EE0 -:100F6000F3CFDBFF040EF4CFDBFF010EE66EA7EC40 +:100F4000DBCF4BF50A0EE66E010EE66E5AEC14F09E +:100F5000E552E552010EE66EBEEC15F0E552030EC9 +:100F6000F3CFDBFF040EF4CFDBFF010EE66EBEEC29 :100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 :100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A7AEC18F047 +:100F90004EF5010EDBCF4FF53CD0E66A91EC18F030 :100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B :100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 :100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E7AEC18F0E552010E2DC0CD +:100FD0004BF5010EE66E91EC18F0E552010E2DC0B6 :100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 :100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D :10100000020EDBCF4EF5010EDBCF4FF50501020ED0 :10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66E98EC23F0006E050EE15EB2 +:10102000E66E010EE66EAFEC23F0006E050EE15E9B :101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66E98EC23F09B +:10104000E66E050EE66EE66A010EE66EAFEC23F084 :10105000006E050EE15E0050F3CF47F1F4CF48F18A -:10106000DDEF12F005010851030A37E0010A25E01F +:10106000F4EF12F005010851030A37E0010A25E008 :10107000030A13E0010A01E040D005010951921270 :1010800005010A51931205010B51941205010C51EF :10109000951205010D51961235D00501091D9216C4 @@ -147,98 +147,98 @@ :1010C00005010A1D8A1605010B1D8B1605010C1D55 :1010D0008C1605010D1D8D1615D0050109518912BB :1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66E90EC99 +:1010F0008C1205010D518D1205D0030EE66EA7EC82 :1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66E98EC23F0006E050EE15EC5 -:101120000050F3CF47F1F4CF48F1DDEF12F00501A5 +:10111000E66A010EE66EAFEC23F0006E050EE15EAE +:101120000050F3CF47F1F4CF48F1F4EF12F005018E :101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000E6EC2DF0E5520BD009C5E6FFF6EC2DF0EC -:10115000E55205D0010EE66E90EC33F0E552400EFC +:10114000FDEC2DF0E5520BD009C5E6FF0DEC2EF0BD +:10115000E55205D0010EE66EA7EC33F0E552400EE5 :10116000E66E000EE66E050EE66EE66A010EE66EAF -:1011700098EC23F0006E050EE15E0050F3CF47F1CE -:10118000F4CF48F1DDEF12F005010851060A02E143 -:10119000FDEF11F0080A02E1C3EF11F0030A02E1CA -:1011A000BAEF11F0070A02E190EF10F0030A02E132 -:1011B00073EF0EF0010A01E1D8D20F0A01E1C0D2AB +:10117000AFEC23F0006E050EE15E0050F3CF47F1B7 +:10118000F4CF48F1F4EF12F005010851060A02E12C +:1011900014EF12F0080A02E1DAEF11F0030A02E19B +:1011A000D1EF11F0070A02E1A1EF10F0030A02E10A +:1011B0007EEF0EF0010A01E1D8D20F0A01E1C0D2A0 :1011C000020A01E174D2010A01E142D2070A01E1F7 :1011D00010D2010A01E1DED1030A01E1ACD1010A1A :1011E00001E1A5D10C0A01E126D1030A01E194D065 -:1011F000040A02E025EF12F00501095104E0020E95 -:101200000501095D40E10AC5E6FF010EE66EEAEC64 -:1012100032F0E552E5520BC5E6FF020EE66EEAEC4F -:1012200032F0E552E5520CC5E6FF030EE66EEAEC3D -:1012300032F0E552E5520DC5E6FF040EE66EEAEC2B -:1012400032F0E552E5520EC5E6FF050EE66EEAEC19 -:1012500032F0E552E5520FC5E6FF060EE66EEAEC07 -:1012600032F0E552E55210C5E6FF070EE66EEAECF5 -:1012700032F0E552E55211C5E6FF080EE66EEAECE3 -:1012800032F0E552E5520501090504E0020E0501C0 -:10129000095D40E10AC5E6FF090EE66EEAEC32F0B0 -:1012A000E552E5520BC5E6FF0A0EE66EEAEC32F0B7 -:1012B000E552E5520CC5E6FF0B0EE66EEAEC32F0A5 -:1012C000E552E5520DC5E6FF0C0EE66EEAEC32F093 -:1012D000E552E5520EC5E6FF0D0EE66EEAEC32F081 -:1012E000E552E5520FC5E6FF0E0EE66EEAEC32F06F -:1012F000E552E55210C5E6FF0F0EE66EEAEC32F05D -:10130000E552E55211C5E6FF100EE66EEAEC32F04A -:10131000E552E5522AEF12F000C540F50501416B98 -:101320000501030E426F0501436B010EE66E0AECE8 -:1013300033F0E5520501486F020EE66E0AEC33F019 -:10134000E5520501496F030EE66E0AEC33F0E552F3 -:1013500005014A6F040EE66E0AEC33F0E552050112 -:101360004B6F050EE66E0AEC33F0E55205014C6F4B -:10137000060EE66E0AEC33F0E55205014D6F070EDE -:10138000E66E0AEC33F0E55205014E6F080EE66E8C -:101390000AEC33F0E55205014F6F090EE66E0AECD8 -:1013A00033F0E5520501506F0A0EE66E0AEC33F099 -:1013B000E5520501516F0B0EE66E0AEC33F0E55273 -:1013C0000501526F0C0EE66E0AEC33F0E552050192 -:1013D000536F0D0EE66E0AEC33F0E5520501546FC3 -:1013E0000E0EE66E0AEC33F0E5520501556F0F0E56 -:1013F000E66E0AEC33F0E5520501566F100EE66E0C -:101400000AEC33F0E5520501576F400EE66E400ED0 -:10141000E66E050EE66E010EE66E010EE66E98ECC7 +:1011F000040A02E03CEF12F00501095104E0020E7E +:101200000501095D40E10AC5E6FF010EE66E01EC4D +:1012100033F0E552E5520BC5E6FF020EE66E01EC37 +:1012200033F0E552E5520CC5E6FF030EE66E01EC25 +:1012300033F0E552E5520DC5E6FF040EE66E01EC13 +:1012400033F0E552E5520EC5E6FF050EE66E01EC01 +:1012500033F0E552E5520FC5E6FF060EE66E01ECEF +:1012600033F0E552E55210C5E6FF070EE66E01ECDD +:1012700033F0E552E55211C5E6FF080EE66E01ECCB +:1012800033F0E552E5520501090504E0020E0501BF +:10129000095D40E10AC5E6FF090EE66E01EC33F098 +:1012A000E552E5520BC5E6FF0A0EE66E01EC33F09F +:1012B000E552E5520CC5E6FF0B0EE66E01EC33F08D +:1012C000E552E5520DC5E6FF0C0EE66E01EC33F07B +:1012D000E552E5520EC5E6FF0D0EE66E01EC33F069 +:1012E000E552E5520FC5E6FF0E0EE66E01EC33F057 +:1012F000E552E55210C5E6FF0F0EE66E01EC33F045 +:10130000E552E55211C5E6FF100EE66E01EC33F032 +:10131000E552E55241EF12F000C540F50501416B81 +:101320000501030E426F0501436B010EE66E21ECD1 +:1013300033F0E5520501486F020EE66E21EC33F002 +:10134000E5520501496F030EE66E21EC33F0E552DC +:1013500005014A6F040EE66E21EC33F0E5520501FB +:101360004B6F050EE66E21EC33F0E55205014C6F34 +:10137000060EE66E21EC33F0E55205014D6F070EC7 +:10138000E66E21EC33F0E55205014E6F080EE66E75 +:1013900021EC33F0E55205014F6F090EE66E21ECAA +:1013A00033F0E5520501506F0A0EE66E21EC33F082 +:1013B000E5520501516F0B0EE66E21EC33F0E5525C +:1013C0000501526F0C0EE66E21EC33F0E55205017B +:1013D000536F0D0EE66E21EC33F0E5520501546FAC +:1013E0000E0EE66E21EC33F0E5520501556F0F0E3F +:1013F000E66E21EC33F0E5520501566F100EE66EF5 +:1014000021EC33F0E5520501576F400EE66E400EB9 +:10141000E66E050EE66E010EE66E010EE66EAFECB0 :1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF12AEF12F0030EE66E010EE66EEAECB8 -:1014400032F0E552E552E80EE66E020EE66EEAEC88 -:1014500032F0E552E552E66A030EE66EEAEC32F04F -:10146000E552E552010EE66E040EE66EEAEC32F04D -:10147000E552E552E66A050EE66EEAEC32F0E55218 -:10148000E552E66A060EE66EEAEC32F0E552E55207 -:10149000270EE66E070EE66EEAEC32F0E552E552F4 -:1014A000100EE66E080EE66EEAEC32F0E552E552FA -:1014B000030EE66E090EE66EEAEC32F0E552E552F6 -:1014C000E80EE66E0A0EE66EEAEC32F0E552E55200 -:1014D000E66A0B0EE66EEAEC32F0E552E552010EDA -:1014E000E66E0C0EE66EEAEC32F0E552E552E66A84 -:1014F0000D0EE66EEAEC32F0E552E552E66A0E0EAB -:10150000E66EEAEC32F0E552E552270EE66E0F0E7B -:10151000E66EEAEC32F0E552E552100EE66E100E81 -:10152000E66EEAEC32F0E552E5522AEF12F01CECDE -:1015300017F02AEF12F0060E09C5DBFF050E0AC5EB +:101430004AF141EF12F0030EE66E010EE66E01EC8A +:1014400033F0E552E552E80EE66E020EE66E01EC70 +:1014500033F0E552E552E66A030EE66E01EC33F036 +:10146000E552E552010EE66E040EE66E01EC33F035 +:10147000E552E552E66A050EE66E01EC33F0E55200 +:10148000E552E66A060EE66E01EC33F0E552E552EF +:10149000270EE66E070EE66E01EC33F0E552E552DC +:1014A000100EE66E080EE66E01EC33F0E552E552E2 +:1014B000030EE66E090EE66E01EC33F0E552E552DE +:1014C000E80EE66E0A0EE66E01EC33F0E552E552E8 +:1014D000E66A0B0EE66E01EC33F0E552E552010EC2 +:1014E000E66E0C0EE66E01EC33F0E552E552E66A6C +:1014F0000D0EE66E01EC33F0E552E552E66A0E0E93 +:10150000E66E01EC33F0E552E552270EE66E0F0E63 +:10151000E66E01EC33F0E552E552100EE66E100E69 +:10152000E66E01EC33F0E552E55241EF12F033EC98 +:1015300017F041EF12F0060E09C5DBFF050E0AC5D4 :10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 :101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 :101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FF9EECB7 +:10157000E6FF050EDBCFE6FF060EDBCFE6FFB5ECA0 :1015800018F0006E060EE15E00500101010E526F70 -:101590002AEF12F0060E09C5DBFF050E0AC5DBFFB8 +:1015900041EF12F0060E09C5DBFF050E0AC5DBFFA1 :1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 :1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF :1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FFA8EC18F02A -:1015E000006E060EE15E00500101010E526F2AEFFF +:1015D000050EDBCFE6FF060EDBCFE6FFBFEC18F013 +:1015E000006E060EE15E00500101010E526F41EFE8 :1015F00012F0060E09C5DBFF050E0AC5DBFF080E5B :101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC :10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E :10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FFB4EC18F0006E62 -:10164000060EE15E00500101010E526F2AEF12F00A +:10163000DBCFE6FF060EDBCFE6FFCBEC18F0006E4B +:10164000060EE15E00500101010E526F41EF12F0F3 :10165000060E09C5DBFF050E0AC5DBFF080E0BC52C :10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 :101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 :10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FFC0EC18F0006E060E8C -:1016A000E15E00500101010E526F2AEF12F0060EAA +:10169000E6FF060EDBCFE6FFD7EC18F0006E060E75 +:1016A000E15E00500101010E526F41EF12F0060E93 :1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 :1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC :1016D000DBFF0C0E0FC5DBFF0B0E10C5DBFF0E0E84 @@ -246,1338 +246,1345 @@ :1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC :101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 :10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FFCCEC18F0006E59 -:101730000B0EE15E00500101010E526F2AEF12F014 +:10172000DBCFE6FF060EDBCFE6FFE3EC18F0006E42 +:101730000B0EE15E00500101010E526F41EF12F0FD :10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF70EC18F0EA -:10176000E552E552E5522AEF12F0060E0AC5DBFFFC +:10175000E6FF060EDBCFE6FF09C5E6FF87EC18F0D3 +:10176000E552E552E55241EF12F0060E0AC5DBFFE5 :10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 :10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 :101790000501095D02E0000E01D0010E000E0009F6 -:1017A00001E1D9D0090EDBCF2FF00A0EDBCF30F0EC -:1017B000EDEC24F02EC008F02FC009F030C00AF084 +:1017A00001E1E1D0090EDBCF2FF00A0EDBCF30F0E4 +:1017B00004EC25F02EC008F02FC009F030C00AF06C :1017C00031C00BF0A60E336E280E346E940E356EBB :1017D0003F0E366E08C02EF009C02FF00AC030F060 -:1017E0000BC031F007EC26F02EC004F02FC005F03E +:1017E0000BC031F01EEC26F02EC004F02FC005F027 :1017F00030C006F031C007F0CC0E336EBC0E346E34 :101800008C0E356E3B0E366E04C02EF005C02FF0E8 -:1018100006C030F007C031F007EC26F0A3EC26F04C +:1018100006C030F007C031F01EEC26F0BAEC26F01E :101820002DC000F02EC001F02FC002F030C003F038 :1018300000C0E6FF01C0E6FF02C0E6FF03C0E6FF0E -:10184000070EDBCF2FF0080EDBCF30F0EDEC24F0ED +:10184000070EDBCF2FF0080EDBCF30F004EC25F0D5 :101850002EC014F02FC015F030C016F031C017F0B4 :10186000A60E336E280E346E940E356E3F0E366E15 :1018700014C02EF015C02FF016C030F017C031F094 -:1018800007EC26F02EC010F02FC011F030C012F07F +:101880001EEC26F02EC010F02FC011F030C012F068 :1018900031C013F0BD0E336E370E346E860E356ECA :1018A000410E366E10C02EF011C02FF012C030F075 -:1018B00013C031F007EC26F0A3EC26F02DC00CF09D +:1018B00013C031F01EEC26F0BAEC26F02DC00CF06F :1018C0002EC00DF02FC00EF030C00FF00CC0E6FFA0 :1018D0000DC0E6FF0EC0E6FF0FC0E6FF050EDBCF32 -:1018E0002FF0060EDBCF30F0EDEC24F02EC01CF014 +:1018E0002FF0060EDBCF30F004EC25F02EC01CF0FC :1018F0002FC01DF030C01EF031C01FF0A60E336E99 :10190000280E346E940E356E3F0E366E1CC02EF0CF -:101910001DC02FF01EC030F01FC031F007EC26F0C4 -:10192000A3EC26F02DC018F02EC019F02FC01AF02D -:1019300030C01BF018C0E6FF19C0E6FF1AC0E6FF72 -:101940001BC0E6FF09C5E6FF9FEC17F0206E0D0EE9 -:10195000E15E2050C7D1020E0501095D04E00501DA -:10196000090501E0E0D0090EDBCF2FF00A0EDBCF36 -:1019700030F0EDEC24F02EC008F02FC009F030C09C -:101980000AF031C00BF0A60E336E280E346E940EA2 -:10199000356E3F0E366E08C02EF009C02FF00AC01B -:1019A00030F00BC031F007EC26F02EC004F02FC051 -:1019B00005F030C006F031C007F0CC0E336EBC0E1F -:1019C000346E8C0E356E3B0E366E04C02EF005C0A4 -:1019D0002FF006C030F007C031F007EC26F0A3EC82 -:1019E00026F02DC000F02EC001F02FC002F030C054 -:1019F00003F000C0E6FF01C0E6FF02C0E6FF03C03F -:101A0000E6FF070EDBCF2FF0080EDBCF30F0EDEC5A -:101A100024F02EC014F02FC015F030C016F031C0E5 -:101A200017F0A60E336E280E346E940E356E3F0EF0 -:101A3000366E14C02EF015C02FF016C030F017C04F -:101A400031F007EC26F02EC010F02FC011F030C09E -:101A500012F031C013F0BD0E336E370E346E860EA9 -:101A6000356E410E366E10C02EF011C02FF012C030 -:101A700030F013C031F007EC26F0A3EC26F02DC0B7 -:101A80000CF02EC00DF02FC00EF030C00FF00CC0C7 -:101A9000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E35 -:101AA000DBCF2FF0060EDBCF30F0EDEC24F02EC0B4 -:101AB0001CF02FC01DF030C01EF031C01FF0A60E6C -:101AC000336E280E346E940E356E3F0E366E1CC08B -:101AD0002EF01DC02FF01EC030F01FC031F007ECFB -:101AE00026F0A3EC26F02DC018F02EC019F02FC060 -:101AF0001AF030C01BF0000E186C191E19221A1EA5 -:101B00001A221B1E1B2218C0E6FF19C0E6FF1AC0CE -:101B1000E6FF1BC0E6FF010EE66E9FEC17F0206E9D +:101910001DC02FF01EC030F01FC031F01EEC26F0AD +:10192000BAEC26F02DC018F02EC019F02FC01AF016 +:1019300030C01BF0000E186C191E19221A1E1A2234 +:101940001B1E1B2218C0E6FF19C0E6FF1AC0E6FFE7 +:101950001BC0E6FF09C5E6FFB6EC17F0206E0D0EC2 +:10196000E15E2050C7D1020E0501095D04E00501CA +:10197000090501E0D8D0090EDBCF2FF00A0EDBCF2E +:1019800030F004EC25F02EC008F02FC009F030C074 +:101990000AF031C00BF0A60E336E280E346E940E92 +:1019A000356E3F0E366E08C02EF009C02FF00AC00B +:1019B00030F00BC031F01EEC26F02EC004F02FC02A +:1019C00005F030C006F031C007F0CC0E336EBC0E0F +:1019D000346E8C0E356E3B0E366E04C02EF005C094 +:1019E0002FF006C030F007C031F01EEC26F0BAEC44 +:1019F00026F02DC000F02EC001F02FC002F030C044 +:101A000003F000C0E6FF01C0E6FF02C0E6FF03C02E +:101A1000E6FF070EDBCF2FF0080EDBCF30F004EC33 +:101A200025F02EC014F02FC015F030C016F031C0D4 +:101A300017F0A60E336E280E346E940E356E3F0EE0 +:101A4000366E14C02EF015C02FF016C030F017C03F +:101A500031F01EEC26F02EC010F02FC011F030C077 +:101A600012F031C013F0BD0E336E370E346E860E99 +:101A7000356E410E366E10C02EF011C02FF012C020 +:101A800030F013C031F01EEC26F0BAEC26F02DC079 +:101A90000CF02EC00DF02FC00EF030C00FF00CC0B7 +:101AA000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E25 +:101AB000DBCF2FF0060EDBCF30F004EC25F02EC08C +:101AC0001CF02FC01DF030C01EF031C01FF0A60E5C +:101AD000336E280E346E940E356E3F0E366E1CC07B +:101AE0002EF01DC02FF01EC030F01FC031F01EECD4 +:101AF00026F0BAEC26F02DC018F02EC019F02FC039 +:101B00001AF030C01BF018C0E6FF19C0E6FF1AC07B +:101B1000E6FF1BC0E6FF010EE66EB6EC17F0206E86 :101B20000D0EE15E2050020E0501095D04E0050185 -:101B3000095101E0D7D0090EDBCF2FF00A0EDBCF21 -:101B400030F0EDEC24F02EC008F02FC009F030C0CA +:101B3000095101E0DFD0090EDBCF2FF00A0EDBCF19 +:101B400030F004EC25F02EC008F02FC009F030C0B2 :101B50000AF031C00BF0A60E336E280E346E940ED0 :101B6000356E3F0E366E08C02EF009C02FF00AC049 -:101B700030F00BC031F007EC26F02EC004F02FC07F +:101B700030F00BC031F01EEC26F02EC004F02FC068 :101B800005F030C006F031C007F0CC0E336EBC0E4D :101B9000346E8C0E356E3B0E366E04C02EF005C0D2 -:101BA0002FF006C030F007C031F007EC26F0A3ECB0 +:101BA0002FF006C030F007C031F01EEC26F0BAEC82 :101BB00026F02DC000F02EC001F02FC002F030C082 :101BC00003F000C0E6FF01C0E6FF02C0E6FF03C06D -:101BD000E6FF070EDBCF2FF0080EDBCF30F0EDEC89 -:101BE00024F02EC014F02FC015F030C016F031C014 +:101BD000E6FF070EDBCF2FF0080EDBCF30F004EC72 +:101BE00025F02EC014F02FC015F030C016F031C013 :101BF00017F0A60E336E280E346E940E356E3F0E1F :101C0000366E14C02EF015C02FF016C030F017C07D -:101C100031F007EC26F02EC010F02FC011F030C0CC +:101C100031F01EEC26F02EC010F02FC011F030C0B5 :101C200012F031C013F0BD0E336E370E346E860ED7 :101C3000356E410E366E10C02EF011C02FF012C05E -:101C400030F013C031F007EC26F0A3EC26F02DC0E5 +:101C400030F013C031F01EEC26F0BAEC26F02DC0B7 :101C50000CF02EC00DF02FC00EF030C00FF00CC0F5 :101C6000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E63 -:101C7000DBCF2FF0060EDBCF30F0EDEC24F02EC0E2 +:101C7000DBCF2FF0060EDBCF30F004EC25F02EC0CA :101C80001CF02FC01DF030C01EF031C01FF0A60E9A :101C9000336E280E346E940E356E3F0E366E1CC0B9 -:101CA0002EF01DC02FF01EC030F01FC031F007EC29 -:101CB00026F0A3EC26F02DC018F02EC019F02FC08E -:101CC0001AF030C01BF018C0E6FF19C0E6FF1AC0BA -:101CD000E6FF1BC0E6FFE66A9FEC17F0206E0D0ED4 -:101CE000E15E2050B7D3060E0AC5DBFF050E0BC51B -:101CF000DBFF080E0CC5DBFF070E0DC5DBFF020E78 -:101D00000501095D02E0000E01D0010E000E000980 -:101D100001E1A7D00EC5E6FF070EDBCF2FF0080EBE -:101D2000DBCF30F0EDEC24F02EC008F02FC009F02E -:101D300030C00AF031C00BF0A60E336E280E346EA0 -:101D4000940E356E3F0E366E08C02EF009C02FF08F -:101D50000AC030F00BC031F007EC26F02EC004F0C2 -:101D60002FC005F030C006F031C007F0CC0E336E46 -:101D7000BC0E346E8C0E356E3B0E366E04C02EF0EB -:101D800005C02FF006C030F007C031F007EC26F098 -:101D9000A3EC26F02DC000F02EC001F02FC002F001 -:101DA00030C003F000C0E6FF01C0E6FF02C0E6FF5E -:101DB00003C0E6FF050EDBCF2FF0060EDBCF30F0C1 -:101DC000EDEC24F02EC014F02FC015F030C016F04A -:101DD00031C017F0A60E336E280E346E940E356E99 -:101DE0003F0E366E14C02EF015C02FF016C030F026 -:101DF00017C031F007EC26F02EC010F02FC011F004 -:101E000030C012F031C013F0BD0E336E370E346E99 -:101E1000860E356E410E366E10C02EF011C02FF0BA -:101E200012C030F013C031F007EC26F0A3EC26F01E -:101E30002DC00CF02EC00DF02FC00EF030C00FF0F2 -:101E40000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FFC8 -:101E500009C5E6FFE1EC17F0186E0A0EE15E1850B6 -:101E60005ED1020E0501095D04E00501090501E0EE -:101E7000A9D0FF0E05010E03F350E66E070EDBCF6F -:101E80002FF0080EDBCF30F0EDEC24F02EC008F080 -:101E90002FC009F030C00AF031C00BF0A60E336E2F -:101EA000280E346E940E356E3F0E366E08C02EF03E -:101EB00009C02FF00AC030F00BC031F007EC26F05B -:101EC0002EC004F02FC005F030C006F031C007F07E -:101ED000CC0E336EBC0E346E8C0E356E3B0E366EF1 -:101EE00004C02EF005C02FF006C030F007C031F05E -:101EF00007EC26F0A3EC26F02DC000F02EC001F078 -:101F00002FC002F030C003F000C0E6FF01C0E6FFC2 -:101F100002C0E6FF03C0E6FF050EDBCF2FF0060E82 -:101F2000DBCF30F0EDEC24F02EC014F02FC015F014 -:101F300030C016F031C017F0A60E336E280E346E86 -:101F4000940E356E3F0E366E14C02EF015C02FF075 -:101F500016C030F017C031F007EC26F02EC010F09C -:101F60002FC011F030C012F031C013F0BD0E336E2F -:101F7000370E346E860E356E410E366E10C02EF062 -:101F800011C02FF012C030F013C031F007EC26F072 -:101F9000A3EC26F02DC00CF02EC00DF02FC00EF0DB -:101FA00030C00FF00CC0E6FF0DC0E6FF0EC0E6FF2C -:101FB0000FC0E6FF010EE66EE1EC17F0186E0A0E98 -:101FC000E15E1850020E0501095D04E005010951AA -:101FD00001E0A5D00EC5E6FF070EDBCF2FF0080EFF -:101FE000DBCF30F0EDEC24F02EC008F02FC009F06C -:101FF00030C00AF031C00BF0A60E336E280E346EDE -:10200000940E356E3F0E366E08C02EF009C02FF0CC -:102010000AC030F00BC031F007EC26F02EC004F0FF -:102020002FC005F030C006F031C007F0CC0E336E83 -:10203000BC0E346E8C0E356E3B0E366E04C02EF028 -:1020400005C02FF006C030F007C031F007EC26F0D5 -:10205000A3EC26F02DC000F02EC001F02FC002F03E -:1020600030C003F000C0E6FF01C0E6FF02C0E6FF9B -:1020700003C0E6FF050EDBCF2FF0060EDBCF30F0FE -:10208000EDEC24F02EC014F02FC015F030C016F087 -:1020900031C017F0A60E336E280E346E940E356ED6 -:1020A0003F0E366E14C02EF015C02FF016C030F063 -:1020B00017C031F007EC26F02EC010F02FC011F041 -:1020C00030C012F031C013F0BD0E336E370E346ED7 -:1020D000860E356E410E366E10C02EF011C02FF0F8 -:1020E00012C030F013C031F007EC26F0A3EC26F05C -:1020F0002DC00CF02EC00DF02FC00EF030C00FF030 -:102100000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FF05 -:10211000E66AE1EC17F0186E0A0EE15E18509AD1EB -:10212000060E0AC5DBFF050E0BC5DBFF020E05011F -:10213000095D02E0000E01D0010E000E000959E019 -:102140000CC5E6FF050EDBCF2FF0060EDBCF30F01F -:10215000EDEC24F02EC008F02FC009F030C00AF0DA -:1021600031C00BF0A60E336E280E346E940E356E11 -:102170003F0E366E08C02EF009C02FF00AC030F0B6 -:102180000BC031F007EC26F02EC004F02FC005F094 -:1021900030C006F031C007F0BD0E336E370E346E1E -:1021A000860E356E410E366E04C02EF005C02FF03F -:1021B00006C030F007C031F007EC26F0A3EC26F0A3 -:1021C0002DC000F02EC001F02FC002F030C003F08F -:1021D00000C0E6FF01C0E6FF02C0E6FF03C0E6FF65 -:1021E00009C5E6FF25EC18F00C6E060EE15E0C50FA -:1021F000C0D0020E0501095D03E0050109055BE1A0 -:10220000FF0E05010C03F350E66E050EDBCF2FF039 -:10221000060EDBCF30F0EDEC24F02EC008F02FC01E -:1022200009F030C00AF031C00BF0A60E336E280E54 -:10223000346E940E356E3F0E366E08C02EF009C017 -:102240002FF00AC030F00BC031F007EC26F02EC0A2 -:1022500004F02FC005F030C006F031C007F0BD0E0D -:10226000336E370E346E860E356E410E366E04C0F8 -:102270002EF005C02FF006C030F007C031F007EC9B -:1022800026F0A3EC26F02DC000F02EC001F02FC0E8 -:1022900002F030C003F000C0E6FF01C0E6FF02C05C -:1022A000E6FF03C0E6FF010EE66E25EC18F00C6EAB -:1022B000060EE15E0C50020E0501095D03E005010A -:1022C000095157E10CC5E6FF050EDBCF2FF0060ED6 -:1022D000DBCF30F0EDEC24F02EC008F02FC009F079 -:1022E00030C00AF031C00BF0A60E336E280E346EEB -:1022F000940E356E3F0E366E08C02EF009C02FF0DA -:102300000AC030F00BC031F007EC26F02EC004F00C -:102310002FC005F030C006F031C007F0BD0E336E9F -:10232000370E346E860E356E410E366E04C02EF0BA -:1023300005C02FF006C030F007C031F007EC26F0E2 -:10234000A3EC26F02DC000F02EC001F02FC002F04B -:1023500030C003F000C0E6FF01C0E6FF02C0E6FFA8 -:1023600003C0E6FFE66A25EC18F00C6E060EE15E8F -:102370000C5070D009C5E6FF3DEC18F0E5520101A4 -:10238000010E526F67D048EC1BF0050EF3CFDBFF58 -:10239000060EF4CFDBFF5EEC1BF0070EF3CFDBFF86 -:1023A000080EF4CFDBFF00C540F50501416B0501C8 -:1023B000030E426F0501436B060EDBCF48F5050E99 -:1023C000DBCF49F5080EDBCF4AF5070EDBCF4BF527 -:1023D000400EE66E400EE66E050EE66E010EE66EEF -:1023E000010EE66E98EC23F0006E050EE15E0050E3 -:1023F000F3CF49F1F4CF4AF12DD000C540F50501E6 -:10240000416B0501030E426F0501436B75EC1BF038 -:10241000000904E00501010E486F02D00501486B78 -:10242000400EE66E400EE66E050EE66E010EE66E9E -:10243000010EE66E98EC23F0006E050EE15E005092 -:10244000F3CF49F1F4CF4AF105D0010EE66E90ECDE -:1024500033F0E552400EE66E000EE66E050EE66EB7 -:10246000E66A010EE66E98EC23F0006E050EE15E62 -:102470000050F3CF47F1F4CF48F19FD0010149510B -:102480004A1102E1000E08D049C1E9FF4AC1EAFF42 -:10249000EF50800B01E0010E00094DE10101010E3A -:1024A000516F0501406B01014C514C2B0501416FEF -:1024B0000501050E426F0501436B0501486B8C0E4B -:1024C000006E640E016E026A00C0E6FF01C0E6FF06 -:1024D00002C0E6FF480EE66E050EE66ECEEC32F068 -:1024E000036E050EE15E0350400EE66E400EE66E92 -:1024F000050EE66E010EE66E010EE66E98EC23F018 -:10250000006E050EE15E0050F3CF49F1F4CF4AF1C1 -:10251000400EE66E000EE66E050EE66EE66A010EF1 -:10252000E66E98EC23F0006E050EE15E0050F3CFEE -:1025300047F1F4CF48F141D0010149514A1102E17C -:10254000000E08D049C1E9FF4AC1EAFFEF50800BF5 -:1025500001E0010E000931E100C540F50501416BC4 -:102560000501030E426F0501010E436F400EE66E3A -:10257000400EE66E050EE66E010EE66E010EE66E8C -:1025800098EC23F0006E050EE15E0050F3CF49F1A8 -:10259000F4CF4AF1400EE66E000EE66E050EE66ED2 -:1025A000E66A010EE66E98EC23F0006E050EE15E21 -:1025B0000050F3CF47F1F4CF48F10F0EE15C02E297 -:1025C000E16AE552E16EE552E7CFD9FF1200010161 -:1025D0005351541104E1100E536F270E546F5307DB -:1025E000000E545B6DA207D0535154112EE18C7430 -:1025F0008CB413D027D00101005102E18C9422D079 -:10260000000502E18C8409D0020E005D02E18C8499 -:1026100019D0040E005D03E18C948C861200100E1C -:10262000005D06E10101535154110FE18C740AD091 -:10263000200E005D0AE101015351541106E18C7432 -:102640008CA402D08C9612008C861200120012000C -:102650001200120037EF31F012001E0EE66E010E6E -:10266000E66E66EC23F0E552E552400EE66E000E93 -:10267000E66E050EE66EE66A010EE66E98EC23F055 -:10268000006E050EE15E0050F3CF47F1F4CF48F144 -:1026900012006D840101080E686F070E696F6807EC -:1026A000000E695B68516911FAE16D941200D9CF8F -:1026B000E6FFE1CFD9FFFD0EDBCF2FF0FE0EDBCF23 -:1026C00030F0010E2F1801E1305033E0E8682F1888 -:1026D00002E1E86830182BE0030E2F1801E13050BA -:1026E00024E0040E2F1801E130501DE0020E2F18D7 -:1026F00001E1305016E0170E2F1801E130500FE0C5 -:10270000160E2F1801E1305008E0150E2F1801E1C8 -:10271000305001E010D0A1DF0FD09EDF0DD09ADF46 -:102720000BD096DF09D092DF07D091DF05D091DF83 -:1027300003D0000001D000D0010E00D0E552E7CF59 -:10274000D9FF12004BD8E652D0B202D0010E15D0FC -:10275000D0B802D0020E11D0D0B002D0030E0DD0EE -:10276000D0B602D0040E09D0FCAE02D0050E05D0C2 -:10277000FCAC02D0060E01D0070EDF6ED088D086EA -:10278000D084D082D080FC9EFC9CDF50E552E55284 -:10279000E7CFD9FF1200E65221D8020EE126F3500E -:1027A000DF6E010EF4CFDBFF1200C00EE66EE00E0E -:1027B000E66E74EC33F0E552E5521200DF50F36E32 -:1027C000010EDB50F46E020EE15C1200DFCFE6FF7B -:1027D000E66AEAEC32F0E552E5521200D9CFE6FFA4 -:0627E000E1CFD9FF120059 -:0A27E60083EC1CF0FE0EDB5006E150 -:1027F000F80E96163C0E9416959808D0FE0EDB0443 -:1028000005E1070E9612C30E9412958888EF1CF00E -:10281000D9CFE6FFE1CFD9FFE652010EE66EE3DF46 -:10282000E552809AFE0EDB5004E0FE0EDB500208FB -:102830000FE1839C81880000839E0000000000005F -:102840008450010BDF6E838E00000000DF04F4E093 -:10285000FE0EDB0404E0FE0EDB5002080FE1838C69 -:1028600081980000839E0000000000008450010B4E -:10287000DF6E838E00000000DF04F4E0E552E552D5 -:10288000E7CFD9FF1200D9CFE6FFE1CFD9FFE6525B -:10289000FD0EDB50DF6EFE0EDBCFE6FFB9DFE5524B -:1028A000E66AA1DFE552FE0EDB5003E1839C8188DE -:1028B0000CD0FE0EDB0403E1838C819806D0FE0E63 -:1028C000DB50020802E1839C8198809A0000809886 -:1028D000D9CFE9FFDACFEAFFEF50010B02E08480A5 -:1028E00001D08490D9CFE9FFDACFEAFFEF50020B95 -:1028F00002E0848201D08492D9CFE9FFDACFEAFFE7 -:10290000EF50040B02E0848401D08494D9CFE9FF16 -:10291000DACFEAFFEF50080B02E0838801D08398FA -:10292000D9CFE9FFDACFEAFFEF50100B02E0828245 -:1029300001D08292D9CFE9FFDACFEAFFEF50200B26 -:1029400002E0828E01D0829ED9CFE9FFDACFEAFF82 -:10295000EF50400B02E0828001D08290D9CFE9FF96 -:10296000DACFEAFFEF50800B02E0828C01D0829C2C -:1029700000000000808800000000E552E552E7CF2B -:10298000D9FF1200D9CFE6FFE1CFD9FF020EE12631 -:10299000FC0EDBCFDEFFDBCFDDFFFE0EDBCFE6FF85 -:1029A00037DFE552E66A1FDFE552FE0EDB5003E13A -:1029B000839C81880CD0FE0EDB0403E1838C81981C -:1029C00006D0FE0EDB50020802E1839C8198808ACB -:1029D00000008098D9CFE9FFDACFEAFFEE52EF503E -:1029E000010B02E0848001D08490D9CFE9FFDACFD7 -:1029F000EAFFEE52EF50020B02E0848201D0849293 -:102A0000D9CFE9FFDACFEAFFEE52EF50040B02E034 -:102A1000848401D08494D9CFE9FFDACFEAFFEE5263 -:102A2000EF50080B02E0838801D08398D9CFE9FFEB -:102A3000DACFEAFFEE52EF50100B02E0828201D0B3 -:102A40008292D9CFE9FFDACFEAFFEE52EF50200BA6 -:102A500002E0828E01D0829ED9CFE9FFDACFEAFF71 -:102A6000EE52EF50400B02E0828001D08290D9CF2D -:102A7000E9FFDACFEAFFEE52EF50800B02E0828CE2 -:102A800001D0829C00000000808800000000809837 -:102A9000D9CFE9FFDACFEAFFEF50010B02E08480E3 -:102AA00001D08490D9CFE9FFDACFEAFFEF50020BD3 -:102AB00002E0848201D08492D9CFE9FFDACFEAFF25 -:102AC000EF50040B02E0848401D08494D9CFE9FF55 -:102AD000DACFEAFFEF50080B02E0838801D0839839 -:102AE000D9CFE9FFDACFEAFFEF50100B02E0828284 -:102AF00001D08292D9CFE9FFDACFEAFFEF50200B65 -:102B000002E0828E01D0829ED9CFE9FFDACFEAFFC0 -:102B1000EF50400B02E0828001D08290D9CFE9FFD4 -:102B2000DACFEAFFEF50800B02E0828C01D0829C6A -:102B300000000000808800000000020EE15C02E25C -:102B4000E16AE552E16EE552E7CFD9FF1200D9CF35 -:102B5000E6FFE1CFD9FF020EE126FE0EDBCFE6FF56 -:102B600057DEE552010EE66E3EDEE552FE0EDB500C -:102B700003E1839C818805D0FE0EDB0402E1838C97 -:102B80008198808A0000839E00000000000084502D -:102B9000010B066E8450020B01E0010EE824056E65 -:102BA0008450040B01E0010E040DF3CF04F08350B8 -:102BB000100B01E0010E080DF3CF03F08250020B61 -:102BC00001E0010E100DF3CF02F08250800B01E006 -:102BD000010E200DF3CF01F08250010B400DF3CF19 -:102BE00000F08250400B01E0010E800DF350001008 -:102BF000011002100310041005100610E76E010EFC -:102C0000E7CFDBFF838E00000000839E0000000002 -:102C100000008450010B066E8450020B01E0010E8F -:102C2000E824056E8450040B01E0010E040DF3CF7F -:102C300004F08350100B01E0010E080DF3CF03F0F8 -:102C40008250020B01E0010E100DF3CF02F0825012 -:102C5000800B01E0010E200DF3CF01F08250010B3B -:102C6000400DF3CF00F08250400B01E0010E800DCB -:102C7000F35000100110021003100410051006108C -:102C8000DF6E838EDECF00F0DDCF01F000C0F3FFFA -:102C900001C0F4FF00D0020EE15C02E2E16AE552FD -:102CA000E16EE552E7CFD9FF1200D9CFE6FFE1CFC1 -:102CB000D9FFE652DF6AFE0EDBCFE6FFA9DDE55263 -:102CC000010EE66E90DDE552FE0EDB5003E1839CC3 -:102CD000818805D0FE0EDB0402E1838C8198809A06 -:102CE0000000839E0000000000008450010B066E6F -:102CF0008450020B01E0010EE824056E8450040BA1 -:102D000001E0010E040DF3CF04F08350100B01E03D -:102D1000010E080DF3CF03F08250020B01E0010E0B -:102D2000100DF3CF02F08250800B01E0010E200D58 -:102D3000F3CF01F08250010B400DF3CF00F0825031 -:102D4000400B01E0010E800DF35000100110021045 -:102D50000310041005100610DF6E838EDF5000D0C4 -:102D6000E552E552E7CFD9FF120083EC1CF0E652A2 -:102D7000DF6AE9EC1CF0DF6EFD0EDB50DF14DF6E66 -:102D8000DF5002E0010E01D0000EE55288EF1CF08A -:102D900083EC1CF01D0E4EEC1CF0000E67EC1EF0D8 -:102DA00088EF1CF083EC1CF0E9EC1CF084080FE0C9 -:102DB000E9EC1CF0C4080BE0E66A70EC1EF02BECAA -:102DC0001EF0020EE66EC3EC33F0E552EDD71C0E9A -:102DD0004EEC1CF00A0E67EC1EF03CEC1DF0E9EC2A -:102DE0001CF0800804E0E9EC1CF0C008E5E1E9EC27 -:102DF0001CF0C00802E13CEC1DF01E0E4EEC1CF075 -:102E00000F0E67EC1EF011EC1FF0FA0EDBCFE6FFA1 -:102E1000FB0EDBEC1DF0F80EDBCFE6FFF90EDBEC72 -:102E20001DF0F60EDBCFE6FFF70EDBEC1DF0040E17 -:102E30004EEC1CF088EF1CF083EC1CF0080EE12631 -:102E4000010E80EC1CF0010EE7CFDBFF020E8CECD4 -:102E50001EF0DF6E030E80EC1CF0030EE7CFDBFFED -:102E6000040E80EC1CF0020EE7CFDBFF050E80ECB9 -:102E70001CF0050EE7CFDBFF060E80EC1CF0040E05 -:102E8000E7CFDBFF070E80EC1CF0070EE7CFDBFF80 -:102E9000080E80EC1CF0B5EC1CF0E66A41EC1DF06D -:102EA000090E80EC1CF0010EE7CFDBFF0A0E8CEC64 -:102EB0001EF0DF6E0B0E80EC1CF0030EE7CFDBFF85 -:102EC0000C0E80EC1CF0020EE7CFDBFF0D0E80EC49 -:102ED0001CF0050EE7CFDBFF0E0E80EC1CF0040E9D -:102EE000E7CFDBFF0F0E80EC1CF0070EE7CFDBFF18 -:102EF000100E80EC1CF0B5EC1CF0010EE66E41ECFF -:102F00001DF0020EE66E34EC1DF0020EE66EE66A6F -:102F100027EC1DF007E1020EE66E010EE66E27ECCF -:102F20001DF002E0000E01D0010E006E080EE15C03 -:102F300002E2E16AE552E16E005088EF1CF083EC9A -:102F40001CF00C0E8CEC1CF0D950F20F6BEC1EF048 -:102F5000080EEECFDBFF090EEECFDBFF0A0EEECF41 -:102F6000DBFF0B0EEECFDBFF1F0E4EEC1CF02DEC4B -:102F70001DF00A0EDBCF02F00B0E48EC1DF010E046 -:102F80002B0E67EC1EF00A0EDBCFE6FF0B0EDBEC20 -:102F90001DF0080EDBCFE6FF090EDBCFE6FF03D006 -:102FA0000B0EE66EE66AE0EC1EF0DBEC1DF0EBECDF -:102FB0001EF00C0EE15C02E2E16AE552E16E88EF80 -:102FC0001CF083EC1CF00A0E8CEC1CF0080EDB6A83 -:102FD000090EDB6A1F0E4EEC1CF0F50EDBCF00F085 -:102FE000003407E2080EDB6A100EF36E090EF3CF11 -:102FF000DBFF040EDBCF00F0050EDBCF01F0060E89 -:10300000DBCF02F0070E48EC1DF00DE02DEC1DF0BB -:10301000280E0012080E011256EC1DF0E0EC1EF016 -:10302000DBCFE6FF07D02DEC1DF0080E00120112D9 -:1030300056EC1DF0F6DBEBEC1EF00A0EE15C02E252 -:10304000E16AE552E16E88EF1CF083EC1CF0F90EAA -:10305000DBCFE6FFE66AE66AE66AE66AD950FA0F6F -:103060006BEC1EF0F2EC1EF070EC1EF0AADF006EAE -:103070000A0EE15E005088EF1CF083EC1CF0FE0E9F -:10308000DB5004E0FE0EDB5002080FE117EC1FF0EE -:103090007BEC1EF0F3CF61F1F4CF62F1E66A7BECDA -:1030A0001EF0F3CF5FF1F4CF60F1FE0EDB0404E01D -:1030B000FE0EDB50020810E174EC1EF07BEC1EF0FB -:1030C000F3CF65F1F4CF66F1010EE66E7BEC1EF0F6 -:1030D000F3CF63F1F4CF64F1010EE0DB88EF1CF075 -:1030E00083EC1CF01F0EDADB11EC1FF0010ED6DBB7 -:1030F00088EF1CF091EC1EF0FE0EDB50020805E19B -:103100002D6A2E6A2F6A306A12D00B0EC7DB70EC64 -:103110001EF0F6EC1CF0DE6ADD6ADECF2DF0DECFAD -:103120002EF0DECF2FF0DDCF30F0DD52DD52040E79 -:10313000E15C02E2E16AE552E16EEAD330EC1EF0B6 -:10314000EEEC1CF035EC1EF098DBCEEC1CF0E0D37E -:1031500030EC1EF092DBE66AF2DE35EC1EF0A2ECFB -:103160001EF0CEEC1CF0D4D31DEC1FF086DBE66A1B -:10317000E6DE37EC1DF074EC1DF07FDB01EF1EF096 -:103180001DEC1FF0EEEC1CF037EC1DF074EC1DF0A4 -:10319000A2EC1EF001EF1EF0B6DB3C0EE126CDECFA -:1031A0001DF0AFEC1EF0CDEC1DF0FBEC1EF0A6EC1C -:1031B0001EF008C02EF009C02FF00AC030F00BC07E -:1031C00031F007EC26F0CEEC1EF019EC1EF0B8EC56 -:1031D0001EF0D7EC1EF019EC1EF004EC1DF0A6EC6E -:1031E0001EF014C02EF015C02FF016C030F017C01E -:1031F00031F007EC26F0EBEC1DF0C5EC1EF01EECF8 -:1032000025F099EC1EF0336A346A800E356E95EC29 -:103210001EF0380E2EC0DBFF390E2FC0DBFF3A0E3A -:1032200030C0DBFF3B0E31C0DBFFCDEC1DF099EC75 -:103230001EF0D8DB19EC1EF042DBD4DB66EC2EF07E -:10324000086E080EE15E0850080E2DC0DBFF090E67 -:103250002EC0DBFF0A0E2FC0DBFF0B0E30C0DBFFE2 -:10326000CDDBF60EDB5007E0D950F40F6BEC1EF00F -:10327000EE50ED103AE171DB080EDBCF0EF0090ED7 -:10328000DBCF0FF00A0EDBCF10F00B0E58DA3ADA74 -:103290000CEC1EF02E6A2F6A800E306E400E316EDE -:1032A000380EDBCF33F0390EDBCF34F03A0EDBCF04 -:1032B00035F03B0E0DEC1FF039EC1EF093DB24ECE7 -:1032C0001EF02DC002F02EC003F02FC004F030C05D -:1032D00005F02DC02EF085EC1EF01EEC1EF02EDF4A -:1032E0000A6E060EE15E0A50CCD1380EDBCF04F038 -:1032F000390EDBCF05F03A0EDBCF06F03B0EDBCF0D -:1033000007F00C6A0D6A0E6A400E0F6E91DA07EC38 -:1033100026F099EC1DF0F40EDBCF2FF0F50E74DBE8 -:1033200087DBE8EC1DF01EEC25F0140E2EC0DBFF51 -:10333000150E2FC0DBFF160E30C0DBFF170E2EDA86 -:10334000CDEC1DF0E8EC1DF007EC26F0180E2EC0B9 -:10335000DBFF190E2FC0DBFF1A0E30C0DBFF1B0E88 -:103360001DDA19EC1EF0B8EC1EF0E8EC1DF007ECCD -:1033700026F01C0E2EC0DBFF1D0E2FC0DBFF1E0E25 -:1033800030C0DBFF1F0E31C0DBFF1C0EDBCF00F0B7 -:103390001D0EDBCF01F01E0EDBCF02F01F0EDBCFC8 -:1033A00003F07DDBDFEC1DF007EC26F0200E2EC0D5 -:1033B000DBFF210E2FC0DBFF220E30C0DBFF230E10 -:1033C00031C0DBFFD950180FE96EDACFEAFF240EC7 -:1033D000EECFDBFF250EEECFDBFF260EEECFDBFFC1 -:1033E000270EEECFDBFFFD0EDBCF2FF0FE0E3BEC0A -:1033F0001FF0200EDBCF33F0210EDBCF34F0220E96 -:10340000DBCF35F0230EEADB280E2EC0DBFF290EC2 -:103410002FC0DBFF2A0E30C0DBFF2B0E31C0DBFFDD -:1034200019EC1EF03BEC1FF0240EDBCF33F0250E21 -:10343000DBCF34F0260EDBCF35F0270ECFDB2C0EA2 -:103440002EC0DBFF2D0E2FC0DBFF2E0E30C0DBFFAA -:103450002F0E31C0DBFF2C0EDBCF04F02D0EDBCFA7 -:1034600005F02E0EDBCF06F02F0EDBCF07F017DBBB -:10347000C5EC1EF007EC26F09CDA300E2EC0DBFF08 -:10348000310E2FC0DBFF320E30C0DBFF330E31C0F8 -:10349000DBFF280EDBCF2EF0290EDBCF2FF02A0E1C -:1034A000DBCF30F02B0EDBCF31F083DA340E2EC0C1 -:1034B000DBFF350E2FC0DBFF360E30C0DBFF370ED3 -:1034C00031C0DBFFD950300F63DBD950340F60DBE4 -:1034D00066EC2EF0006E080EE15E00500C0E2DC062 -:1034E000DBFF0D0E2EC0DBFF0E0E2FC0DBFF0F0E1D -:1034F00030C0DBFF006A016A026A400E036ED6DA52 -:1035000002C0E6FFE66E35DBAFEC1EF06BDA21ECB5 -:103510001FF02DC014F02EC015F02FC016F030C0D3 -:1035200017F0A2EC1EF066EC2EF0186E080EE15EAD -:103530001850E552E7CF03F0E552E7CF02F0E5522D -:10354000E7CF01F0E552E7CF00F02DC004F02EC028 -:1035500005F02FC006F030C007F094DB30DB07EC3D -:1035600026F0100E2EC0DBFF110E2FC0DBFF120E57 -:1035700030C0DBFF130E31C0DBFFF60EDB5002085C -:103580001BE131DB1DEC25F086DB1EEC25F08AD932 -:1035900045DA060E2FC0DBFF070E30C0DBFF000E42 -:1035A000DFCF2FF0010E8BD97DDBC3DAFCDA040EFE -:1035B0002FC0DBFF050E4ED02E6A2F6A306A400EF8 -:1035C000316E080EDBCF33F0090EDBCF34F00A0E7C -:1035D000DBCF35F00B0E0DEC1FF0ABDB0C0EDBCFB1 -:1035E00004F00D0EDBCF05F00E0EDBCF06F00F0E54 -:1035F000DBCF07F004C033F005C034F006C035F06F -:1036000007C036F01DEC25F00C0E2EC0DBFF0D0EB2 -:103610002FC0DBFF0E0E30C0DBFF0F0E31C0DBFF13 -:10362000E2DA1EEC25F037DB1DEC25F03BD9F6D9AC -:10363000040E2FC0DBFF050E30C0DBFF020EDBCF18 -:103640002FF0030E3CD934DB74DAADDA060E2FC04E -:10365000DBFF070E30C0DBFF55D809D9040EDBCFE6 -:103660002FF0050E28DA24DB57D8B8D9F6DBFFD8BF -:10367000060EDBCF2FF0070E1EDA14DB4DD8FDD877 -:103680008DD93C0EE15C02E2E16AE552E16E40D187 -:1036900048DBCDDBABD9E66AD0D901015F51EE5CE6 -:1036A000066E6051EE58076E6151EE58086E625119 -:1036B00009D902E2E16AE552E16E2AD132DB14DB7C -:1036C00095D9010EE66EB9D901016351EE5C066E23 -:1036D0006451EE58076E6551EE58086E6651F2D887 -:1036E00002E2E16AE552E16E13D1040EE66EE66A8B -:1036F000AED906E0040EE66E010EE66EA8D901E131 -:10370000000C010CF2DF0009FDE01200ABDB18DA5F -:1037100090DAD1D9CDEF1DF02EC01CF02FC01DF0D6 -:1037200030C01EF031C01FF027DBA1DB2DC018F028 -:103730002EC019F02FC01AF030C01BF01200DBCFE2 -:1037400011F0336A346A340E356E430E366E0EC095 -:103750002EF00FC02FF010C030F011C031F007EC88 -:1037600026F02EC00AF02FC00BF030C00CF031C094 -:103770000DF0DB0E336E0F0E346E490E356ED5DA5A -:1037800078DAE4DA02C02EF0C0DA1DEC25F056DA61 -:10379000EBDC126E060EE15E1250120031C0DBFF50 -:1037A000046A056A800E066E3F0E076E0C6A0D6A8B -:1037B0000E6A400E0F6E04C0E6FF05C0E6FF06C0AD -:1037C000E6FF07C0E6FF0CC0E6FF0DC0E6FF0EC037 -:1037D000E6FFE66E36DBE552E7CF0FF0E552E7CFC6 -:1037E0000EF0E552E7CF0DF0E552E7CF0CF0E552D1 -:1037F000E7CF07F0E552E7CF06F0E552E7CF05F057 -:10380000E552E7CF04F02DC010F02EC011F02FC00C -:1038100012F030C013F036DA51DA07EC26F099EFE7 -:103820001DF05EDAC2EC14F0E552E552E5521200EA -:10383000F40EDBCF2FF0F50E9BDACDD95EEF1EF044 -:1038400085DADFEF1DF0140EDBCF00F0150EDBCFB5 -:1038500001F0160EDBCF02F0170EDBCF03F0336A58 -:10386000346ADC0E356E420E366EDFEF1DF0F70E59 -:10387000DBCF2FF0F80EA0EF1DF0000E186C191E14 -:1038800019221A1E1A221B1E1B2218C0E6FF19C07D -:10389000E6FF1AC0E6FF1BC0E6FF1200E66E20DA64 -:1038A0002BEF1EF0100EDBCF33F0110EDBCF34F018 -:1038B000120EDBCF35F0130EB0DA74EF26F058DAC3 -:1038C000CEEF1EF0EE58096E06C02DF007C02EF0A8 -:1038D00008C02FF0306E04EC25F02EC002F02FC08F -:1038E00003F030C004F031C005F046DAB4EC25F046 -:1038F000ADDA2FC0F3FF30C0F4FF040EE15C12001C -:103900000BDAE76E1200D9CFE6FFE1CFD9FF120044 -:10391000E552E7CFD9FF1200E126D9CFE9FFDACF90 -:10392000EAFFFA0EDBCFEEFFFB0EDBCFEEFFFC0E65 -:10393000DBCFEEFFFD0EDBCFEEFFD950F60FCBD97C -:10394000040EEECFDBFF050EEECFDBFF060EEECF53 -:10395000DBFF070EEECFDBFF12005ED9026A036ABF -:10396000B40E046E420E056E1200060EE7CFDBFFAA -:10397000DBCFE6FF070EDBCFE6FF040EDBCFE6FF73 -:10398000050EDBCFE6FF020EDBCFE6FF030EDBCF3B -:10399000E6FFDECFE6FFDDCFE6FF1200010EE66EAA -:1039A0009FEC17F05ADA020EE66E3DEC18F0E55285 -:1039B0001200140EDBCF33F0150EDBCF34F0160EF1 -:1039C000DBCF35F0170EDBCF36F0B4EC25F099EFF6 -:1039D0001EF086D955EC16F0E5521200B3D9E66A0E -:1039E0009FEF17F04DDA31C0E6FF120084D9020EC6 -:1039F000F3CFDBFF030EF4CFDBFF1200020EE66E07 -:103A0000C8EC16F0E5521200B3D92EC018F02FC042 -:103A100019F030C01AF031C01BF01200020E2FC096 -:103A2000DBFF030E30C0DBFF1DDADBCF30F012000E -:103A3000336A346A356A95EF1EF05DD9F3CFDEFF45 -:103A4000F4CFDDFFD9CFE9FFDACFEAFF1200B5EC02 -:103A500016F0E552E55200091200080EDBCF00F027 -:103A6000090EDBCF01F01200E66E2BEF1EF0286E80 -:103A70000D0EE15E2850120033D9C8EC16F0E55265 -:103A80001200D2EC16F0006E090EE15E005012003A -:103A9000DBCF03F000500110021003101200336A54 -:103AA000346A800E356EBF0E366E120000C0E6FF1F -:103AB00001C0E6FF12005CD97AD95ED907EC26F086 -:103AC000A3D9BD0E336E370E346E860E356E410EA1 -:103AD000366ECDD92DC00CF02EC00DF02FC00EF0DB -:103AE00030C00FF0A2EF1EF011DE2EC024F02FC068 -:103AF00025F030C026F031C027F0350E336EFA0EB7 -:103B0000346E0E0E356E3C0E366E07EC26F02EC06F -:103B100020F02FC021F030C022F031C023F0336AF2 -:103B2000346A5C0E356E430E366E07EC26F08CEF71 -:103B30001BF015D90BD929D9B4EC25F099... [truncated message content] |
From: Olivier B. <Ba...@us...> - 2010-02-24 20:18:41
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 03b2d41ebef871da47dc3cc3a72773b838fc5c5d (commit) via 421de24efb03bcaa1919f0799f9aa8637cfcb88d (commit) via 6d97e2de14f3e17bba824ae17e4630ed4a5ff5b8 (commit) from 0e26131ab8db136ad132bee9e796b91bcfa54ef8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 03b2d41ebef871da47dc3cc3a72773b838fc5c5d Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:18:15 2010 +0100 Fixed binary commit 421de24efb03bcaa1919f0799f9aa8637cfcb88d Merge: 6d97e2de14f3e17bba824ae17e4630ed4a5ff5b8 0e26131ab8db136ad132bee9e796b91bcfa54ef8 Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:16:53 2010 +0100 Merge branch 'master' of ssh://krobot.git.sourceforge.net/gitroot/krobot/krobot commit 6d97e2de14f3e17bba824ae17e4630ed4a5ff5b8 Author: Olivier BICHLER <oli...@gm...> Date: Wed Feb 24 21:16:04 2010 +0100 Make the direction consistent for all functions ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 4037f9f..0846784 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs b/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs deleted file mode 100644 index c264c8c..0000000 --- a/USB_Module/Motor_Controller/Firmware/Motor_controller.mcs +++ /dev/null @@ -1,149 +0,0 @@ -[Header] -MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7} -Version=1.0 -[File000] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\usb_descriptors.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File001] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\main.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File002] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\eeprom.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File003] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\motor.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File004] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\lm629.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File005] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\usb_device.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File006] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\usb_function_hid.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File007] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\error.o -Folder=Intermediary -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} -LanguageToolLocation=C:\MCC18\bin\mcc18.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString= -TraceCmdString= -DebugOptions= -[File008] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\Motor_controller.cof -Folder=Output -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} -LanguageToolLocation=C:\MCC18\bin\mplink.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" -TraceCmdString= -DebugOptions= -[File009] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\Motor_controller.hex -Folder=Output -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} -LanguageToolLocation=C:\MCC18\bin\mplink.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" -TraceCmdString= -DebugOptions= -[File010] -Location=Z:\USB_Module\Motor_Controller\Firmware\output\Motor_controller.map -Folder=Output -DeviceName=PIC18F4550 -LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} -LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} -LanguageToolLocation=C:\MCC18\bin\mplink.exe -PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h;.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|motor.c|lm629.c|usb_device.c|usb_function_hid.c|error.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| -SuiteArgsString= -ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" -TraceCmdString= -DebugOptions= -[TOOL_LOC_STAMPS] -tool_loc{96C98149-AA1B-4CF9-B967-FAE79CAB663C}=C:\MCC18\bin\mplink.exe -tool_loc{E56A1C86-9D32-4DF6-8C34-FE0388B1B644}=C:\MCC18\bin\mcc18.exe diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index 45e059d..044ff6c 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -599,11 +599,11 @@ void moveForward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -621,11 +621,11 @@ void moveBackward(short pos, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) pos * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) pos * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -643,11 +643,11 @@ void turnRight(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); @@ -665,11 +665,11 @@ void turnLeft(short angle, short vel, short acc) { resetInterrupt(MOTOR_BOTH); newPosition(MOTOR_RIGHT, - - CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), + CON_MOTOR_RIGHT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_RIGHT_WHEEL), (long) ((float) vel * COEF_RIGHT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_RIGHT_WHEEL * CONST_ACC)); newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), + - CON_MOTOR_LEFT * (long) ((float) angle * CONST_POS * WHEELS_DIST * COEF_LEFT_WHEEL), (long) ((float) vel * COEF_LEFT_WHEEL * CONST_VEL), (long) ((float) acc * COEF_LEFT_WHEEL * CONST_ACC)); diff --git a/USB_Module/Motor_Controller/Firmware/lm629.h b/USB_Module/Motor_Controller/Firmware/lm629.h index 8ead717..c3040e9 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.h +++ b/USB_Module/Motor_Controller/Firmware/lm629.h @@ -25,8 +25,8 @@ #define ENCODER_RES 90 ///< Impulsions du codeur par tour de roue (prendre en compte le rcteur selon le cas !) #define WHEELS_DIAMETER 99 ///< Diame des roues (en mm) #define WHEELS_DIST 220 ///< Distance entre les 2 roues (en mm) -#define CON_MOTOR_LEFT 1 -#define CON_MOTOR_RIGHT -1 +#define CON_MOTOR_LEFT -1 +#define CON_MOTOR_RIGHT 1 /** * Parames par dult du correcteur. diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index 3d60360..332fb2e 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -1032,21 +1032,26 @@ void ProcessIO(void) { word3.byte.HB = ReceivedDataBuffer.DATA[6]; word3.byte.LB = ReceivedDataBuffer.DATA[7]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT != CON_MOTOR_LEFT) { - newPosition(MOTOR_RIGHT, + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { + newPosition(ReceivedDataBuffer.DATA[1], CON_MOTOR_RIGHT * (long) ((float) word1.Val * COEF_WHEEL), (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); - newPosition(MOTOR_LEFT, - CON_MOTOR_LEFT * (long) ((float) word1.Val * COEF_WHEEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); } else { - newPosition(ReceivedDataBuffer.DATA[1], - CON_MOTOR_RIGHT * (long) ((float) word1.Val * COEF_WHEEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { + newPosition(MOTOR_LEFT, + CON_MOTOR_LEFT * (long) ((float) word1.Val * COEF_WHEEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); + } + + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { + newPosition(MOTOR_RIGHT, + CON_MOTOR_RIGHT * (long) ((float) word1.Val * COEF_WHEEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word3.Val * COEF_WHEEL * CONST_ACC)); + } } break; @@ -1056,21 +1061,26 @@ void ProcessIO(void) { word2.byte.HB = ReceivedDataBuffer.DATA[4]; word2.byte.LB = ReceivedDataBuffer.DATA[5]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT != CON_MOTOR_LEFT) { - newVelocity(MOTOR_RIGHT, + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { + newVelocity(ReceivedDataBuffer.DATA[1], (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); - newVelocity(MOTOR_LEFT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), - CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[6]); } else { - newVelocity(ReceivedDataBuffer.DATA[1], - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { + newVelocity(MOTOR_LEFT, + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), + CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[6]); + } + + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { + newVelocity(MOTOR_RIGHT, + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + (long) ((float) word2.Val * COEF_WHEEL * CONST_ACC), + CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[6]); + } } break; @@ -1078,18 +1088,23 @@ void ProcessIO(void) { word1.byte.HB = ReceivedDataBuffer.DATA[2]; word1.byte.LB = ReceivedDataBuffer.DATA[3]; - if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT != CON_MOTOR_LEFT) { - changeVelocity(MOTOR_RIGHT, + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH && CON_MOTOR_RIGHT == CON_MOTOR_LEFT) { + changeVelocity(ReceivedDataBuffer.DATA[1], (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); - changeVelocity(MOTOR_LEFT, - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[4]); } else { - changeVelocity(ReceivedDataBuffer.DATA[1], - (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), - CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_LEFT) { + changeVelocity(MOTOR_LEFT, + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + CON_MOTOR_LEFT * ReceivedDataBuffer.DATA[4]); + } + + if (ReceivedDataBuffer.DATA[1] == MOTOR_BOTH || ReceivedDataBuffer.DATA[1] == MOTOR_RIGHT) { + changeVelocity(MOTOR_RIGHT, + (long) ((float) word1.Val * COEF_WHEEL * CONST_VEL), + CON_MOTOR_RIGHT * ReceivedDataBuffer.DATA[4]); + } } break; diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 3e77f0b..22e52c7 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index 4d411c3..d38c509 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,144 +1,144 @@ :020000040000FA -:06000000BFEF33F0120017 +:06000000F0EF33F01200E6 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000BFEF33F012000F +:06080000F0EF33F01200DE :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A000400116800004B -:100830002601000021000000096800005F0100009F -:1008400008000000FB670000470100000E000000E8 -:0C085000F86700006A01000003000000CF +:06082A00040073680000E9 +:1008300026010000210000006B6800005F0100003D +:10084000080000005D680000470100000E00000085 +:0C0850005A6800006A010000030000006C :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD :10088000FACFE4FF00EE29F0140EE80403E3EECF04 :10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD79AEC13F09EA013D0A4EC13F056 +:1008A000E4FFFBD7CBEC13F09EA013D0D5EC13F0F4 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E502369EC2CF063 -:1008D0009E90ADEC13F002E2E16AE552E16EE55262 +:1008C00005E34D6B4E6B4F2B000E50239AEC2CF032 +:1008D0009E90DEEC13F002E2E16AE552E16EE55231 :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 :10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D :10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 :10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A :10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FF9AEC13F0ADEC13F002E215 +:10094000E4FFF4CFE4FFCBEC13F0DEEC13F002E2B3 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D84CEC1FF060D8FCD7AE -:100980000F0EC11202D816EF1FF0BDEC13F0E652A5 -:1009900071EC13F00101676F070E675D10E1E66A05 -:1009A000D9EC32F0E552DF6E000EDF80B5EC13F0CB -:1009B000E66A92EC33F0E552DF70B5EC13F0D08EBE +:10097000E5CFD8FF100004D87DEC1FF060D8FCD77D +:100980000F0EC11202D847EF1FF0EEEC13F0E65243 +:10099000A2EC13F00101676F070E675D10E1E66AD4 +:1009A0000AEC33F0E552DF6E000EDF80E6EC13F068 +:1009B000E66AC3EC33F0E552DF70E6EC13F0D08E5C :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E4CEC32F0E55201 +:1009E000E66E7C0EE66EE10EE66E7DEC32F0E552D0 :1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66EC2EC13F0E552838C818882847D -:100A1000808A838E80888294010EE66ECDEC33F05E -:100A2000E55282849D80C50EE66E22EC33F0E552DD -:100A3000A4EC13F0E552E552E7CFD9FF1200D9CF6D +:100A0000010EE66EF3EC13F0E552838C818882844C +:100A1000808A838E80888294010EE66EFEEC33F02D +:100A2000E55282849D80C50EE66E53EC33F0E552AC +:100A3000D5EC13F0E552E552E7CFD9FF1200D9CF3C :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A5000B6EC12F0200E0101005D03E36D50020BB5 -:100A600002E0ACEF12F0010149514A1102E1000E1F +:100A5000E7EC12F0200E0101005D03E36D50020B84 +:100A600002E0DDEF12F0010149514A1102E1000EEE :100A700008D049C1E9FF4AC1EAFFEF50800B01E00D :100A8000010E000947E101014651EA6A260FE96EAD :100A9000010EEA22EF5000083DE20501406B010122 :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66E67EC23F0006E050EE15E00503D +:100AD000010EE66E98EC23F0006E050EE15E00500C :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E144EC1BF00009F8 +:100B300000092CE10101520529E175EC1BF00009C7 :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66E67EC23F0006E050EE15E00509C +:100B7000010EE66E98EC23F0006E050EE15E00506B :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EB5EC2DF0F4 -:100BC000E552EBEC16F0000904E00101020E516F52 +:100BB00013E0030A01E06ED0020EE66EE6EC2DF0C3 +:100BC000E5521CEC17F0000904E00101020E516F20 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66E6DEC83 +:100BE000C80EE66EE66AE80EE66E030EE66E9EEC52 :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486B790E006E8E +:100C3000050E426F0501436B0501486BDB0E006E2C :100C4000640E016E026A00C0E6FF01C0E6FF02C04A -:100C5000E6FF480EE66E050EE66E9DEC32F0036E82 +:100C5000E6FF480EE66E050EE66ECEEC32F0036E51 :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66E67EC23F0006E86 +:100C7000E66E010EE66E010EE66E98EC23F0006E55 :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66A84ECE4 +:100C9000516B02D00101516B020EE66EE66AB5ECB3 :100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66E84EC16F0E552E552000902E001010F +:100CB000E66EB5EC16F0E552E552000902E00101DE :100CC000516901014751481102E1000E08D047C1A6 :100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E0ACEF12F005010251070A02E10DEF3C +:100CE00002E0DDEF12F005010251070A02E13EEFDA :100CF00012F00D0A01E148D2010A01E118D20D0AF1 :100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D10006BEF12F0FF00ACEF12F0E66AD9EC32F0A4 -:100D2000E552DF6E000EDB80DFCFE6FFE66AB9EC4E -:100D300032F0E552E552FF00ACEF12F001014951EB +:100D10009CEF12F0FF00DDEF12F0E66A0AEC33F010 +:100D2000E552DF6E000EDB80DFCFE6FFE66AEAEC1D +:100D300032F0E552E552FF00DDEF12F001014951BA :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 :100D5000EF50800B01E0010E000901E081D100C5D8 :100D600040F50501416B0501030E426F0501436B20 :100D7000050108510F0A01E110D1080A01E1BBD0B9 :100D8000010A01E17ED0020A71E0070A64E0010A6B :100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486B550E006E640E016E026A63 +:100DA00038D10501486BB70E006E640E016E026A01 :100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66E9DEC32F0036E050EE15E0350FB -:100DD00020D10501486B490E006E640E016E026A57 +:100DC000050EE66ECEEC32F0036E050EE15E0350CA +:100DD00020D10501486BAB0E006E640E016E026AF5 :100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66E9DEC32F0036E050EE15E0350CB -:100E0000470E006E640E016E026A00C0E6FF01C06C -:100E1000E6FF02C0E6FF480EE66E050EE66E9DECAC -:100E200032F0036E050EE15E03503E0E006E640E5E +:100DF000050EE66ECEEC32F0036E050EE15E03509A +:100E0000A90E006E640E016E026A00C0E6FF01C00A +:100E1000E6FF02C0E6FF480EE66E050EE66ECEEC7B +:100E200032F0036E050EE15E0350A00E006E640EFC :100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66E9DEC32F0036E050E62 +:100E4000480EE66E050EE66ECEEC32F0036E050E31 :100E5000E15E0350DED092CF48F593CF49F594CFB1 :100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA :100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A0FEC2DF0E552010E2DC0DBFF55 +:100E8000C8D0E66A40EC2DF0E552010E2DC0DBFF24 :100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E :100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E0FECF2 +:100EB000DBCF4AF5010EDBCF4BF5010EE66E40ECC1 :100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 :100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 :100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 -:100EF000DBCF4FF58ED00A0EE66EE66A12EC14F0E8 -:100F0000E552E552E66A76EC15F0E552030EF3CFB2 -:100F1000DBFF040EF4CFDBFFE66A76EC15F0E5525A +:100EF000DBCF4FF58ED00A0EE66EE66A43EC14F0B7 +:100F0000E552E552E66AA7EC15F0E552030EF3CF81 +:100F1000DBFF040EF4CFDBFFE66AA7EC15F0E55229 :100F2000DE52F3CFDEFFF4CFDDFFDD52040EDBCF68 :100F300048F5030EDBCF49F5020EDBCF4AF5010E73 -:100F4000DBCF4BF50A0EE66E010EE66E12EC14F0E6 -:100F5000E552E552010EE66E76EC15F0E552030E11 -:100F6000F3CFDBFF040EF4CFDBFF010EE66E76EC71 +:100F4000DBCF4BF50A0EE66E010EE66E43EC14F0B5 +:100F5000E552E552010EE66EA7EC15F0E552030EE0 +:100F6000F3CFDBFF040EF4CFDBFF010EE66EA7EC40 :100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 :100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A49EC18F078 +:100F90004EF5010EDBCF4FF53CD0E66A7AEC18F047 :100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B :100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 :100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E49EC18F0E552010E2DC0FE +:100FD0004BF5010EE66E7AEC18F0E552010E2DC0CD :100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 :100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D :10100000020EDBCF4EF5010EDBCF4FF50501020ED0 :10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66E67EC23F0006E050EE15EE3 +:10102000E66E010EE66E98EC23F0006E050EE15EB2 :101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66E67EC23F0CC +:10104000E66E050EE66EE66A010EE66E98EC23F09B :10105000006E050EE15E0050F3CF47F1F4CF48F18A -:10106000ACEF12F005010851030A37E0010A25E050 +:10106000DDEF12F005010851030A37E0010A25E01F :10107000030A13E0010A01E040D005010951921270 :1010800005010A51931205010B51941205010C51EF :10109000951205010D51961235D00501091D9216C4 @@ -147,98 +147,98 @@ :1010C00005010A1D8A1605010B1D8B1605010C1D55 :1010D0008C1605010D1D8D1615D0050109518912BB :1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66E5FECCA +:1010F0008C1205010D518D1205D0030EE66E90EC99 :1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66E67EC23F0006E050EE15EF6 -:101120000050F3CF47F1F4CF48F1ACEF12F00501D6 +:10111000E66A010EE66E98EC23F0006E050EE15EC5 +:101120000050F3CF47F1F4CF48F1DDEF12F00501A5 :101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000B5EC2DF0E5520BD009C5E6FFC5EC2DF04E -:10115000E55205D0010EE66E5FEC33F0E552400E2D +:10114000E6EC2DF0E5520BD009C5E6FFF6EC2DF0EC +:10115000E55205D0010EE66E90EC33F0E552400EFC :10116000E66E000EE66E050EE66EE66A010EE66EAF -:1011700067EC23F0006E050EE15E0050F3CF47F1FF -:10118000F4CF48F1ACEF12F005010851060A02E174 -:10119000CCEF11F0080A02E192EF11F0030A02E12C -:1011A00089EF11F0070A02E16FEF10F0030A02E184 -:1011B00065EF0EF0010A01E1D8D20F0A01E1C0D2B9 +:1011700098EC23F0006E050EE15E0050F3CF47F1CE +:10118000F4CF48F1DDEF12F005010851060A02E143 +:10119000FDEF11F0080A02E1C3EF11F0030A02E1CA +:1011A000BAEF11F0070A02E190EF10F0030A02E132 +:1011B00073EF0EF0010A01E1D8D20F0A01E1C0D2AB :1011C000020A01E174D2010A01E142D2070A01E1F7 :1011D00010D2010A01E1DED1030A01E1ACD1010A1A :1011E00001E1A5D10C0A01E126D1030A01E194D065 -:1011F000040A02E0F4EF11F00501095104E0020EC7 -:101200000501095D40E10AC5E6FF010EE66EB9EC95 -:1012100032F0E552E5520BC5E6FF020EE66EB9EC80 -:1012200032F0E552E5520CC5E6FF030EE66EB9EC6E -:1012300032F0E552E5520DC5E6FF040EE66EB9EC5C -:1012400032F0E552E5520EC5E6FF050EE66EB9EC4A -:1012500032F0E552E5520FC5E6FF060EE66EB9EC38 -:1012600032F0E552E55210C5E6FF070EE66EB9EC26 -:1012700032F0E552E55211C5E6FF080EE66EB9EC14 +:1011F000040A02E025EF12F00501095104E0020E95 +:101200000501095D40E10AC5E6FF010EE66EEAEC64 +:1012100032F0E552E5520BC5E6FF020EE66EEAEC4F +:1012200032F0E552E5520CC5E6FF030EE66EEAEC3D +:1012300032F0E552E5520DC5E6FF040EE66EEAEC2B +:1012400032F0E552E5520EC5E6FF050EE66EEAEC19 +:1012500032F0E552E5520FC5E6FF060EE66EEAEC07 +:1012600032F0E552E55210C5E6FF070EE66EEAECF5 +:1012700032F0E552E55211C5E6FF080EE66EEAECE3 :1012800032F0E552E5520501090504E0020E0501C0 -:10129000095D40E10AC5E6FF090EE66EB9EC32F0E1 -:1012A000E552E5520BC5E6FF0A0EE66EB9EC32F0E8 -:1012B000E552E5520CC5E6FF0B0EE66EB9EC32F0D6 -:1012C000E552E5520DC5E6FF0C0EE66EB9EC32F0C4 -:1012D000E552E5520EC5E6FF0D0EE66EB9EC32F0B2 -:1012E000E552E5520FC5E6FF0E0EE66EB9EC32F0A0 -:1012F000E552E55210C5E6FF0F0EE66EB9EC32F08E -:10130000E552E55211C5E6FF100EE66EB9EC32F07B -:10131000E552E552F9EF11F000C540F50501416BCA -:101320000501030E426F0501436B010EE66ED9EC19 -:1013300032F0E5520501486F020EE66ED9EC32F04C -:10134000E5520501496F030EE66ED9EC32F0E55225 -:1013500005014A6F040EE66ED9EC32F0E552050144 -:101360004B6F050EE66ED9EC32F0E55205014C6F7D -:10137000060EE66ED9EC32F0E55205014D6F070E10 -:10138000E66ED9EC32F0E55205014E6F080EE66EBE -:10139000D9EC32F0E55205014F6F090EE66ED9EC3B -:1013A00032F0E5520501506F0A0EE66ED9EC32F0CC -:1013B000E5520501516F0B0EE66ED9EC32F0E552A5 -:1013C0000501526F0C0EE66ED9EC32F0E5520501C4 -:1013D000536F0D0EE66ED9EC32F0E5520501546FF5 -:1013E0000E0EE66ED9EC32F0E5520501556F0F0E88 -:1013F000E66ED9EC32F0E5520501566F100EE66E3E -:10140000D9EC32F0E5520501576F400EE66E400E02 -:10141000E66E050EE66E010EE66E010EE66E67ECF8 +:10129000095D40E10AC5E6FF090EE66EEAEC32F0B0 +:1012A000E552E5520BC5E6FF0A0EE66EEAEC32F0B7 +:1012B000E552E5520CC5E6FF0B0EE66EEAEC32F0A5 +:1012C000E552E5520DC5E6FF0C0EE66EEAEC32F093 +:1012D000E552E5520EC5E6FF0D0EE66EEAEC32F081 +:1012E000E552E5520FC5E6FF0E0EE66EEAEC32F06F +:1012F000E552E55210C5E6FF0F0EE66EEAEC32F05D +:10130000E552E55211C5E6FF100EE66EEAEC32F04A +:10131000E552E5522AEF12F000C540F50501416B98 +:101320000501030E426F0501436B010EE66E0AECE8 +:1013300033F0E5520501486F020EE66E0AEC33F019 +:10134000E5520501496F030EE66E0AEC33F0E552F3 +:1013500005014A6F040EE66E0AEC33F0E552050112 +:101360004B6F050EE66E0AEC33F0E55205014C6F4B +:10137000060EE66E0AEC33F0E55205014D6F070EDE +:10138000E66E0AEC33F0E55205014E6F080EE66E8C +:101390000AEC33F0E55205014F6F090EE66E0AECD8 +:1013A00033F0E5520501506F0A0EE66E0AEC33F099 +:1013B000E5520501516F0B0EE66E0AEC33F0E55273 +:1013C0000501526F0C0EE66E0AEC33F0E552050192 +:1013D000536F0D0EE66E0AEC33F0E5520501546FC3 +:1013E0000E0EE66E0AEC33F0E5520501556F0F0E56 +:1013F000E66E0AEC33F0E5520501566F100EE66E0C +:101400000AEC33F0E5520501576F400EE66E400ED0 +:10141000E66E050EE66E010EE66E010EE66E98ECC7 :1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF1F9EF11F0030EE66E010EE66EB9EC1B -:1014400032F0E552E552E80EE66E020EE66EB9ECB9 -:1014500032F0E552E552E66A030EE66EB9EC32F080 -:10146000E552E552010EE66E040EE66EB9EC32F07E -:10147000E552E552E66A050EE66EB9EC32F0E55249 -:10148000E552E66A060EE66EB9EC32F0E552E55238 -:10149000270EE66E070EE66EB9EC32F0E552E55225 -:1014A000100EE66E080EE66EB9EC32F0E552E5522B -:1014B000030EE66E090EE66EB9EC32F0E552E55227 -:1014C000E80EE66E0A0EE66EB9EC32F0E552E55231 -:1014D000E66A0B0EE66EB9EC32F0E552E552010E0B -:1014E000E66E0C0EE66EB9EC32F0E552E552E66AB5 -:1014F0000D0EE66EB9EC32F0E552E552E66A0E0EDC -:10150000E66EB9EC32F0E552E552270EE66E0F0EAC -:10151000E66EB9EC32F0E552E552100EE66E100EB2 -:10152000E66EB9EC32F0E552E552F9EF11F0EBEC72 -:1015300016F0F9EF11F0060E09C5DBFF050E0AC51E +:101430004AF12AEF12F0030EE66E010EE66EEAECB8 +:1014400032F0E552E552E80EE66E020EE66EEAEC88 +:1014500032F0E552E552E66A030EE66EEAEC32F04F +:10146000E552E552010EE66E040EE66EEAEC32F04D +:10147000E552E552E66A050EE66EEAEC32F0E55218 +:10148000E552E66A060EE66EEAEC32F0E552E55207 +:10149000270EE66E070EE66EEAEC32F0E552E552F4 +:1014A000100EE66E080EE66EEAEC32F0E552E552FA +:1014B000030EE66E090EE66EEAEC32F0E552E552F6 +:1014C000E80EE66E0A0EE66EEAEC32F0E552E55200 +:1014D000E66A0B0EE66EEAEC32F0E552E552010EDA +:1014E000E66E0C0EE66EEAEC32F0E552E552E66A84 +:1014F0000D0EE66EEAEC32F0E552E552E66A0E0EAB +:10150000E66EEAEC32F0E552E552270EE66E0F0E7B +:10151000E66EEAEC32F0E552E552100EE66E100E81 +:10152000E66EEAEC32F0E552E5522AEF12F01CECDE +:1015300017F02AEF12F0060E09C5DBFF050E0AC5EB :10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 :101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 :101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FF6DECE8 +:10157000E6FF050EDBCFE6FF060EDBCFE6FF9EECB7 :1015800018F0006E060EE15E00500101010E526F70 -:10159000F9EF11F0060E09C5DBFF050E0AC5DBFFEA +:101590002AEF12F0060E09C5DBFF050E0AC5DBFFB8 :1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 :1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF :1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FF77EC18F05B -:1015E000006E060EE15E00500101010E526FF9EF30 -:1015F00011F0060E09C5DBFF050E0AC5DBFF080E5C +:1015D000050EDBCFE6FF060EDBCFE6FFA8EC18F02A +:1015E000006E060EE15E00500101010E526F2AEFFF +:1015F00012F0060E09C5DBFF050E0AC5DBFF080E5B :101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC :10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E :10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FF83EC18F0006E93 -:10164000060EE15E00500101010E526FF9EF11F03C +:10163000DBCFE6FF060EDBCFE6FFB4EC18F0006E62 +:10164000060EE15E00500101010E526F2AEF12F00A :10165000060E09C5DBFF050E0AC5DBFF080E0BC52C :10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 :101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 :10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FF8FEC18F0006E060EBD -:1016A000E15E00500101010E526FF9EF11F0060EDC +:10169000E6FF060EDBCFE6FFC0EC18F0006E060E8C +:1016A000E15E00500101010E526F2AEF12F0060EAA :1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 :1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC :1016D000DBFF0C0E0FC5DBFF0B0E10C5DBFF0E0E84 @@ -246,1336 +246,1338 @@ :1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC :101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 :10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FF9BEC18F0006E8A -:101730000B0EE15E00500101010E526FF9EF11F046 +:10172000DBCFE6FF060EDBCFE6FFCCEC18F0006E59 +:101730000B0EE15E00500101010E526F2AEF12F014 :10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF3FEC18F01B -:10176000E552E552E552F9EF11F0060E0AC5DBFF2E +:10175000E6FF060EDBCFE6FF09C5E6FF70EC18F0EA +:10176000E552E552E5522AEF12F0060E0AC5DBFFFC :10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 :10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 -:101790000501095D01E0B8D1090EDBCF2FF00A0E7B -:1017A000DBCF30F0BCEC24F02EC008F02FC009F0E5 -:1017B00030C00AF031C00BF0A60E336E280E346E26 -:1017C000940E356E3F0E366E08C02EF009C02FF015 -:1017D0000AC030F00BC031F0D6EC25F02EC004F07A -:1017E0002FC005F030C006F031C007F0CC0E336ECC -:1017F000BC0E346E8C0E356E3B0E366E04C02EF071 -:1018000005C02FF006C030F007C031F0D6EC25F04F -:1018100072EC26F02DC000F02EC001F02FC002F0B7 -:1018200030C003F000C0E6FF01C0E6FF02C0E6FFE3 -:1018300003C0E6FF070EDBCF2FF0080EDBCF30F042 -:10184000BCEC24F02EC014F02FC015F030C016F000 -:1018500031C017F0A60E336E280E346E940E356E1E -:101860003F0E366E14C02EF015C02FF016C030F0AB -:1018700017C031F0D6EC25F02EC010F02FC011F0BB -:1018800030C012F031C013F0BD0E336E370E346E1F -:10189000860E356E410E366E10C02EF011C02FF040 -:1018A00012C030F013C031F0D6EC25F072EC26F007 -:1018B0002DC00CF02EC00DF02FC00EF030C00FF078 -:1018C0000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FF4E -:1018D000050EDBCF2FF0060EDBCF30F0BCEC24F092 -:1018E0002EC01CF02FC01DF030C01EF031C01FF004 -:1018F000A60E336E280E346E940E356E3F0E366E85 -:101900001CC02EF01DC02FF01EC030F01FC031F0E3 -:10191000D6EC25F072EC26F02DC018F02EC019F090 -:101920002FC01AF030C01BF0000E186C191E1922BF -:101930001A1E1A221B1E1B2218C0E6FF19C0E6FF42 -:101940001AC0E6FF1BC0E6FFE66A6EEC17F0206ED9 -:101950000D0EE15E2050090EDBCF2FF00A0EDBCF1B -:1019600030F0BCEC24F02EC008F02FC009F030C0DD -:101970000AF031C00BF0A60E336E280E346E940EB2 -:10198000356E3F0E366E08C02EF009C02FF00AC02B -:1019900030F00BC031F0D6EC25F02EC004F02FC093 -:1019A00005F030C006F031C007F0CC0E336EBC0E2F -:1019B000346E8C0E356E3B0E366E04C02EF005C0B4 -:1019C0002FF006C030F007C031F0D6EC25F072ECF5 -:1019D00026F02DC000F02EC001F02FC002F030C064 -:1019E00003F000C0E6FF01C0E6FF02C0E6FF03C04F -:1019F000E6FF070EDBCF2FF0080EDBCF30F0BCEC9C -:101A000024F02EC014F02FC015F030C016F031C0F5 -:101A100017F0A60E336E280E346E940E356E3F0E00 -:101A2000366E14C02EF015C02FF016C030F017C05F -:101A300031F0D6EC25F02EC010F02FC011F030C0E0 -:101A400012F031C013F0BD0E336E370E346E860EB9 -:101A5000356E410E366E10C02EF011C02FF012C040 -:101A600030F013C031F0D6EC25F072EC26F02DC02A -:101A70000CF02EC00DF02FC00EF030C00FF00CC0D7 -:101A8000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E45 -:101A9000DBCF2FF0060EDBCF30F0BCEC24F02EC0F5 -:101AA0001CF02FC01DF030C01EF031C01FF0A60E7C -:101AB000336E280E346E940E356E3F0E366E1CC09B -:101AC0002EF01DC02FF01EC030F01FC031F0D6EC3C -:101AD00025F072EC26F02DC018F02EC019F02FC0A2 -:101AE0001AF030C01BF018C0E6FF19C0E6FF1AC09C -:101AF000E6FF1BC0E6FF010EE66E6EEC17F0206EEF -:101B00000D0EE15E2050E0D0090EDBCF2FF00A0E63 -:101B1000DBCF30F0BCEC24F02EC008F02FC009F071 -:101B200030C00AF031C00BF0A60E336E280E346EB2 -:101B3000940E356E3F0E366E08C02EF009C02FF0A1 -:101B40000AC030F00BC031F0D6EC25F02EC004F006 -:101B50002FC005F030C006F031C007F0CC0E336E58 -:101B6000BC0E346E8C0E356E3B0E366E04C02EF0FD -:101B700005C02FF006C030F007C031F0D6EC25F0DC -:101B800072EC26F02DC000F02EC001F02FC002F044 -:101B900030C003F000C0E6FF01C0E6FF02C0E6FF70 -:101BA00003C0E6FF070EDBCF2FF0080EDBCF30F0CF -:101BB000BCEC24F02EC014F02FC015F030C016F08D -:101BC00031C017F0A60E336E280E346E940E356EAB -:101BD0003F0E366E14C02EF015C02FF016C030F038 -:101BE00017C031F0D6EC25F02EC010F02FC011F048 -:101BF00030C012F031C013F0BD0E336E370E346EAC -:101C0000860E356E410E366E10C02EF011C02FF0CC -:101C100012C030F013C031F0D6EC25F072EC26F093 -:101C20002DC00CF02EC00DF02FC00EF030C00FF004 -:101C30000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FFDA -:101C4000050EDBCF2FF0060EDBCF30F0BCEC24F01E -:101C50002EC01CF02FC01DF030C01EF031C01FF090 -:101C6000A60E336E280E346E940E356E3F0E366E11 -:101C70001CC02EF01DC02FF01EC030F01FC031F070 -:101C8000D6EC25F072EC26F02DC018F02EC019F01D -:101C90002FC01AF030C01BF0000E186C191E19224C -:101CA0001A1E1A221B1E1B2218C0E6FF19C0E6FFCF -:101CB0001AC0E6FF1BC0E6FF09C5E6FF6EEC17F091 -:101CC000206E0D0EE15E205094D3060E0AC5DBFF98 -:101CD000050E0BC5DBFF080E0CC5DBFF070E0DC59F -:101CE000DBFF020E0501095D01E04FD1FF0E05018A -:101CF0000E03F350E66E070EDBCF2FF0080EDBCF9E -:101D000030F0BCEC24F02EC008F02FC009F030C039 -:101D10000AF031C00BF0A60E336E280E346E940E0E -:101D2000356E3F0E366E08C02EF009C02FF00AC087 -:101D300030F00BC031F0D6EC25F02EC004F02FC0EF -:101D400005F030C006F031C007F0CC0E336EBC0E8B -:101D5000346E8C0E356E3B0E366E04C02EF005C010 -:101D60002FF006C030F007C031F0D6EC25F072EC51 -:101D700026F02DC000F02EC001F02FC002F030C0C0 -:101D800003F000C0E6FF01C0E6FF02C0E6FF03C0AB -:101D9000E6FF050EDBCF2FF0060EDBCF30F0BCECFC -:101DA00024F02EC014F02FC015F030C016F031C052 -:101DB00017F0A60E336E280E346E940E356E3F0E5D -:101DC000366E14C02EF015C02FF016C030F017C0BC -:101DD00031F0D6EC25F02EC010F02FC011F030C03D -:101DE00012F031C013F0BD0E336E370E346E860E16 -:101DF000356E410E366E10C02EF011C02FF012C09D -:101E000030F013C031F0D6EC25F072EC26F02DC086 -:101E10000CF02EC00DF02FC00EF030C00FF00CC033 -:101E2000E6FF0DC0E6FF0EC0E6FF0FC0E6FFE66A64 -:101E3000B0EC17F0186E0A0EE15E18500EC5E6FF02 -:101E4000070EDBCF2FF0080EDBCF30F0BCEC24F018 -:101E50002EC008F02FC009F030C00AF031C00BF0DE -:101E6000A60E336E280E346E940E356E3F0E366E0F -:101E700008C02EF009C02FF00AC030F00BC031F0BE -:101E8000D6EC25F02EC004F02FC005F030C006F0CF -:101E900031C007F0CC0E336EBC0E346E8C0E356E36 -:101EA0003B0E366E04C02EF005C02FF006C030F099 -:101EB00007C031F0D6EC25F072EC26F02DC000F012 -:101EC0002EC001F02FC002F030C003F000C0E6FFCA -:101ED00001C0E6FF02C0E6FF03C0E6FF050EDBCF50 -:101EE0002FF0060EDBCF30F0BCEC24F02EC014F047 -:101EF0002FC015F030C016F031C017F0A60E336EAB -:101F0000280E346E940E356E3F0E366E14C02EF0D1 -:101F100015C02FF016C030F017C031F0D6EC25F008 -:101F20002EC010F02FC011F030C012F031C013F0ED -:101F3000BD0E336E370E346E860E356E410E366E24 -:101F400010C02EF011C02FF012C030F013C031F0CD -:101F5000D6EC25F072EC26F02DC00CF02EC00DF062 -:101F60002FC00EF030C00FF00CC0E6FF0DC0E6FF32 -:101F70000EC0E6FF0FC0E6FF010EE66EB0EC17F0F4 -:101F8000186E0A0EE15E1850A9D0FF0E05010E036F -:101F9000F350E66E070EDBCF2FF0080EDBCF30F0EC -:101FA000BCEC24F02EC008F02FC009F030C00AF0BD -:101FB00031C00BF0A60E336E280E346E940E356EC3 -:101FC0003F0E366E08C02EF009C02FF00AC030F068 -:101FD0000BC031F0D6EC25F02EC004F02FC005F078 -:101FE00030C006F031C007F0CC0E336EBC0E346E3C -:101FF0008C0E356E3B0E366E04C02EF005C02FF0F1 -:1020000006C030F007C031F0D6EC25F072EC26F0B7 -:102010002DC000F02EC001F02FC002F030C003F040 -:1020200000C0E6FF01C0E6FF02C0E6FF03C0E6FF16 -:10203000050EDBCF2FF0060EDBCF30F0BCEC24F02A -:102040002EC014F02FC015F030C016F031C017F0BC -:10205000A60E336E280E346E940E356E3F0E366E1D -:1020600014C02EF015C02FF016C030F017C031F09C -:10207000D6EC25F02EC010F02FC011F030C012F0B9 -:1020800031C013F0BD0E336E370E346E860E356ED2 -:10209000410E366E10C02EF011C02FF012C030F07D -:1020A00013C031F0D6EC25F072EC26F02DC00CF008 -:1020B0002EC00DF02FC00EF030C00FF00CC0E6FFA8 -:1020C0000DC0E6FF0EC0E6FF0FC0E6FF09C5E6FF44 -:1020D000B0EC17F0186E0A0EE15E18508AD1060EA9 -:1020E0000AC5DBFF050E0BC5DBFF020E0501095D0E -:1020F00001E0B3D0FF0E05010C03F350E66E050EB0 -:10210000DBCF2FF0060EDBCF30F0BCEC24F02EC07E -:1021100008F02FC009F030C00AF031C00BF0A60E55 -:10212000336E280E346E940E356E3F0E366E08C038 -:102130002EF009C02FF00AC030F00BC031F0D6EC01 -:1021400025F02EC004F02FC005F030C006F031C0DD -:1021500007F0BD0E336E370E346E860E356E410EAF -:10216000366E04C02EF005C02FF006C030F007C058 -:1021700031F0D6EC25F072EC26F02DC000F02EC028 -:1021800001F02FC002F030C003F000C0E6FF01C034 -:10219000E6FF02C0E6FF03C0E6FFE66AF4EC17F0D4 -:1021A0000C6E060EE15E0C500CC5E6FF050EDBCF93 -:1021B0002FF0060EDBCF30F0BCEC24F02EC008F080 -:1021C0002FC009F030C00AF031C00BF0A60E336EFC -:1021D000280E346E940E356E3F0E366E08C02EF00B -:1021E00009C02FF00AC030F00BC031F0D6EC25F05A -:1021F0002EC004F02FC005F030C006F031C007F04B -:10220000BD0E336E370E346E860E356E410E366E51 -:1022100004C02EF005C02FF006C030F007C031F02A -:10222000D6EC25F072EC26F02DC000F02EC001F0A7 -:102230002FC002F030C003F000C0E6FF01C0E6FF8F -:1022400002C0E6FF03C0E6FF010EE66EF4EC17F0F5 -:102250000C6E060EE15E0C505BD0FF0E05010C0308 -:10226000F350E66E050EDBCF2FF0060EDBCF30F01D -:10227000BCEC24F02EC008F02FC009F030C00AF0EA -:1022800031C00BF0A60E336E280E346E940E356EF0 -:102290003F0E366E08C02EF009C02FF00AC030F095 -:1022A0000BC031F0D6EC25F02EC004F02FC005F0A5 -:1022B00030C006F031C007F0BD0E336E370E346EFD -:1022C000860E356E410E366E04C02EF005C02FF01E -:1022D00006C030F007C031F0D6EC25F072EC26F0E5 -:1022E0002DC000F02EC001F02FC002F030C003F06E -:1022F00000C0E6FF01C0E6FF02C0E6FF03C0E6FF44 -:1023000009C5E6FFF4EC17F00C6E060EE15E0C500A -:1023100070D009C5E6FF0CEC18F0E5520101010E82 -:10232000526F67D017EC1BF0050EF3CFDBFF060EE4 -:10233000F4CFDBFF2DEC1BF0070EF3CFDBFF080E15 -:10234000F4CFDBFF00C540F50501416B0501030E2D -:10235000426F0501436B060EDBCF48F5050EDBCF60 -:1023600049F5080EDBCF4AF5070EDBCF4BF5400EE3 -:10237000E66E400EE66E050EE66E010EE66E010E8E -:10238000E66E67EC23F0006E050EE15E0050F3CFC1 -:1023900049F1F4CF4AF12DD000C540F50501416B5C -:1023A0000501030E426F0501436B44EC1BF000096D -:1023B00004E00501010E486F02D00501486B400E94 -:1023C000E66E400EE66E050EE66E010EE66E010E3E -:1023D000E66E67EC23F0006E050EE15E0050F3CF71 -:1023E00049F1F4CF4AF105D0010EE66E5FEC33F00F -:1023F000E552400EE66E000EE66E050EE66EE66AEB -:10240000010EE66E67EC23F0006E050EE15E0050F3 -:10241000F3CF47F1F4CF48F19FD0010149514A1160 -:1024200002E1000E08D049C1E9FF4AC1EAFFEF50BE -:10243000800B01E0010E00094DE10101010E516F19 -:102440000501406B01014C514C2B0501416F050109 -:10245000050E426F0501436B0501486B2A0E006EA5 -:10246000640E016E026A00C0E6FF01C0E6FF02C012 -:10247000E6FF480EE66E050EE66E9DEC32F0036E4A -:10248000050EE15E0350400EE66E400EE66E050E50 -:10249000E66E010EE66E010EE66E67EC23F0006E4E -:1024A000050EE15E0050F3CF49F1F4CF4AF1400E42 -:1024B000E66E000EE66E050EE66EE66A010EE66E4C -:1024C00067EC23F0006E050EE15E0050F3CF47F19C -:1024D000F4CF48F141D0010149514A1102E1000E07 -:1024E00008D049C1E9FF4AC1EAFFEF50800B01E083 -:1024F000010E000931E100C540F50501416B050100 -:10250000030E426F0501010E436F400EE66E400E52 -:10251000E66E050EE66E010EE66E010EE66E67ECE7 -:1025200023F0006E050EE15E0050F3CF49F1F4CFC9 -:102530004AF1400EE66E000EE66E050EE66EE66AA5 -:10254000010EE66E67EC23F0006E050EE15E0050B2 -:10255000F3CF47F1F4CF48F10F0EE15C02E2E16AFC -:10256000E552E16EE552E7CFD9FF12000101535168 -:10257000541104E1100E536F270E546F5307000ED1 -:10258000545B6DA207D0535154112EE18C748CB45E -:1025900013D027D00101005102E18C9422D0000514 -:1025A00002E18C8409D0020E005D02E18C8419D016 -:1025B000040E005D03E18C948C861200100E005D09 -:1025C00006E10101535154110FE18C740AD0200E21 -:1025D000005D0AE101015351541106E18C748CA491 -:1025E00002D08C9612008C8612001200120012008B -:1025F000120006EF31F012001E0EE66E010EE66EBE -:1026000035EC23F0E552E552400EE66E000EE66E24 -:10261000050EE66EE66A010EE66E67EC23F0006ECC -:10262000050EE15E0050F3CF47F1F4CF48F1120000 -:102630006D840101080E686F070E696F6807000E50 -:10264000695B68516911FAE16D941200D9CFE6FF18 -:10265000E1CFD9FFFD0EDBCF2FF0FE0EDBCF30F048 -:10266000010E2F1801E1305033E0E8682F1802E125 -:10267000E86830182BE0030E2F1801E1305024E0F9 -:10268000040E2F1801E130501DE0020E2F1801E159 -:10269000305016E0170E2F1801E130500FE0160EE3 -:1026A0002F1801E1305008E0150E2F1801E13050CD -:1026B00001E010D0A1DF0FD09EDF0DD09ADF0BD04C -:1026C00096DF09D092DF07D091DF05D091DF03D0EC -:1026D000000001D000D0010E00D0E552E7CFD9FFB5 -:1026E00012004BD8E652D0B202D0010E15D0D0B8AD -:1026F00002D0020E11D0D0B002D0030E0DD0D0B651 -:1027000002D0040E09D0FCAE02D0050E05D0FCAC00 -:1027100002D0060E01D0070EDF6ED088D086D0849E -:10272000D082D080FC9EFC9CDF50E552E552E7CF82 -:10273000D9FF1200E65221D8020EE126F350DF6ED7 -:10274000010EF4CFDBFF1200C00EE66EE00EE66E67 -:1027500043EC33F0E552E5521200DF50F36E010E08 -:10276000DB50F46E020EE15C1200DFCFE6FFE66A9A -:10277000B9EC32F0E552E5521200D9CFE6FFE1CFD5 -:04278000D9FF12006B -:0C27840052EC1CF0FE0EDB5006E1F80EDB -:1027900096163C0E9416959808D0FE0EDB0405E1C3 -:1027A000070E9612C30E9412958857EF1CF0D9CFDE -:1027B000E6FFE1CFD9FFE652010EE66EE3DFE55218 -:1027C000809AFE0EDB5004E0FE0EDB5002080FE1A3 -:1027D000839C81880000839E0000000000008450DC -:1027E000010BDF6E838E00000000DF04F4E0FE0EBC -:1027F000DB0404E0FE0EDB5002080FE1838C8198BD -:102800000000839E0000000000008450010BDF6E7A -:10281000838E00000000DF04F4E0E552E552E7CFCC -:10282000D9FF1200D9CFE6FFE1CFD9FFE652FD0E66 -:10283000DB50DF6EFE0EDBCFE6FFB9DFE552E66A66 -:10284000A1DFE552FE0EDB5003E1839C81880CD0B2 -:10285000FE0EDB0403E1838C819806D0FE0EDB5074 -:10286000020802E1839C8198809A00008098D9CF69 -:10287000E9FFDACFEAFFEF50010B02E0848001D0DC -:102880008490D9CFE9FFDACFEAFFEF50020B02E0E4 -:10289000848201D08492D9CFE9FFDACFEAFFEF50EA -:1028A000040B02E0848401D08494D9CFE9FFDACF0D -:1028B000EAFFEF50080B02E0838801D08398D9CF5C -:1028C000E9FFDACFEAFFEF50100B02E0828201D07D -:1028D0008292D9CFE9FFDACFEAFFEF50200B02E076 -:1028E000828E01D0829ED9CFE9FFDACFEAFFEF5086 -:1028F000400B02E0828001D08290D9CFE9FFDACF8D -:10290000EAFFEF50800B02E0828C01D0829C000035 -:102910000000808800000000E552E552E7CFD9FFB3 -:102920001200D9CFE6FFE1CFD9FF020EE126FC0E5F -:10293000DBCFDEFFDBCFDDFFFE0EDBCFE6FF37DFD9 -:10294000E552E66A1FDFE552FE0EDB5003E1839C91 -:1029500081880CD0FE0EDB0403E1838C819806D0C5 -:10296000FE0EDB50020802E1839C8198808A000001 -:102970008098D9CFE9FFDACFEAFFEE52EF50010B92 -:1029800002E0848001D08490D9CFE9FFDACFEAFF5A -:10299000EE52EF50020B02E0848201D08492D9CF34 -:1029A000E9FFDACFEAFFEE52EF50040B02E0848435 -:1029B00001D08494D9CFE9FFDACFEAFFEE52EF508D -:1029C000080B02E0838801D08398D9CFE9FFDACFE2 -:1029D000EAFFEE52EF50100B02E0828201D08292A9 -:1029E000D9CFE9FFDACFEAFFEE52EF50200B02E039 -:1029F000828E01D0829ED9CFE9FFDACFEAFFEE5274 -:102A0000EF50400B02E0828001D08290D9CFE9FFE5 -:102A1000DACFEAFFEE52EF50800B02E0828C01D059 -:102A2000829C000000008088000000008098D9CFC0 -:102A3000E9FFDACFEAFFEF50010B02E0848001D01A -:102A40008490D9CFE9FFDACFEAFFEF50020B02E022 -:102A5000848201D08492D9CFE9FFDACFEAFFEF5028 -:102A6000040B02E0848401D08494D9CFE9FFDACF4B -:102A7000EAFFEF50080B02E0838801D08398D9CF9A -:102A8000E9FFDACFEAFFEF50100B02E0828201D0BB -:102A90008292D9CFE9FFDACFEAFFEF50200B02E0B4 -:102AA000828E01D0829ED9CFE9FFDACFEAFFEF50C4 -:102AB000400B02E0828001D08290D9CFE9FFDACFCB -:102AC000EAFFEF50800B02E0828C01D0829C000074 -:102AD0000000808800000000020EE15C02E2E16A72 -:102AE000E552E16EE552E7CFD9FF1200D9CFE6FFFC -:102AF000E1CFD9FF020EE126FE0EDBCFE6FF57DE67 -:102B0000E552010EE66E3EDEE552FE0EDB5003E1BD -:102B1000839C818805D0FE0EDB0402E1838C8198C2 -:102B2000808A0000839E0000000000008450010B9A -:102B3000066E8450020B01E0010EE824056E8450FD -:102B4000040B01E0010E040DF3CF04F08350100BD1 -:102B500001E0010E080DF3CF03F08250020B01E0FB -:102B6000010E100DF3CF02F08250800B01E0010E38 -:102B7000200DF3CF01F08250010B400DF3CF00F098 -:102B80008250400B01E0010E800DF3500010011047 -:102B900002100310041005100610E76E010EE7CFB7 -:102BA000DBFF838E00000000839E00000000000019 -:102BB0008450010B066E8450020B01E0010EE824E4 -:102BC000056E8450040B01E0010E040DF3CF04F0F8 -:102BD0008350100B01E0010E080DF3CF03F082507B -:102BE000020B01E0010E100DF3CF02F08250800BBA -:102BF00001E0010E200DF3CF01F08250010B400DDA -:102C0000F3CF00F08250400B01E0010E800DF35035 -:102C10000010011002100310041005100610DF6EE2 -:102C2000838EDECF00F0DDCF01F000C0F3FF01C0E6 -:102C3000F4FF00D0020EE15C02E2E16AE552E16ECF -:102C4000E552E7CFD9FF1200D9CFE6FFE1CFD9FF98 -:102C5000E652DF6AFE0EDBCFE6FFA9DDE552010E8C -:102C6000E66E90DDE552FE0EDB5003E1839C818829 -:102C700005D0FE0EDB0402E1838C8198809A00006F -:102C8000839E0000000000008450010B066E8450FB -:102C9000020B01E0010EE824056E8450040B01E0F4 -:102CA000010E040DF3CF04F08350100B01E0010E70 -:102CB000080DF3CF03F08250020B01E0010E100D5E -:102CC000F3CF02F08250800B01E0010E200DF3CF14 -:102CD00001F08250010B400DF3CF00F08250400B09 -:102CE00001E0010E800DF3500010011002100310DE -:102CF000041005100610DF6E838EDF5000D0E55201 -:102D0000E552E7CFD9FF120052EC1CF0E652DF6A21 -:102D1000B8EC1CF0DF6EFD0EDB50DF14DF6EDF5011 -:102D200002E0010E01D0000EE55257EF1CF052EC0C -:102D30001CF01D0E1DEC1CF0000E36EC1EF057EFC3 -:102D40001CF052EC1CF0B8EC1CF084080FE0B8EC5E -:102D50001CF0C4080BE0E66A3FEC1EF0FAEC1DF034 -:102D6000020EE66E92EC33F0E552EDD71C0E1DEC30 -:102D70001CF00A0E36EC1EF00BEC1DF0B8EC1CF04B -:102D8000800804E0B8EC1CF0C008E5E1B8EC1CF0E9 -:102D9000C00802E10BEC1DF01E0E1DEC1CF00F0E26 -:102DA00036EC1EF0E0EC1EF0FA0EDBCFE6FFFB0E79 -:102DB000AAEC1DF0F80EDBCFE6FFF90EAAEC1DF031 -:102DC000F60EDBCFE6FFF70EAAEC1DF0040E1DECAD -:102DD0001CF057EF1CF052EC1CF0080EE126010E1F -:102DE0004FEC1CF0010EE7CFDBFF020E5BEC1EF098 -:102DF000DF6E030E4FEC1CF0030EE7CFDBFF040E7B -:102E00004FEC1CF0020EE7CFDBFF050E4FEC1CF081 -:102E1000050EE7CFDBFF060E4FEC1CF0040EE7CFEC -:102E2000DBFF070E4FEC1CF0070EE7CFDBFF080EB1 -:102E30004FEC1CF084EC1CF0E66A10EC1DF0090E5F -:102E40004FEC1CF0010EE7CFDBFF0A0E5BEC1EF02F -:102E5000DF6E0B0E4FEC1CF0030EE7CFDBFF0C0E0A -:102E60004FEC1CF0020EE7CFDBFF0D0E4FEC1CF019 -:102E7000050EE7CFDBFF0E0E4FEC1CF0040EE7CF84 -:102E8000DBFF0F0E4FEC1CF0070EE7CFDBFF100E41 -:102E90004FEC1CF084EC1CF0010EE66E10EC1DF003 -:102EA000020EE66E03EC1DF0020EE66EE66AF6EC2C -:102EB0001CF007E1020EE66E010EE66EF6EC1CF069 -:102EC00002E0000E01D0010E006E080EE15C02E28D -:102ED000E16AE552E16E005057EF1CF052EC1CF035 -:102EE0000C0E5BEC1CF0D950F20F3AEC1EF0080E01 -:102EF000EECFDBFF090EEECFDBFF0A0EEECFDBFFDE -:102F00000B0EEECFDBFF1F0E1DEC1CF0FCEC1CF0DB -:102F10000A0EDBCF02F00B0E17EC1DF010E02B0EAB -:102F200036EC1EF00A0EDBCFE6FF0B0EAAEC1DF00E -:102F3000080EDBCFE6FF090EDBCFE6FF03D00B0E5A -:102F4000E66EE66AAFEC1EF0AAEC1DF0BAEC1EF0DD -:102F50000C0EE15C02E2E16AE552E16E57EF1CF013 -:102F600052EC1CF00A0E5BEC1CF0080EDB6A090E3A -:102F7000DB6A1F0E1DEC1CF0F50EDBCF00F00034F9 -:102F800007E2080EDB6A100EF36E090EF3CFDBFFCB -:102F9000040EDBCF00F0050EDBCF01F0060EDBCF19 -:102FA00002F0070E17EC1DF00DE0FCEC1CF0280EF3 -:102FB0000012080E011225EC1DF0AFEC1EF0DBCF65 -:102FC000E6FF07D0FCEC1CF0080E0012011225EC05 -:102FD0001DF0F6DBBAEC1EF00A0EE15C02E2E16ADB -:102FE000E552E16E57EF1CF052EC1CF0F90EDBCF0E -:102FF000E6FFE66AE66AE66AE66AD950FA0F3AEC54 -:103000001EF0C1EC1EF03FEC1EF0AADF006E0A0EAF -:10301000E15E005057EF1CF052EC1CF0FE0EDB504E -:1030200004E0FE0EDB5002080FE1E6EC1EF04AEC75 -:103030001EF0F3CF61F1F4CF62F1E66A4AEC1EF0C4 -:10304000F3CF5FF1F4CF60F1FE0EDB0404E0FE0E7F -:10305000DB50020810E143EC1EF04AEC1EF0F3CF07 -:1030600065F1F4CF66F1010EE66E4AEC1EF0F3CF87 -:1030700063F1F4CF64F1010EE0DB57EF1CF052EC8A -:103080001CF01F0EDADBE0EC1EF0010ED6DB57EF72 -:103090001CF060EC1EF0FE0EDB50020805E12D6A0C -:1030A0002E6A2F6A306A12D00B0EC7DB3FEC1EF07F -:1030B000C5EC1CF0DE6ADD6ADECF2DF0DECF2EF02F -:1030C000DECF2FF0DDCF30F0DD52DD52040EE15CBB -:1030D00002E2E16AE552E16EEAD3FFEC1DF0BDECDD -:1030E0001CF004EC1EF098DB9DEC1CF0E0D3FFEC30 -:1030F0001DF092DBE66AF2DE04EC1EF071EC1EF0CD -:103100009DEC1CF0D4D3ECEC1EF086DBE66AE6DE28 -:1031100006EC1DF043EC1DF07FDBD0EF1DF0ECEC76 -:103120001EF0BDEC1CF006EC1DF043EC1DF071EC44 -:103130001EF0D0EF1DF0B6DB3C0EE1269CEC1DF03E -:103140007EEC1EF09CEC1DF0CAEC1EF075EC1EF03F -:1031500008C02EF009C02FF00AC030F00BC031F0CB -:10316000D6EC25F09DEC1EF0E8EC1DF087EC1EF08F -:10317000A6EC1EF0E8EC1DF0D3EC1CF075EC1EF094 -:1031800014C02EF015C02FF016C030F017C031F06B -:10319000D6EC25F0BAEC1DF094EC1EF0EDEC24F02A -:1031A00068EC1EF0336A346A800E356E64EC1EF0F3 -:1031B000380E2EC0DBFF390E2FC0DBFF3A0E30C0B9 -:1031C000DBFF3B0E31C0DBFF9CEC1DF068EC1EF01A -:1031D000D8DBE8EC1DF042DBD4DB35EC2EF0086EDA -:1031E000080EE15E0850080E2DC0DBFF090E2EC050 -:1031F000DBFF0A0E2FC0DBFF0B0E30C0DBFFCDDB89 -:10320000F60EDB5007E0D950F40F3AEC1EF0EE500A -:10321000ED103AE171DB080EDBCF0EF0090EDBCFCB -:103220000FF00A0EDBCF10F00B0E58DA3ADADBECB7 -:103230001DF02E6A2F6A800E306E400E316E380EF1 -:10324000DBCF33F0390EDBCF34F03A0EDBCF35F085 -:103250003B0EDCEC1EF008EC1EF093DBF3EC1DF0F3 -:103260002DC002F02EC003F02FC004F030C005F0D6 -:103270002DC02EF054EC1EF0EDEC1DF02EDF0A6E8A -:10328000060EE15E0A50CCD1380EDBCF04F0390EC9 -:10329000DBCF05F03A0EDBCF06F03B0EDBCF07F0BD -:1032A0000C6A0D6A0E6A400E0F6E91DAD6EC25F0AC -:1032B00068EC1DF0F40EDBCF2FF0F50E74DB87DB2E -:1032C000B7EC1DF0EDEC24F0140E2EC0DBFF150E54 -:1032D0002FC0DBFF160E30C0DBFF170E2EDA9CEC82 -:1032E0001DF0B7EC1DF0D6EC25F0180E2EC0DBFF5C -:1032F000190E2FC0DBFF1A0E30C0DBFF1B0E1DDACC -:10330000E8EC1DF087EC1EF0B7EC1DF0D6EC25F0D4 -:103310001C0E2EC0DBFF1D0E2FC0DBFF1E0E30C0AB -:10332000DBFF1F0E31C0DBFF1C0EDBCF00F01D0EDC -:10333000DBCF01F01E0EDBCF02F01F0EDBCF03F060 -:103340007DDBAEEC1DF0D6EC25F0200E2EC0DBFFB1 -:10335000210E2FC0DBFF220E30C0DBFF230E31C059 -:10336000DBFFD950180FE96EDACFEAFF240EEECF5B -:10337000DBFF250EEECFDBFF260EEECFDBFF270EA9 -:10338000EECFDBFFFD0EDBCF2FF0FE0E0AEC1FF0C1 -:10339000200EDBCF33F0210EDBCF34F0220EDBCF5B -:1033A00035F0230EEADB280E2EC0DBFF290E2FC0DE -:1033B000DBFF2A0E30C0DBFF2B0E31C0DBFFE8EC59 -:1033C0001DF00AEC1FF0240EDBCF33F0250EDBCF0F -:1033D00034F0260EDBCF35F0270ECFDB2C0E2EC0BF -:1033E000DBFF2D0E2FC0DBFF2E0E30C0DBFF2F0EBC -:1033F00031C0DBFF2C0EDBCF04F02D0EDBCF05F050 -:103400002E0EDBCF06F02F0EDBCF07F017DB94EC90 -:103410001EF0D6EC25F09CDA300E2EC0DBFF310E0C -:103420002FC0DBFF320E30C0DBFF330E31C0DBFFBD -:10343000280EDBCF2EF0290EDBCF2FF02A0EDBCFAC -:1034400030F02B0EDBCF31F083DA340E2EC0DBFFF1 -:10345000350E2FC0DBFF360E30C0DBFF370E31C01C -:10346000DBFFD950300F63DBD950340F60DB35EC14 -:103470002EF0006E080EE15E00500C0E2DC0DBFF3A -:103480000D0E2EC0DBFF0E0E2FC0DBFF0F0E30C067 -:10349000DBFF006A016A026A400E036ED6DA02C0E0 -:1034A000E6FFE66E35DB7EEC1EF06BDAF0EC1EF02C -:1034B0002DC014F02EC015F02FC016F030C017F03C -:1034C00071EC1EF035EC2EF0186E080EE15E18500F -:1034D000E552E7CF03F0E552E7CF02F0E552E7CF40 -:1034E00001F0E552E7CF00F02DC004F02EC005F04A -:1034F0002FC006F030C007F094DB30DBD6EC25F0AF -:10350000100... [truncated message content] |
From: Xavier L. <Ba...@us...> - 2010-02-24 20:03:44
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 0e26131ab8db136ad132bee9e796b91bcfa54ef8 (commit) from f444918324cd99ce343190d5b122295f6ce31e45 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 0e26131ab8db136ad132bee9e796b91bcfa54ef8 Author: Xavier Lagorce <Xav...@cr...> Date: Wed Feb 24 20:55:26 2010 +0100 Changing the method used to generate the current speed value ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index 9f5b7e8..45e059d 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -575,15 +575,16 @@ void stop(char axis, WORD type) { * (spfier les #MOTOR_BOTH est bien demment impossible) */ DWORD getRealVelocity(char axis) { - WORD velData; + DWORD_VAL velData; if (axis == MOTOR_BOTH) return 0; else { writeCommand(axis, LM_CMD_RDRV); - velData = readDataWord(axis); + velData.word.HW = readDataWord(axis); + velData.word.LW = 0; - return (((long)velData) << 16); + return velData.Val; } } diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 24be1b3..3e77f0b 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index b66e9b5..4d411c3 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,14 +1,14 @@ :020000040000FA -:06000000CEEF33F0120008 +:06000000BFEF33F0120017 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000CEEF33F0120000 +:06080000BFEF33F012000F :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A0004002F6800002D -:100830002601000021000000276800005F01000081 -:100840000800000019680000470100000E000000C9 -:0C085000166800006A01000003000000B0 +:06082A000400116800004B +:100830002601000021000000096800005F0100009F +:1008400008000000FB670000470100000E000000E8 +:0C085000F86700006A01000003000000CF :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD @@ -16,7 +16,7 @@ :10089000E4FFFBD700EE00F0290EE80403E3EECFFF :1008A000E4FFFBD79AEC13F09EA013D0A4EC13F056 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E502378EC2CF054 +:1008C00005E34D6B4E6B4F2B000E502369EC2CF063 :1008D0009E90ADEC13F002E2E16AE552E16EE55262 :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 @@ -27,18 +27,18 @@ :10094000E4FFF4CFE4FF9AEC13F0ADEC13F002E215 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D85BEC1FF060D8FCD79F -:100980000F0EC11202D825EF1FF0BDEC13F0E65296 +:10097000E5CFD8FF100004D84CEC1FF060D8FCD7AE +:100980000F0EC11202D816EF1FF0BDEC13F0E652A5 :1009900071EC13F00101676F070E675D10E1E66A05 -:1009A000E8EC32F0E552DF6E000EDF80B5EC13F0BC -:1009B000E66AA1EC33F0E552DF70B5EC13F0D08EAF +:1009A000D9EC32F0E552DF6E000EDF80B5EC13F0CB +:1009B000E66A92EC33F0E552DF70B5EC13F0D08EBE :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66E5BEC32F0E552F2 +:1009E000E66E7C0EE66EE10EE66E4CEC32F0E55201 :1009F000E552E552CF0E9216939894943F0E9516B9 :100A0000010EE66EC2EC13F0E552838C818882847D -:100A1000808A838E80888294010EE66EDCEC33F04F -:100A2000E55282849D80C50EE66E31EC33F0E552CE +:100A1000808A838E80888294010EE66ECDEC33F05E +:100A2000E55282849D80C50EE66E22EC33F0E552DD :100A3000A4EC13F0E552E552E7CFD9FF1200D9CF6D :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 :100A5000B6EC12F0200E0101005D03E36D50020BB5 @@ -49,33 +49,33 @@ :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66E76EC23F0006E050EE15E00502E +:100AD000010EE66E67EC23F0006E050EE15E00503D :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E152EC1BF00009EA +:100B300000092CE10101520529E144EC1BF00009F8 :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66E76EC23F0006E050EE15E00508D +:100B7000010EE66E67EC23F0006E050EE15E00509C :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66EC4EC2DF0E5 -:100BC000E552E9EC16F0000904E00101020E516F54 +:100BB00013E0030A01E06ED0020EE66EB5EC2DF0F4 +:100BC000E552EBEC16F0000904E00101020E516F52 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66E75EC7B +:100BE000C80EE66EE66AE80EE66E030EE66E6DEC83 :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486B970E006E70 +:100C3000050E426F0501436B0501486B790E006E8E :100C4000640E016E026A00C0E6FF01C0E6FF02C04A -:100C5000E6FF480EE66E050EE66EACEC32F0036E73 +:100C5000E6FF480EE66E050EE66E9DEC32F0036E82 :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66E76EC23F0006E77 +:100C7000E66E010EE66E010EE66E67EC23F0006E86 :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 :100C9000516B02D00101516B020EE66EE66A84ECE4 :100CA00016F0E552E55200090AE1020EE66E010E69 @@ -85,8 +85,8 @@ :100CE00002E0ACEF12F005010251070A02E10DEF3C :100CF00012F00D0A01E148D2010A01E118D20D0AF1 :100D000001E1B0D1040A1AE0030A07E0010A02E097 -:100D10006BEF12F0FF00ACEF12F0E66AE8EC32F095 -:100D2000E552DF6E000EDB80DFCFE6FFE66AC8EC3F +:100D10006BEF12F0FF00ACEF12F0E66AD9EC32F0A4 +:100D2000E552DF6E000EDB80DFCFE6FFE66AB9EC4E :100D300032F0E552E552FF00ACEF12F001014951EB :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 :100D5000EF50800B01E0010E000901E081D100C5D8 @@ -94,24 +94,24 @@ :100D7000050108510F0A01E110D1080A01E1BBD0B9 :100D8000010A01E17ED0020A71E0070A64E0010A6B :100D900020E0030A06E0010A01E038D167C148F506 -:100DA00038D10501486B730E006E640E016E026A45 +:100DA00038D10501486B550E006E640E016E026A63 :100DB00000C0E6FF01C0E6FF02C0E6FF480EE66E97 -:100DC000050EE66EACEC32F0036E050EE15E0350EC -:100DD00020D10501486B670E006E640E016E026A39 +:100DC000050EE66E9DEC32F0036E050EE15E0350FB +:100DD00020D10501486B490E006E640E016E026A57 :100DE00000C0E6FF01C0E6FF02C0E6FF480EE66E67 -:100DF000050EE66EACEC32F0036E050EE15E0350BC -:100E0000650E006E640E016E026A00C0E6FF01C04E -:100E1000E6FF02C0E6FF480EE66E050EE66EACEC9D -:100E200032F0036E050EE15E03505C0E006E640E40 +:100DF000050EE66E9DEC32F0036E050EE15E0350CB +:100E0000470E006E640E016E026A00C0E6FF01C06C +:100E1000E6FF02C0E6FF480EE66E050EE66E9DECAC +:100E200032F0036E050EE15E03503E0E006E640E5E :100E3000016E026A00C0E6FF01C0E6FF02C0E6FFE5 -:100E4000480EE66E050EE66EACEC32F0036E050E53 +:100E4000480EE66E050EE66E9DEC32F0036E050E62 :100E5000E15E0350DED092CF48F593CF49F594CFB1 :100E60004AF595CF4BF596CF4CF5D3D080CF48F5CA :100E700081CF49F582CF4AF583CF4BF584CF4CF52E -:100E8000C8D0E66A1EEC2DF0E552010E2DC0DBFF46 +:100E8000C8D0E66A0FEC2DF0E552010E2DC0DBFF55 :100E9000020E2EC0DBFF030E2FC0DBFF040E30C09E :100EA000DBFF040EDBCF48F5030EDBCF49F5020E66 -:100EB000DBCF4AF5010EDBCF4BF5010EE66E1EECE3 +:100EB000DBCF4AF5010EDBCF4BF5010EE66E0FECF2 :100EC0002DF0E552010E2DC0DBFF020E2EC0DBFF20 :100ED000030E2FC0DBFF040E30C0DBFF040EDBCFA0 :100EE0004CF5030EDBCF4DF5020EDBCF4EF5010EB8 @@ -125,18 +125,18 @@ :100F6000F3CFDBFF040EF4CFDBFF010EE66E76EC71 :100F700015F0E552DE52F3CFDEFFF4CFDDFFDD5298 :100F8000040EDBCF4CF5030EDBCF4DF5020EDBCFAD -:100F90004EF5010EDBCF4FF53CD0E66A43EC18F07E +:100F90004EF5010EDBCF4FF53CD0E66A49EC18F078 :100FA000E552010E2DC0DBFF020E2EC0DBFF030E4B :100FB0002FC0DBFF040E30C0DBFF040EDBCF48F593 :100FC000030EDBCF49F5020EDBCF4AF5010EDBCF76 -:100FD0004BF5010EE66E43EC18F0E552010E2DC004 +:100FD0004BF5010EE66E49EC18F0E552010E2DC0FE :100FE000DBFF020E2EC0DBFF030E2FC0DBFF040E63 :100FF00030C0DBFF040EDBCF4CF5030EDBCF4DF52D :10100000020EDBCF4EF5010EDBCF4FF50501020ED0 :10101000436F400EE66E400EE66E050EE66E010E64 -:10102000E66E010EE66E76EC23F0006E050EE15ED4 +:10102000E66E010EE66E67EC23F0006E050EE15EE3 :101030000050F3CF49F1F4CF4AF1400EE66E000EB6 -:10104000E66E050EE66EE66A010EE66E76EC23F0BD +:10104000E66E050EE66EE66A010EE66E67EC23F0CC :10105000006E050EE15E0050F3CF47F1F4CF48F18A :10106000ACEF12F005010851030A37E0010A25E050 :10107000030A13E0010A01E040D005010951921270 @@ -147,15 +147,15 @@ :1010C00005010A1D8A1605010B1D8B1605010C1D55 :1010D0008C1605010D1D8D1615D0050109518912BB :1010E00005010A518A1205010B518B1205010C51A1 -:1010F0008C1205010D518D1205D0030EE66E6EECBB +:1010F0008C1205010D518D1205D0030EE66E5FECCA :1011000033F0E552400EE66E000EE66E050EE66E1A -:10111000E66A010EE66E76EC23F0006E050EE15EE7 +:10111000E66A010EE66E67EC23F0006E050EE15EF6 :101120000050F3CF47F1F4CF48F1ACEF12F00501D6 :101130000851020A09E0030A01E00CD009C5E6FFE4 -:10114000C4EC2DF0E5520BD009C5E6FFD4EC2DF030 -:10115000E55205D0010EE66E6EEC33F0E552400E1E +:10114000B5EC2DF0E5520BD009C5E6FFC5EC2DF04E +:10115000E55205D0010EE66E5FEC33F0E552400E2D :10116000E66E000EE66E050EE66EE66A010EE66EAF -:1011700076EC23F0006E050EE15E0050F3CF47F1F0 +:1011700067EC23F0006E050EE15E0050F3CF47F1FF :10118000F4CF48F1ACEF12F005010851060A02E174 :10119000CCEF11F0080A02E192EF11F0030A02E12C :1011A00089EF11F0070A02E16FEF10F0030A02E184 @@ -164,80 +164,80 @@ :1011D00010D2010A01E1DED1030A01E1ACD1010A1A :1011E00001E1A5D10C0A01E126D1030A01E194D065 :1011F000040A02E0F4EF11F00501095104E0020EC7 -:101200000501095D40E10AC5E6FF010EE66EC8EC86 -:1012100032F0E552E5520BC5E6FF020EE66EC8EC71 -:1012200032F0E552E5520CC5E6FF030EE66EC8EC5F -:1012300032F0E552E5520DC5E6FF040EE66EC8EC4D -:1012400032F0E552E5520EC5E6FF050EE66EC8EC3B -:1012500032F0E552E5520FC5E6FF060EE66EC8EC29 -:1012600032F0E552E55210C5E6FF070EE66EC8EC17 -:1012700032F0E552E55211C5E6FF080EE66EC8EC05 +:101200000501095D40E10AC5E6FF010EE66EB9EC95 +:1012100032F0E552E5520BC5E6FF020EE66EB9EC80 +:1012200032F0E552E5520CC5E6FF030EE66EB9EC6E +:1012300032F0E552E5520DC5E6FF040EE66EB9EC5C +:1012400032F0E552E5520EC5E6FF050EE66EB9EC4A +:1012500032F0E552E5520FC5E6FF060EE66EB9EC38 +:1012600032F0E552E55210C5E6FF070EE66EB9EC26 +:1012700032F0E552E55211C5E6FF080EE66EB9EC14 :1012800032F0E552E5520501090504E0020E0501C0 -:10129000095D40E10AC5E6FF090EE66EC8EC32F0D2 -:1012A000E552E5520BC5E6FF0A0EE66EC8EC32F0D9 -:1012B000E552E5520CC5E6FF0B0EE66EC8EC32F0C7 -:1012C000E552E5520DC5E6FF0C0EE66EC8EC32F0B5 -:1012D000E552E5520EC5E6FF0D0EE66EC8EC32F0A3 -:1012E000E552E5520FC5E6FF0E0EE66EC8EC32F091 -:1012F000E552E55210C5E6FF0F0EE66EC8EC32F07F -:10130000E552E55211C5E6FF100EE66EC8EC32F06C +:10129000095D40E10AC5E6FF090EE66EB9EC32F0E1 +:1012A000E552E5520BC5E6FF0A0EE66EB9EC32F0E8 +:1012B000E552E5520CC5E6FF0B0EE66EB9EC32F0D6 +:1012C000E552E5520DC5E6FF0C0EE66EB9EC32F0C4 +:1012D000E552E5520EC5E6FF0D0EE66EB9EC32F0B2 +:1012E000E552E5520FC5E6FF0E0EE66EB9EC32F0A0 +:1012F000E552E55210C5E6FF0F0EE66EB9EC32F08E +:10130000E552E55211C5E6FF100EE66EB9EC32F07B :10131000E552E552F9EF11F000C540F50501416BCA -:101320000501030E426F0501436B010EE66EE8EC0A -:1013300032F0E5520501486F020EE66EE8EC32F03D -:10134000E5520501496F030EE66EE8EC32F0E55216 -:1013500005014A6F040EE66EE8EC32F0E552050135 -:101360004B6F050EE66EE8EC32F0E55205014C6F6E -:10137000060EE66EE8EC32F0E55205014D6F070E01 -:10138000E66EE8EC32F0E55205014E6F080EE66EAF -:10139000E8EC32F0E55205014F6F090EE66EE8EC1D -:1013A00032F0E5520501506F0A0EE66EE8EC32F0BD -:1013B000E5520501516F0B0EE66EE8EC32F0E55296 -:1013C0000501526F0C0EE66EE8EC32F0E5520501B5 -:1013D000536F0D0EE66EE8EC32F0E5520501546FE6 -:1013E0000E0EE66EE8EC32F0E5520501556F0F0E79 -:1013F000E66EE8EC32F0E5520501566F100EE66E2F -:10140000E8EC32F0E5520501576F400EE66E400EF3 -:10141000E66E050EE66E010EE66E010EE66E76ECE9 +:101320000501030E426F0501436B010EE66ED9EC19 +:1013300032F0E5520501486F020EE66ED9EC32F04C +:10134000E5520501496F030EE66ED9EC32F0E55225 +:1013500005014A6F040EE66ED9EC32F0E552050144 +:101360004B6F050EE66ED9EC32F0E55205014C6F7D +:10137000060EE66ED9EC32F0E55205014D6F070E10 +:10138000E66ED9EC32F0E55205014E6F080EE66EBE +:10139000D9EC32F0E55205014F6F090EE66ED9EC3B +:1013A00032F0E5520501506F0A0EE66ED9EC32F0CC +:1013B000E5520501516F0B0EE66ED9EC32F0E552A5 +:1013C0000501526F0C0EE66ED9EC32F0E5520501C4 +:1013D000536F0D0EE66ED9EC32F0E5520501546FF5 +:1013E0000E0EE66ED9EC32F0E5520501556F0F0E88 +:1013F000E66ED9EC32F0E5520501566F100EE66E3E +:10140000D9EC32F0E5520501576F400EE66E400E02 +:10141000E66E050EE66E010EE66E010EE66E67ECF8 :1014200023F0006E050EE15E0050F3CF49F1F4CFDA -:101430004AF1F9EF11F0030EE66E010EE66EC8EC0C -:1014400032F0E552E552E80EE66E020EE66EC8ECAA -:1014500032F0E552E552E66A030EE66EC8EC32F071 -:10146000E552E552010EE66E040EE66EC8EC32F06F -:10147000E552E552E66A050EE66EC8EC32F0E5523A -:10148000E552E66A060EE66EC8EC32F0E552E55229 -:10149000270EE66E070EE66EC8EC32F0E552E55216 -:1014A000100EE66E080EE66EC8EC32F0E552E5521C -:1014B000030EE66E090EE66EC8EC32F0E552E55218 -:1014C000E80EE66E0A0EE66EC8EC32F0E552E55222 -:1014D000E66A0B0EE66EC8EC32F0E552E552010EFC -:1014E000E66E0C0EE66EC8EC32F0E552E552E66AA6 -:1014F0000D0EE66EC8EC32F0E552E552E66A0E0ECD -:10150000E66EC8EC32F0E552E552270EE66E0F0E9D -:10151000E66EC8EC32F0E552E552100EE66E100EA3 -:10152000E66EC8EC32F0E552E552F9EF11F0E9EC65 +:101430004AF1F9EF11F0030EE66E010EE66EB9EC1B +:1014400032F0E552E552E80EE66E020EE66EB9ECB9 +:1014500032F0E552E552E66A030EE66EB9EC32F080 +:10146000E552E552010EE66E040EE66EB9EC32F07E +:10147000E552E552E66A050EE66EB9EC32F0E55249 +:10148000E552E66A060EE66EB9EC32F0E552E55238 +:10149000270EE66E070EE66EB9EC32F0E552E55225 +:1014A000100EE66E080EE66EB9EC32F0E552E5522B +:1014B000030EE66E090EE66EB9EC32F0E552E55227 +:1014C000E80EE66E0A0EE66EB9EC32F0E552E55231 +:1014D000E66A0B0EE66EB9EC32F0E552E552010E0B +:1014E000E66E0C0EE66EB9EC32F0E552E552E66AB5 +:1014F0000D0EE66EB9EC32F0E552E552E66A0E0EDC +:10150000E66EB9EC32F0E552E552270EE66E0F0EAC +:10151000E66EB9EC32F0E552E552100EE66E100EB2 +:10152000E66EB9EC32F0E552E552F9EF11F0EBEC72 :1015300016F0F9EF11F0060E09C5DBFF050E0AC51E :10154000DBFF080E0BC5DBFF070E0CC5DBFF0A0E29 :101550000DC5DBFF090E0EC5DBFF090EDBCFE6FF75 :101560000A0EDBCFE6FF070EDBCFE6FF080EDBCF70 -:10157000E6FF050EDBCFE6FF060EDBCFE6FF75ECE0 +:10157000E6FF050EDBCFE6FF060EDBCFE6FF6DECE8 :1015800018F0006E060EE15E00500101010E526F70 :10159000F9EF11F0060E09C5DBFF050E0AC5DBFFEA :1015A000080E0BC5DBFF070E0CC5DBFF0A0E0DC5D1 :1015B000DBFF090E0EC5DBFF090EDBCFE6FF0A0ECF :1015C000DBCFE6FF070EDBCFE6FF080EDBCFE6FF43 -:1015D000050EDBCFE6FF060EDBCFE6FF7FEC18F053 +:1015D000050EDBCFE6FF060EDBCFE6FF77EC18F05B :1015E000006E060EE15E00500101010E526FF9EF30 :1015F00011F0060E09C5DBFF050E0AC5DBFF080E5C :101600000BC5DBFF070E0CC5DBFF0A0E0DC5DBFFAC :10161000090E0EC5DBFF090EDBCFE6FF0A0EDBCF9E :10162000E6FF070EDBCFE6FF080EDBCFE6FF050E79 -:10163000DBCFE6FF060EDBCFE6FF8BEC18F0006E8B +:10163000DBCFE6FF060EDBCFE6FF83EC18F0006E93 :10164000060EE15E00500101010E526FF9EF11F03C :10165000060E09C5DBFF050E0AC5DBFF080E0BC52C :10166000DBFF070E0CC5DBFF0A0E0DC5DBFF090E05 :101670000EC5DBFF090EDBCFE6FF0A0EDBCFE6FF70 :10168000070EDBCFE6FF080EDBCFE6FF050EDBCF54 -:10169000E6FF060EDBCFE6FF97EC18F0006E060EB5 +:10169000E6FF060EDBCFE6FF8FEC18F0006E060EBD :1016A000E15E00500101010E526FF9EF11F0060EDC :1016B00009C5DBFF050E0AC5DBFF080E0BC5DBFF06 :1016C000070E0CC5DBFF0A0E0DC5DBFF090E0EC5AC @@ -246,233 +246,233 @@ :1016F0000E0EDBCFE6FF11C5E6FF0B0EDBCFE6FFDC :101700000C0EDBCFE6FF090EDBCFE6FF0A0EDBCFC8 :10171000E6FF070EDBCFE6FF080EDBCFE6FF050E88 -:10172000DBCFE6FF060EDBCFE6FFA3EC18F0006E82 +:10172000DBCFE6FF060EDBCFE6FF9BEC18F0006E8A :101730000B0EE15E00500101010E526FF9EF11F046 :10174000060E0AC5DBFF050E0BC5DBFF050EDBCF62 -:10175000E6FF060EDBCFE6FF09C5E6FF39EC18F021 +:10175000E6FF060EDBCFE6FF09C5E6FF3FEC18F01B :10176000E552E552E552F9EF11F0060E0AC5DBFF2E :10177000050E0BC5DBFF080E0CC5DBFF070E0DC504 :10178000DBFF0A0E0EC5DBFF090E0FC5DBFF020EE5 :101790000501095D01E0B8D1090EDBCF2FF00A0E7B -:1017A000DBCF30F0CBEC24F02EC008F02FC009F0D6 +:1017A000DBCF30F0BCEC24F02EC008F02FC009F0E5 :1017B00030C00AF031C00BF0A60E336E280E346E26 :1017C000940E356E3F0E366E08C02EF009C02FF015 -:1017D0000AC030F00BC031F0E5EC25F02EC004F06B +:1017D0000AC030F00BC031F0D6EC25F02EC004F07A :1017E0002FC005F030C006F031C007F0CC0E336ECC :1017F000BC0E346E8C0E356E3B0E366E04C02EF071 -:1018000005C02FF006C030F007C031F0E5EC25F040 -:1018100081EC26F02DC000F02EC001F02FC002F0A8 +:1018000005C02FF006C030F007C031F0D6EC25F04F +:1018100072EC26F02DC000F02EC001F02FC002F0B7 :1018200030C003F000C0E6FF01C0E6FF02C0E6FFE3 :1018300003C0E6FF070EDBCF2FF0080EDBCF30F042 -:10184000CBEC24F02EC014F02FC015F030C016F0F1 +:10184000BCEC24F02EC014F02FC015F030C016F000 :1018500031C017F0A60E336E280E346E940E356E1E :101860003F0E366E14C02EF015C02FF016C030F0AB -:1018700017C031F0E5EC25F02EC010F02FC011F0AC +:1018700017C031F0D6EC25F02EC010F02FC011F0BB :1018800030C012F031C013F0BD0E336E370E346E1F :10189000860E356E410E366E10C02EF011C02FF040 -:1018A00012C030F013C031F0E5EC25F081EC26F0E9 +:1018A00012C030F013C031F0D6EC25F072EC26F007 :1018B0002DC00CF02EC00DF02FC00EF030C00FF078 :1018C0000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FF4E -:1018D000050EDBCF2FF0060EDBCF30F0CBEC24F083 +:1018D000050EDBCF2FF0060EDBCF30F0BCEC24F092 :1018E0002EC01CF02FC01DF030C01EF031C01FF004 :1018F000A60E336E280E346E940E356E3F0E366E85 :101900001CC02EF01DC02FF01EC030F01FC031F0E3 -:10191000E5EC25F081EC26F02DC018F02EC019F072 +:10191000D6EC25F072EC26F02DC018F02EC019F090 :101920002FC01AF030C01BF0000E186C191E1922BF :101930001A1E1A221B1E1B2218C0E6FF19C0E6FF42 -:101940001AC0E6FF1BC0E6FFE66A6BEC17F0206EDC +:101940001AC0E6FF1BC0E6FFE66A6EEC17F0206ED9 :101950000D0EE15E2050090EDBCF2FF00A0EDBCF1B -:1019600030F0CBEC24F02EC008F02FC009F030C0CE +:1019600030F0BCEC24F02EC008F02FC009F030C0DD :101970000AF031C00BF0A60E336E280E346E940EB2 :10198000356E3F0E366E08C02EF009C02FF00AC02B -:1019900030F00BC031F0E5EC25F02EC004F02FC084 +:1019900030F00BC031F0D6EC25F02EC004F02FC093 :1019A00005F030C006F031C007F0CC0E336EBC0E2F :1019B000346E8C0E356E3B0E366E04C02EF005C0B4 -:1019C0002FF006C030F007C031F0E5EC25F081ECD7 +:1019C0002FF006C030F007C031F0D6EC25F072ECF5 :1019D00026F02DC000F02EC001F02FC002F030C064 :1019E00003F000C0E6FF01C0E6FF02C0E6FF03C04F -:1019F000E6FF070EDBCF2FF0080EDBCF30F0CBEC8D +:1019F000E6FF070EDBCF2FF0080EDBCF30F0BCEC9C :101A000024F02EC014F02FC015F030C016F031C0F5 :101A100017F0A60E336E280E346E940E356E3F0E00 :101A2000366E14C02EF015C02FF016C030F017C05F -:101A300031F0E5EC25F02EC010F02FC011F030C0D1 +:101A300031F0D6EC25F02EC010F02FC011F030C0E0 :101A400012F031C013F0BD0E336E370E346E860EB9 :101A5000356E410E366E10C02EF011C02FF012C040 -:101A600030F013C031F0E5EC25F081EC26F02DC00C +:101A600030F013C031F0D6EC25F072EC26F02DC02A :101A70000CF02EC00DF02FC00EF030C00FF00CC0D7 :101A8000E6FF0DC0E6FF0EC0E6FF0FC0E6FF050E45 -:101A9000DBCF2FF0060EDBCF30F0CBEC24F02EC0E6 +:101A9000DBCF2FF0060EDBCF30F0BCEC24F02EC0F5 :101AA0001CF02FC01DF030C01EF031C01FF0A60E7C :101AB000336E280E346E940E356E3F0E366E1CC09B -:101AC0002EF01DC02FF01EC030F01FC031F0E5EC2D -:101AD00025F081EC26F02DC018F02EC019F02FC093 +:101AC0002EF01DC02FF01EC030F01FC031F0D6EC3C +:101AD00025F072EC26F02DC018F02EC019F02FC0A2 :101AE0001AF030C01BF018C0E6FF19C0E6FF1AC09C -:101AF000E6FF1BC0E6FF010EE66E6BEC17F0206EF2 +:101AF000E6FF1BC0E6FF010EE66E6EEC17F0206EEF :101B00000D0EE15E2050E0D0090EDBCF2FF00A0E63 -:101B1000DBCF30F0CBEC24F02EC008F02FC009F062 +:101B1000DBCF30F0BCEC24F02EC008F02FC009F071 :101B200030C00AF031C00BF0A60E336E280E346EB2 :101B3000940E356E3F0E366E08C02EF009C02FF0A1 -:101B40000AC030F00BC031F0E5EC25F02EC004F0F7 +:101B40000AC030F00BC031F0D6EC25F02EC004F006 :101B50002FC005F030C006F031C007F0CC0E336E58 :101B6000BC0E346E8C0E356E3B0E366E04C02EF0FD -:101B700005C02FF006C030F007C031F0E5EC25F0CD -:101B800081EC26F02DC000F02EC001F02FC002F035 +:101B700005C02FF006C030F007C031F0D6EC25F0DC +:101B800072EC26F02DC000F02EC001F02FC002F044 :101B900030C003F000C0E6FF01C0E6FF02C0E6FF70 :101BA00003C0E6FF070EDBCF2FF0080EDBCF30F0CF -:101BB000CBEC24F02EC014F02FC015F030C016F07E +:101BB000BCEC24F02EC014F02FC015F030C016F08D :101BC00031C017F0A60E336E280E346E940E356EAB :101BD0003F0E366E14C02EF015C02FF016C030F038 -:101BE00017C031F0E5EC25F02EC010F02FC011F039 +:101BE00017C031F0D6EC25F02EC010F02FC011F048 :101BF00030C012F031C013F0BD0E336E370E346EAC :101C0000860E356E410E366E10C02EF011C02FF0CC -:101C100012C030F013C031F0E5EC25F081EC26F075 +:101C100012C030F013C031F0D6EC25F072EC26F093 :101C20002DC00CF02EC00DF02FC00EF030C00FF004 :101C30000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FFDA -:101C4000050EDBCF2FF0060EDBCF30F0CBEC24F00F +:101C4000050EDBCF2FF0060EDBCF30F0BCEC24F01E :101C50002EC01CF02FC01DF030C01EF031C01FF090 :101C6000A60E336E280E346E940E356E3F0E366E11 :101C70001CC02EF01DC02FF01EC030F01FC031F070 -:101C8000E5EC25F081EC26F02DC018F02EC019F0FF +:101C8000D6EC25F072EC26F02DC018F02EC019F01D :101C90002FC01AF030C01BF0000E186C191E19224C :101CA0001A1E1A221B1E1B2218C0E6FF19C0E6FFCF -:101CB0001AC0E6FF1BC0E6FF09C5E6FF6BEC17F094 +:101CB0001AC0E6FF1BC0E6FF09C5E6FF6EEC17F091 :101CC000206E0D0EE15E205094D3060E0AC5DBFF98 :101CD000050E0BC5DBFF080E0CC5DBFF070E0DC59F :101CE000DBFF020E0501095D01E04FD1FF0E05018A :101CF0000E03F350E66E070EDBCF2FF0080EDBCF9E -:101D000030F0CBEC24F02EC008F02FC009F030C02A +:101D000030F0BCEC24F02EC008F02FC009F030C039 :101D10000AF031C00BF0A60E336E280E346E940E0E :101D2000356E3F0E366E08C02EF009C02FF00AC087 -:101D300030F00BC031F0E5EC25F02EC004F02FC0E0 +:101D300030F00BC031F0D6EC25F02EC004F02FC0EF :101D400005F030C006F031C007F0CC0E336EBC0E8B :101D5000346E8C0E356E3B0E366E04C02EF005C010 -:101D60002FF006C030F007C031F0E5EC25F081EC33 +:101D60002FF006C030F007C031F0D6EC25F072EC51 :101D700026F02DC000F02EC001F02FC002F030C0C0 :101D800003F000C0E6FF01C0E6FF02C0E6FF03C0AB -:101D9000E6FF050EDBCF2FF0060EDBCF30F0CBECED +:101D9000E6FF050EDBCF2FF0060EDBCF30F0BCECFC :101DA00024F02EC014F02FC015F030C016F031C052 :101DB00017F0A60E336E280E346E940E356E3F0E5D :101DC000366E14C02EF015C02FF016C030F017C0BC -:101DD00031F0E5EC25F02EC010F02FC011F030C02E +:101DD00031F0D6EC25F02EC010F02FC011F030C03D :101DE00012F031C013F0BD0E336E370E346E860E16 :101DF000356E410E366E10C02EF011C02FF012C09D -:101E000030F013C031F0E5EC25F081EC26F02DC068 +:101E000030F013C031F0D6EC25F072EC26F02DC086 :101E10000CF02EC00DF02FC00EF030C00FF00CC033 :101E2000E6FF0DC0E6FF0EC0E6FF0FC0E6FFE66A64 -:101E3000ADEC17F0186E0A0EE15E18500EC5E6FF05 -:101E4000070EDBCF2FF0080EDBCF30F0CBEC24F009 +:101E3000B0EC17F0186E0A0EE15E18500EC5E6FF02 +:101E4000070EDBCF2FF0080EDBCF30F0BCEC24F018 :101E50002EC008F02FC009F030C00AF031C00BF0DE :101E6000A60E336E280E346E940E356E3F0E366E0F :101E700008C02EF009C02FF00AC030F00BC031F0BE -:101E8000E5EC25F02EC004F02FC005F030C006F0C0 +:101E8000D6EC25F02EC004F02FC005F030C006F0CF :101E900031C007F0CC0E336EBC0E346E8C0E356E36 :101EA0003B0E366E04C02EF005C02FF006C030F099 -:101EB00007C031F0E5EC25F081EC26F02DC000F0F4 +:101EB00007C031F0D6EC25F072EC26F02DC000F012 :101EC0002EC001F02FC002F030C003F000C0E6FFCA :101ED00001C0E6FF02C0E6FF03C0E6FF050EDBCF50 -:101EE0002FF0060EDBCF30F0CBEC24F02EC014F038 +:101EE0002FF0060EDBCF30F0BCEC24F02EC014F047 :101EF0002FC015F030C016F031C017F0A60E336EAB :101F0000280E346E940E356E3F0E366E14C02EF0D1 -:101F100015C02FF016C030F017C031F0E5EC25F0F9 +:101F100015C02FF016C030F017C031F0D6EC25F008 :101F20002EC010F02FC011F030C012F031C013F0ED :101F3000BD0E336E370E346E860E356E410E366E24 :101F400010C02EF011C02FF012C030F013C031F0CD -:101F5000E5EC25F081EC26F02DC00CF02EC00DF044 +:101F5000D6EC25F072EC26F02DC00CF02EC00DF062 :101F60002FC00EF030C00FF00CC0E6FF0DC0E6FF32 -:101F70000EC0E6FF0FC0E6FF010EE66EADEC17F0F7 +:101F70000EC0E6FF0FC0E6FF010EE66EB0EC17F0F4 :101F8000186E0A0EE15E1850A9D0FF0E05010E036F :101F9000F350E66E070EDBCF2FF0080EDBCF30F0EC -:101FA000CBEC24F02EC008F02FC009F030C00AF0AE +:101FA000BCEC24F02EC008F02FC009F030C00AF0BD :101FB00031C00BF0A60E336E280E346E940E356EC3 :101FC0003F0E366E08C02EF009C02FF00AC030F068 -:101FD0000BC031F0E5EC25F02EC004F02FC005F069 +:101FD0000BC031F0D6EC25F02EC004F02FC005F078 :101FE00030C006F031C007F0CC0E336EBC0E346E3C :101FF0008C0E356E3B0E366E04C02EF005C02FF0F1 -:1020000006C030F007C031F0E5EC25F081EC26F099 +:1020000006C030F007C031F0D6EC25F072EC26F0B7 :102010002DC000F02EC001F02FC002F030C003F040 :1020200000C0E6FF01C0E6FF02C0E6FF03C0E6FF16 -:10203000050EDBCF2FF0060EDBCF30F0CBEC24F01B +:10203000050EDBCF2FF0060EDBCF30F0BCEC24F02A :102040002EC014F02FC015F030C016F031C017F0BC :10205000A60E336E280E346E940E356E3F0E366E1D :1020600014C02EF015C02FF016C030F017C031F09C -:10207000E5EC25F02EC010F02FC011F030C012F0AA +:10207000D6EC25F02EC010F02FC011F030C012F0B9 :1020800031C013F0BD0E336E370E346E860E356ED2 :10209000410E366E10C02EF011C02FF012C030F07D -:1020A00013C031F0E5EC25F081EC26F02DC00CF0EA +:1020A00013C031F0D6EC25F072EC26F02DC00CF008 :1020B0002EC00DF02FC00EF030C00FF00CC0E6FFA8 :1020C0000DC0E6FF0EC0E6FF0FC0E6FF09C5E6FF44 -:1020D000ADEC17F0186E0A0EE15E18508AD1060EAC +:1020D000B0EC17F0186E0A0EE15E18508AD1060EA9 :1020E0000AC5DBFF050E0BC5DBFF020E0501095D0E :1020F00001E0B3D0FF0E05010C03F350E66E050EB0 -:10210000DBCF2FF0060EDBCF30F0CBEC24F02EC06F +:10210000DBCF2FF0060EDBCF30F0BCEC24F02EC07E :1021100008F02FC009F030C00AF031C00BF0A60E55 :10212000336E280E346E940E356E3F0E366E08C038 -:102130002EF009C02FF00AC030F00BC031F0E5ECF2 +:102130002EF009C02FF00AC030F00BC031F0D6EC01 :1021400025F02EC004F02FC005F030C006F031C0DD :1021500007F0BD0E336E370E346E860E356E410EAF :10216000366E04C02EF005C02FF006C030F007C058 -:1021700031F0E5EC25F081EC26F02DC000F02EC00A +:1021700031F0D6EC25F072EC26F02DC000F02EC028 :1021800001F02FC002F030C003F000C0E6FF01C034 -:10219000E6FF02C0E6FF03C0E6FFE66AF2EC17F0D6 +:10219000E6FF02C0E6FF03C0E6FFE66AF4EC17F0D4 :1021A0000C6E060EE15E0C500CC5E6FF050EDBCF93 -:1021B0002FF0060EDBCF30F0CBEC24F02EC008F071 +:1021B0002FF0060EDBCF30F0BCEC24F02EC008F080 :1021C0002FC009F030C00AF031C00BF0A60E336EFC :1021D000280E346E940E356E3F0E366E08C02EF00B -:1021E00009C02FF00AC030F00BC031F0E5EC25F04B +:1021E00009C02FF00AC030F00BC031F0D6EC25F05A :1021F0002EC004F02FC005F030C006F031C007F04B :10220000BD0E336E370E346E860E356E410E366E51 :1022100004C02EF005C02FF006C030F007C031F02A -:10222000E5EC25F081EC26F02DC000F02EC001F089 +:10222000D6EC25F072EC26F02DC000F02EC001F0A7 :102230002FC002F030C003F000C0E6FF01C0E6FF8F -:1022400002C0E6FF03C0E6FF010EE66EF2EC17F0F7 +:1022400002C0E6FF03C0E6FF010EE66EF4EC17F0F5 :102250000C6E060EE15E0C505BD0FF0E05010C0308 :10226000F350E66E050EDBCF2FF0060EDBCF30F01D -:10227000CBEC24F02EC008F02FC009F030C00AF0DB +:10227000BCEC24F02EC008F02FC009F030C00AF0EA :1022800031C00BF0A60E336E280E346E940E356EF0 :102290003F0E366E08C02EF009C02FF00AC030F095 -:1022A0000BC031F0E5EC25F02EC004F02FC005F096 +:1022A0000BC031F0D6EC25F02EC004F02FC005F0A5 :1022B00030C006F031C007F0BD0E336E370E346EFD :1022C000860E356E410E366E04C02EF005C02FF01E -:1022D00006C030F007C031F0E5EC25F081EC26F0C7 +:1022D00006C030F007C031F0D6EC25F072EC26F0E5 :1022E0002DC000F02EC001F02FC002F030C003F06E :1022F00000C0E6FF01C0E6FF02C0E6FF03C0E6FF44 -:1023000009C5E6FFF2EC17F00C6E060EE15E0C500C -:1023100070D009C5E6FF0AEC18F0E5520101010E84 -:10232000526F67D021EC1BF0050EF3CFDBFF060EDA -:10233000F4CFDBFF39EC1BF0070EF3CFDBFF080E09 +:1023000009C5E6FFF4EC17F00C6E060EE15E0C500A +:1023100070D009C5E6FF0CEC18F0E5520101010E82 +:10232000526F67D017EC1BF0050EF3CFDBFF060EE4 +:10233000F4CFDBFF2DEC1BF0070EF3CFDBFF080E15 :10234000F4CFDBFF00C540F50501416B0501030E2D :10235000426F0501436B060EDBCF48F5050EDBCF60 :1023600049F5080EDBCF4AF5070EDBCF4BF5400EE3 :10237000E66E400EE66E050EE66E010EE66E010E8E -:10238000E66E76EC23F0006E050EE15E0050F3CFB2 +:10238000E66E67EC23F0006E050EE15E0050F3CFC1 :1023900049F1F4CF4AF12DD000C540F50501416B5C -:1023A0000501030E426F0501436B52EC1BF000095F +:1023A0000501030E426F0501436B44EC1BF000096D :1023B00004E00501010E486F02D00501486B400E94 :1023C000E66E400EE66E050EE66E010EE66E010E3E -:1023D000E66E76EC23F0006E050EE15E0050F3CF62 -:1023E00049F1F4CF4AF105D0010EE66E6EEC33F000 +:1023D000E66E67EC23F0006E050EE15E0050F3CF71 +:1023E00049F1F4CF4AF105D0010EE66E5FEC33F00F :1023F000E552400EE66E000EE66E050EE66EE66AEB -:10240000010EE66E76EC23F0006E050EE15E0050E4 +:10240000010EE66E67EC23F0006E050EE15E0050F3 :10241000F3CF47F1F4CF48F19FD0010149514A1160 :1024200002E1000E08D049C1E9FF4AC1EAFFEF50BE :10243000800B01E0010E00094DE10101010E516F19 :102440000501406B01014C514C2B0501416F050109 -:10245000050E426F0501436B0501486B480E006E87 +:10245000050E426F0501436B0501486B2A0E006EA5 :10246000640E016E026A00C0E6FF01C0E6FF02C012 -:10247000E6FF480EE66E050EE66EACEC32F0036E3B +:10247000E6FF480EE66E050EE66E9DEC32F0036E4A :10248000050EE15E0350400EE66E400EE66E050E50 -:10249000E66E010EE66E010EE66E76EC23F0006E3F +:10249000E66E010EE66E010EE66E67EC23F0006E4E :1024A000050EE15E0050F3CF49F1F4CF4AF1400E42 :1024B000E66E000EE66E050EE66EE66A010EE66E4C -:1024C00076EC23F0006E050EE15E0050F3CF47F18D +:1024C00067EC23F0006E050EE15E0050F3CF47F19C :1024D000F4CF48F141D0010149514A1102E1000E07 :1024E00008D049C1E9FF4AC1EAFFEF50800B01E083 :1024F000010E000931E100C540F50501416B050100 :10250000030E426F0501010E436F400EE66E400E52 -:10251000E66E050EE66E010EE66E010EE66E76ECD8 +:10251000E66E050EE66E010EE66E010EE66E67ECE7 :1025200023F0006E050EE15E0050F3CF49F1F4CFC9 :102530004AF1400EE66E000EE66E050EE66EE66AA5 -:10254000010EE66E76EC23F0006E050EE15E0050A3 +:10254000010EE66E67EC23F0006E050EE15E0050B2 :10255000F3CF47F1F4CF48F10F0EE15C02E2E16AFC :10256000E552E16EE552E7CFD9FF12000101535168 :10257000541104E1100E536F270E546F5307000ED1 @@ -483,9 +483,9 @@ :1025C00006E10101535154110FE18C740AD0200E21 :1025D000005D0AE101015351541106E18C748CA491 :1025E00002D08C9612008C8612001200120012008B -:1025F000120015EF31F012001E0EE66E010EE66EAF -:1026000044EC23F0E552E552400EE66E000EE66E15 -:10261000050EE66EE66A010EE66E76EC23F0006EBD +:1025F000120006EF31F012001E0EE66E010EE66EBE +:1026000035EC23F0E552E552400EE66E000EE66E24 +:10261000050EE66EE66A010EE66E67EC23F0006ECC :10262000050EE15E0050F3CF47F1F4CF48F1120000 :102630006D840101080E686F070E696F6807000E50 :10264000695B68516911FAE16D941200D9CFE6FF18 @@ -505,13 +505,13 @@ :10272000D082D080FC9EFC9CDF50E552E552E7CF82 :10273000D9FF1200E65221D8020EE126F350DF6ED7 :10274000010EF4CFDBFF1200C00EE66EE00EE66E67 -:1027500052EC33F0E552E5521200DF50F36E010EF9 +:1027500043EC33F0E552E5521200DF50F36E010E08 :10276000DB50F46E020EE15C1200DFCFE6FFE66A9A -:10277000C8EC32F0E552E5521200D9CFE6FFE1CFC6 +:10277000B9EC32F0E552E5521200D9CFE6FFE1CFD5 :04278000D9FF12006B -:0C27840060EC1CF0FE0EDB5006E1F80ECD +:0C27840052EC1CF0FE0EDB5006E1F80EDB :1027900096163C0E9416959808D0FE0EDB0405E1C3 -:1027A000070E9612C30E9412958865EF1CF0D9CFD0 +:1027A000070E9612C30E9412958857EF1CF0D9CFDE :1027B000E6FFE1CFD9FFE652010EE66EE3DFE55218 :1027C000809AFE0EDB5004E0FE0EDB5002080FE1A3 :1027D000839C81880000839E0000000000008450DC @@ -597,983 +597,985 @@ :102CD00001F08250010B400DF3CF00F08250400B09 :102CE00001E0010E800DF3500010011002100310DE :102CF000041005100610DF6E838EDF5000D0E55201 -:102D0000E552E7CFD9FF120060EC1CF0E652DF6A13 -:102D1000C6EC1CF0DF6EFD0EDB50DF14DF6EDF5003 -:102D200002E0010E01D0000EE55265EF1CF060ECF0 -:102D30001CF01D0E2BEC1CF0000E4BEC1EF065EF92 -:102D40001CF060EC1CF0C6EC1CF084080DE0C6EC36 -:102D50001CF0C40809E0E66A59EC1EF01AEC1DF0FC -:102D6000A1EC33F0E552EFD71C0E2BEC1CF00A0E51 -:102D70004BEC1EF01EEC1DF0C6EC1CF0800804E0CD -:102D8000C6EC1CF0C008E7E1C6EC1CF0C00802E18C -:102D90001EEC1DF01E0E2BEC1CF00F0E4BEC1EF06B -:102DA000F5EC1EF0FA0EDBCFE6FFFB0EC4EC1DF0D7 -:102DB000F80EDBCFE6FFF90EC4EC1DF0F60EDBCF0C -:102DC000E6FFF70EC4EC1DF0040E2BEC1CF065EFD3 -:102DD0001CF060EC1CF0080EE126010E5DEC1CF00E -:102DE000010EE7CFDBFF020E70EC1EF0DF6E030E6C -:102DF0005DEC1CF0030EE7CFDBFF040E5DEC1CF076 -:102E0000020EE7CFDBFF050E5DEC1CF0050EE7CFF1 -:102E1000DBFF060E5DEC1CF0040EE7CFDBFF070EB8 -:102E20005DEC1CF0070EE7CFDBFF080E5DEC1CF03D -:102E300092EC1CF0E66A23EC1DF0090E5DEC1CF030 -:102E4000010EE7CFDBFF0A0E70EC1EF0DF6E0B0EFB -:102E50005DEC1CF0030EE7CFDBFF0C0E5DEC1CF00D -:102E6000020EE7CFDBFF0D0E5DEC1CF0050EE7CF89 -:102E7000DBFF0E0E5DEC1CF0040EE7CFDBFF0F0E48 -:102E80005DEC1CF0070EE7CFDBFF100E5DEC1CF0D5 -:102E900092EC1CF0010EE66E23EC1DF0020EE66EC5 -:102EA000E66E1AEC1DF0E66A08EC1DF007E1020E72 -:102EB000E66E010EE66E08EC1DF002E0000E01D099 -:102EC000010E006E080EE15C02E2E16AE552E16E7D -:102ED000005065EF1CF060EC1CF00C0E69EC1CF06F -:102EE000D950F20F4FEC1EF0080EEECFDBFF090EAB -:102EF000EECFDBFF0A0EEECFDBFF0B0EEECFDBFFDC -:102F00001F0E2BEC1CF00EEC1DF00A0EDBCF02F0B6 -:102F10000B0E2AEC1DF010E02B0E4BEC1EF00A0EEF -:102F2000DBCFE6FF0B0EC4EC1DF0080EDBCFE6FF97 -:102F3000090EDBCFE6FF03D00B0EE66EE66AC4ECAB -:102F40001EF0C4EC1DF0CFEC1EF00C0EE15C02E2B2 -:102F5000E16AE552E16E65EF1CF060EC1CF00A0ED0 -:102F600069EC1CF0080EDB6A090EDB6A1F0E2BEC05 -:102F70001CF0F50EDBCF00F0003407E2080EDB6A30 -:102F8000100EF36E090EF3CFDBFF040EDBCF00F063 -:102F9000050EDBCF01F0060EDBCF02F0070E2AECA8 -:102FA0001DF00DE00EEC1DF0280E0012080E0112AF -:102FB0003FEC1DF0C4EC1EF0DBCFE6FF07D00EECBB -:102FC0001DF0080E001201123FEC1DF0EEEC1BF09C -:102FD000CFEC1EF00A0EE15C02E2E16AE552E16E1E -:102FE00065EF1CF060EC1CF0F90EDBCFE6FFE66A43 -:102FF000E66AE66AE66AD950FA0F4FEC1EF0D6ECA4 -:103000001EF059EC1EF0A9DF006E0A0EE15E0050C2 -:1030100065EF1CF060EC1CF0FE0EDB5004E0FE0ED1 -:10302000DB5002080DE101EC1DF0F3CF61F1F4CFAC -:1030300062F1E66A79EC1EF0F3CF5FF1F4CF60F154 -:10304000FE0EDB0404E0FE0EDB5002080EE1D9ECBC -:103050001CF0F3CF65F1F4CF66F1010EE66E79EC6A -:103060001EF0F3CF63F1F4CF64F1010EF4DB65EFF2 -:103070001CF060EC1CF01F0EEEDBF5EC1EF0010EF8 -:10308000EADB65EF1CF060EC1CF0020EE126FE0EA0 -:10309000DB50020805E12D6A2E6A2F6A306A1ED0C5 -:1030A0000B0ED9DB59EC1EF0F6EC1CF0DECF00F075 -:1030B000DDCF01F0026A036A100E1F0B07E0D89003 -:1030C0000036013602360336E806F9E100C02DF07D -:1030D00001C02EF002C02FF003C030F0020EE15C00 -:1030E00002E2E16AE552E16EF0D314EC1EF0CBECA3 -:1030F0001CF019EC1EF09EDBABEC1CF0E6D314ECDC -:103100001EF098DBE66AE7DE19EC1EF086EC1EF096 -:10311000ABEC1CF0DAD3FBEC1EF08CDBE66ADBDEFA -:1031200015EC1DF05DEC1DF085DBEAEF1DF0FBEC0E -:103130001EF0CBEC1CF015EC1DF05DEC1DF086ECE8 -:103140001EF0EAEF1DF0BCDB3C0EE126B6EC1DF0F4 -:1031500093EC1EF0B6EC1DF0DFEC1EF08AEC1EF0D6 -:1031600008C02EF009C02FF00AC030F00BC031F0BB -:10317000E5EC25F0B2EC1EF002EC1EF09CEC1EF02B -:10318000BBEC1EF002EC1EF0E2EC1CF08AEC1EF030 -:1031900014C02EF015C02FF016C030F017C031F05B -:1031A000E5EC25F0D4EC1DF0A9EC1EF0FCEC24F0CD -:1031B0007DEC1EF0336A346A800E356E75EC1EF0BD -:1031C000380E2EC0DBFF390E2FC0DBFF3A0E30C0A9 -:1031D000DBFF3B0E31C0DBFFB6EC1DF07DEC1EF0DB -:1031E000DEDB02EC1EF048DBDADB44EC2EF0086E8E -:1031F000080EE15E0850080E2DC0DBFF090E2EC040 -:10320000DBFF0A0E2FC0DBFF0B0E30C0DBFFCBDB7A -:10321000F60EDB5007E0D950F40F4FEC1EF0EE50E5 -:10322000ED103AE177DB080EDBCF0EF0090EDBCFB5 -:103230000FF00A0EDBCF10F00B0E5EDA40DAF5EC81 -:103240001DF02E6A2F6A800E306E400E316E380EE1 -:10325000DBCF33F0390EDBCF34F03A0EDBCF35F075 -:103260003B0EF1EC1EF01DEC1EF099DB0DEC1EF098 -:103270002DC002F02EC003F02FC004F030C005F0C6 -:103280002DC02EF063EC1EF007EC1EF02EDF0A6E50 -:10329000060EE15E0A50CED1380EDBCF04F0390EB7 -:1032A000DBCF05F03A0EDBCF06F03B0EDBCF07F0AD -:1032B0000C6A0D6A0E6A400E0F6E97DAE5EC25F087 -:1032C00082EC1DF0F40EDBCF2FF0F50E7BDB94DBF0 -:1032D000D1EC1DF0FCEC24F0140E2EC0DBFF150E1B -:1032E0002FC0DBFF160E30C0DBFF170E34DAB6EC52 -:1032F0001DF0D1EC1DF0E5EC25F0180E2EC0DBFF23 -:10330000190E2FC0DBFF1A0E30C0DBFF1B0E23DAB5 -:1033100002EC1EF09CEC1EF0D1EC1DF0E5EC25F06B -:103320001C0E2EC0DBFF1D0E2FC0DBFF1E0E30C09B -:10333000DBFF1F0E31C0DBFF1C0EDBCF00F01D0ECC -:10334000DBCF01F01E0EDBCF02F01F0EDBCF03F050 -:1033500088DBC8EC1DF0E5EC25F0200E2EC0DBFF6D -:10336000210E2FC0DBFF220E30C0DBFF230E31C049 -:10337000DBFFD950180FE96EDACFEAFF240EEECF4B -:10338000DBFF250EEECFDBFF260EEECFDBFF270E99 -:10339000EECFDBFFFD0EDBCF2FF0FE0E19EC1FF0A2 -:1033A000200EDBCF33F0210EDBCF34F0220EDBCF4B -:1033B00035F0230ED7EC1DF0280E2EC0DBFF290EB2 -:1033C0002FC0DBFF2A0E30C0DBFF2B0E31C0DBFF2E -:1033D00002EC1EF019EC1FF0240EDBCF33F0250EAB -:1033E000DBCF34F0260EDBCF35F0270EE0DB2C0EE2 -:1033F0002EC0DBFF2D0E2FC0DBFF2E0E30C0DBFFFB -:103400002F0E31C0DBFF2C0EDBCF04F02D0EDBCFF7 -:1034100005F02E0EDBCF06F02F0EDBCF07F021DB01 -:10342000A9EC1EF0E5EC25F0A1DA300E2EC0DBFF92 -:10343000310E2FC0DBFF320E30C0DBFF330E31C048 -:10344000DBFF280EDBCF2EF0290EDBCF2FF02A0E6C -:10345000DBCF30F02B0EDBCF31F088DA340E2EC00C -:10346000DBFF350E2FC0DBFF360E30C0DBFF370E23 -:1034700031C0DBFFD950300F74DBD950340F71DB12 -:1034800044EC2EF0006E080EE15E00500C0E2DC0D4 -:10349000DBFF0D0E2EC0DBFF0E0E2FC0DBFF0F0E6D -:1034A00030C0DBFF006A016A026A400E036EE7DA91 -:1034B00002C0E6FFE66E46DB93EC1EF070DAFFEC2E -:1034C0001EF02DC014F02EC015F02FC016F030C025 -:1034D00017F086EC1EF044EC2EF0186E080EE15E3C -:1034E0001850E552E7CF03F0E552E7CF02F0E5527E -:1034F000E7CF01F0E552E7CF00F02DC004F02EC079 -:1035000005F02FC006F030C007F0A0DB41DBE5EC92 -:1035100025F0100E2EC0DBFF110E2FC0DBFF120EA8 -:1035200030C0DBFF130E31C0DBFFF60EDB500208AC -:103530001BE142DBFBEC24F092DBFCEC24F08FD9A6 -:103540004BDA060E2FC0DBFF070E30C0DBFF000E8C -:10355000DFCF2FF0010E90D989DBD4DA0DDB040E1A -:103560002FC0DBFF050E4ED02E6A2F6A306A400E48 -:10357000316E080EDBCF33F0090EDBCF34F00A0ECC -:10358000DBCF35F00B0EF1EC1EF0B7DB0C0EDBCF12 -:1035900004F00D0EDBCF05F00E0EDBCF06F00F0EA4 -:1035A000DBCF07F004C033F005C034F006C035F0BF -:1035B00007C036F0FBEC24F00C0E2EC0DBFF0D0E26 -:1035C0002FC0DBFF0E0E30C0DBFF0F0E31C0DBFF64 -:1035D000F3DAFCEC24F043DBFBEC24F040D9FCD91B -:1035E000040E2FC0DBFF050E30C0DBFF020EDBCF69 -:1035F0002FF0030E41D940DB85DABEDA060E2FC06C -:10360000DBFF070E30C0DBFF5AD80ED9040EDBCF2C -:103610002FF0050E39DA30DB5CD8BDD90BEC1FF08A -:1036200003D9060EDBCF2FF0070E2EDA1FDB51D8A1 -:1036300001D991D93C0EE15C02E2E16AE552E16E0A -:1036400044D13ED9040EE126DCD912DAE66A42DB27 -:1036500001015F51EE5C066E6051EE58076E6151DC -:10366000EE58086E62510BD902E2E16AE552E16E52 -:103670002CD126D9040EE1269CD9FAD9010EE66E8A -:1036800029DB01016351EE5C066E6451EE58076E52 -:103690006551EE58086E6651F2D802E2E16AE552D1 -:1036A000E16E13D1040EE66EE66AB2D906E0040EAE -:1036B000E66E010EE66EACD901E1000C010CF2DF02 -:1036C0000009FDE01200ACDB24DA9CDADDD9B6EFAC -:1036D0001DF02EC01CF02FC01DF030C01EF031C0F8 -:1036E0001FF02EDBA2DB2DC018F02EC019F02FC06A -:1036F0001AF030C01BF01200DBCF11F0336A346ACD -:10370000340E356E430E366E0EC02EF00FC02FF005 -:1037100010C030F011C031F0E5EC25F02EC00AF0F9 -:103720002FC00BF030C00CF031C00DF0DB0E336E4B -:103730000F0E346E490E356ED8DA7FDAEBDA02C03E -:103740002EF0C1DAFBEC24F062DAE5DC126E060E34 -:10375000E15E1250120031C0DBFF046A056A800E80 -:10376000066E3F0E076E0C6A0D6A0E6A400E0F6EF3 -:1037700004C0E6FF05C0E6FF06C0E6FF07C0E6FF9F -:103780000CC0E6FF0DC0E6FF0EC0E6FFE66E37DBBD -:10379000E552E7CF0FF0E552E7CF0EF0E552E7CF65 -:1037A0000DF0E552E7CF0CF0E552E7CF07F0E55218 -:1037B000E7CF06F0E552E7CF05F0E552E7CF04F09A -:1037C0002DC010F02EC011F02FC012F030C013F039 -:1037D0003DDA58DAE5EC25F082EF1DF06ADA91EC7B -:1037E00014F0E552E552E5521200F40EDBCF2FF053 -:1037F000F50EA2DAD9D942EF1EF08CDAC8EF1DF02F -:10380000140EDBCF00F0150EDBCF01F0160EDBCF70 -:1038100002F0170EDBCF03F0336A346ADC0E356E2C -:10382000420E366EC8EF1DF0F70EDBCF2FF0F80E0C -:1038300089EF1DF0000E186C191E19221A1E1A228B -:103840001B1E1B2218C0E6FF19C0E6FF1AC0E6FFC8 -:103850001BC0E6FF1200E66E2CDA54EF1EF0100ECD -:10386000DBCF33F0110EDBCF34F0120EDBCF35F0AF -:10387000130EB7DA52EF26F05FDAB2EF1EF0EE5811 -:10388000096E06C02DF007C02EF008C02FF0306E74 -:10389000E2EC24F02EC002F02FC003F030C004F0A0 -:1038A00031C005F04DDA92EC25F0AEDA2FC0F3FF0F -:1038B00030C0F4FF040EE15C120012DAE76E120071 -:1038C000D9CFE6FFE1CFD9FF1200E552E7CFD9FF0C -:1038D0001200E126D9CFE9FFDACFEAFFFA0EDBCFFB -:1038E000EEFFFB0EDBCFEEFFFC0EDBCFEEFFFD0E9F -:1038F000DBCFEEFFD950F60FD2D9040EEECFDBFFAF -:10390000050EEECFDBFF060EEECFDBFF070EEECF90 -:10391000DBFF12006AD9026A036AB40E046E420E1B -:10392000056E1200060EE7CFDBFFDBCFE6FF070ECA -:10393000DBCFE6FF040EDBCFE6FF050EDBCFE6FFB5 -:10394000020EDBCFE6FF030EDBCFE6FFDECFE6FFA6 -:10395000DDCFE6FF1200010EE66E6BEC17F05BDACE -:10396000020EE66E0AEC18F0E5521200140EDBCFE0 -:1039700033F0150EDBCF34F0160EDBCF35F0170E1B -:10398000DBCF36F092EC25F07DEF1EF092D924ECDF -:1039900016F0E5521200BAD9E66A6BEF17F04EDA6C -:1039A00031C0E6FF1200020EE66E97EC16F0E5520B -:1039B00012000A0EE66E010EE66E76D9010EE66E74 -:1039C00079EF1EF0B9D92EC018F02FC019F030C011 -:1039D0001AF031C01BF01200020E2FC0DBFF030EE5 -:1039E00030C0DBFF1DDADBCF30F0120082D9F3CF1D -:1039F000DEFFF4CFDDFF1200336A346A356A75EFFB -:103A00001EF00A0EE66EE66A4FD9E66A79EF1EF0FE -:103A100084EC16F0E552E55200091200080EDBCFE7 -:103A200000F0090EDBCF01F01200286E0D0EE15EF2 -:103A30002850120039D9020EE66E12003AD997ECDE -:103A400016F0E5521200A1EC16F0006E090EE15ED0 -:103A500000501200DBCF03F00050011002100310E1 -:103A60001200336A346A800E356EBF0E366E120055 -:103A7000020EF3CFDBFF030EF4CFDBFF120000C01A -:103A8000E6FF01C0E6FF120057D975D959D9E5EC18 -:103A900025F09ED9BD0E336E370E346E860E356E10 -:103AA000410E366EC2D92DC00CF02EC00DF02FC0C5 -:103AB0000EF030C00FF086EF1EF005DE2EC024F0B1 -:103AC0002FC025F030C026F031C027F0350E336E00 -:103AD000FA0E346E0E0E356E3C0E366EE5EC25F0A9 -:103AE0002EC020F02FC021F030C022F031C023F0D2 -:103AF000336A346A5C0E356E430E366EE5EC25F0A3 -:103B000069EF1BF010D906D924D992EC25F07DEF8E -:103B10001EF012D908D914D9E5EC25F023D9CC0E22 -:103B2000336EBC0E346E8C0E356E3B0E366E7DD908 -:103B30002DC000F02EC001F02FC002F030C003F005 -:103B400086EF1EF0140EDBCF0CF0150EDBCF0DF060 -:103B5000160EDBCF0EF0170EDBCF0FF046DEFBEFBD -:103B600024F0E96EDACFEAFFD6EF1EF0FD0EDBCFD0 -:103B70002FF0FE0E9CEF1EF053D9DED820D93DDE8B -:103B8000E5EC25F052EF26F0DBCFE6FFEEEF1BF081 -:103B900000C02EF001C02FF002C030F003C031F0A1 -:103BA0001200E9D8FDEF1BF013D98AEF1EF019D9E6 -:103BB000BAD823DEFBEF24F0ADDE0C0EDBCF0EF027 -:103BC0000D0EDBCF0FF00E0EDBCF10F00F0E94DDDD -:103BD00000EF1CF0010EE66E6BEC17F026DF020E14 -:103BE000E66E0AEC18F0E55270D6F70EDBCFE6FF72 -:103BF000F80EDBCFE6FFF90EDBCFE6FFFA0EDBCFE8 -:103C0000E6FF1200FB0EDBCF2FF0FC0E1200FCD8FB -:103C10002FC0E6FF30C0E6FF120057EC2AF0E55255 -:103C2000E552E552E55212004BDEBDDE4CDD69EF98 -:103C30001BF0F1D848DD69EF1BF02EC006F02FC055 -:103C400007F030C008F031C009F012002DC033F089 -:103C50002EC034F02FC035F030C036F01200FFDD3A -:103C60002FC0DEFF30C0DDFF00EF1CF0020EDBCF07 -:103C70002FF0030E9CEF1EF0000EDFCF2FF0010E91 -:103C80009CEF1EF00CC02EF00DC02FF00EC030F0D7 -:103C90000FC031F01200E66EE66AEEEF1BF0E96E3F -:103CA000FF0EDA20EA6E120012EC14F0E552E55233 -:103CB0001200FE0EDBCFE6FF1200DECFE6FFDDCF07 -:103CC000E6FFEEEF1BF003C02FF004C030F005C09C -:103CD00031F012008BDED9CFE9FFDACFEAFF120014 -:103CE000E66EE8EC32F0E5521200400E366E92EFCE -:103CF00025F076EC15F0E55212002EC000F02FC032 -:103D000001F030C002F031C003F012002DC0E6FF18 -:103D10001EEF1FF02EC033F02FC034F030C035F04E -:103D200031C036F012002EC008F02FC009F030C0AC -:103D30000AF031C00BF01200DBCF30F0CDEF24F0F1 -:103D4000A60E336E280E346E940E356E3F0E366E10 -:103D5000120004C02EF005C02FF006C030F007C0DE -:103D600031F012002EC004F02FC005F030C006F074 -:103D700031C007F012002EC014F02FC015F030C073 -:103D800016F031C017F0120029DD060EDBCFE6FF7A -:103D9000070EFADE040EDBCFE6FF050E1200020E60 -:103DA000DBCFE6FF030EF0DE5DEF1EF0EECFE6FFA9 -:103DB000EECFE6FFEECFE6FFEFCFE6FF12002EC01C -:103DC0000CF02FC00DF030C00EF031C00FF012001B -:103DD0002EC010F02FC011F030C012F031C013F01F -:103DE0001200DBCF36F0E5EF25F0FC0EDBCFE6FF6F -:103DF000FD0EC4EF1DF064DDD6DD5DEF1DF0D95082 -:103E0000380FAFDE0DEF1EF052EC26F02FC000F0A1 -:103E100030C001F01200206E0D0EE15E2050120045 -:103E2000F90EDBCF2FF0FA0E1200E5EC25F081EF52 -:103E300026F022DDE1DD61DFA2EF1DF02EC0E6FFFE -:0A3E40002FC0E6FF30C0E6FF1200BD -:063E4A001DEC24F06A6A81 -:103E5000686A50EC24F06D8C6E6A00EC24F06D9C66 -:103E6000DF6A31EC24F010E2DF50040DF3CFE9FFFC -:103E7000F4CFEAFF000EE926040EEA22EE6AEE6AAB -:103E8000EE6AEE6ADF2AEDD7160E706E68A604D0D1 -:103E9000030EC6EC23F0FAD70101136B186B196BF4 -:103EA0001A6B6D98080E0B6F040E0C6F016B006B94 -:103EB000E552DBEF23F01DEC24F0010100510BE192 -:103EC0006D6A696A50EC24F06DB602D06D86FCD73D -:103ED0000101010E006F000508E16DBA06D0686AA5 -:103EE000696A69806988020E006F6850040B07E0F8 -:103EF0006950040B04E0020EC6EC23F089D86DB2C1 -:103F000047D06850010B14E06950010B11E09DDFB0 -:103F10000101040E006F0401200E026F040E036FF6 -:103F2000080E016F006B8C0E0013E66A8FEC24F014 -:103F30006850100B07E06950100B04E060D8040EC5 -:103F4000C6EC23F06850400B0BE06950400B08E0D2 -:103F500057EC24F0020ECEEC23F0060EC6EC23F054 -:103F60006850200B04E06950200B01E035D8685000 -:103F7000020B0AE06950020B07E057EC24F0E668F8 -:103F8000E668AFEC24F06A6A040E0101005D02E20B -:103F9000A19A1FD069A61CD0DF6A040EDF5C18E26C -:103FA00068A616D06CCF20F1030EC6EC23F0780E75 -:103FB0000101201502E138D809D0000EE66EE66A4C -:103FC000200EE66E010EE66E010EE8DBDF2AE5D775 -:103FD000A19AE552DBEF23F070A00ED0E9EC23F0BC -:103FE000EF50800808E1D5DBEF50840804E1E9ECEC -:103FF00023F08C0EEF6E7090050EC6EF23F06984EF -:10400000040EC4DB6D8209EC24F0040ECEEF23F025 -:1040100009EC24F0030EC2DB6D92699468A403D00E -:10402000020EB4DBFBD712001DEC24F0FD0E0101E3 -:1040300020153DE17E0E2015E8407F0B040DF3CFE7 -:1040400003F1F4CF04F1000E0327040E042303C18F -:1040500005F104C106F10575BCDBEF503C0BE842ED -:10406000E8420D0822E1B5DB86EC24F0EECF00F04B -:10407000EFCF01F0280E001816E1040E011813E12D -:10408000C0EC24F0DF6AEDDB0EE2DF5039EC24F007 -:10409000DF50EA6A200FE96E040EEA22E552E7508B -:1040A000EF6EDF2AF0D70AD807D01AD805D0FD0E58 -:1040B0002015040801E122D8E5527DD36ADBEF50D8 -:1040C000800B02E066DBEF6A01010F6B106B146B73 -:1040D000156B136B64D89DDB170E60DB04EF22F0C9 -:1040E000020E0101105D02E191EF22F034D80101CE -:1040F000215102E18BEF24F0216B12009EDB49DBA2 -:10410000EF50400B01E0010EDF6E01010B75080E50 -:10411000005D09E122C46EFF6E50000802E2100E3D -:1041200001D0040E006F100513E1C4EC24F0A6D9F1 -:10413000020E01010F5D03E12CDB840E07D0DF507E -:1041400003E127DBC80E02D024DB880EEF6E01D01E -:1041500002D8E55230D32BDB0101106B1ADBEF6A7A -:10416000040E0B19006E0CC101F0DE6E0CC1DDFFF8 -:1041700019DBEF6A18AF0CD01B511C1107E005D0FA -:104180001CC1FAFF01011B51F96EFADF0101189FF2 -:10419000020EE15C02E2E16AE552E16E0CD3040139 -:1041A0002051600BE842E842E842E842E842000958 -:1041B00001E0120021510C0A45E00B0A3FE00C0A15 -:1041C00031E0010A22E00B0A1EE0020A1CE0030AA9 -:1041D00018E0080A10E0010A0CE00F0A08E0030AE0 -:1041E00001E012000101138F080E006F120084EF2E -:1041F00021F0EDEF22F00101010E116F010E126F9F -:104200000CD0C5EF21F023EF21F024510101116FF3 -:10421000126B020E1127010E12231381010E146F6F -:10422000138F12000101138F04012451EA6A020F57 -:10423000E96E010EEA2222C4EFFF1200EADA160E3E -:10424000CEEF23F012007EDB040EE12604012205EE -:1042500010E120511F0B00090CE10101138F030E27 -:104260000401215D04E10101010E1F6F02D0010173 -:104270001F6B0401225141E120511F0B02083DE157 -:1042800024510F0B000939E00101138F040124BFF1 -:1042900005D0A4DA070EE926010E04D09FDA0B0E32 -:1042A000E926010ED2DA030E215D03E17BDA840EEA -:1042B00023D024510F0B016A700F006E0F0E0122E4 -:1042C000020E00C0DBFF030E01C0DBFF020EDBCFDE -:1042D000E9FF030EDBCFEAFFEE90ED5224AF06D0EC -:1042E00061DAEF6ADF745EDA400E06D05BDA880EC0 -:1042F000EF6EDF7457DAC80EEF6E040EE15C02E277 -:10430000E16AE552E16E57D2800E0401205D3CE186 -:104310000101C00E136F04012351030A1EE0010ABC -:1043200009E0030A2FE10101F80E116F620E126F0E -:10433000120E22D0C3DAA20EF626630EA2DA020E05 -:104340000101F76A1125F66E1251F7220900F5CF27 -:1043500014F10A00F5CF15F11200030E225D0FE2F1 -:10436000ADDAA40EF626630E8CDA11C1F6FF12C187 -:10437000F7FF0800F5500101146F156B12000101E1 -:10438000136B12000101136B120011DA0401286B88 -:10439000296B20511F0B020A11E0030A0CE0010AED -:1043A00022E10101138F0401288101011F051BE196 -:1043B0000401288318D00101138F15D00101138F38 -:1043C000040124BF05D00ADA070EE926010E04D045 -:1043D00005DA0B0EE926010E38DAE4D9EF50040BAA -:1043E00002E0010E286F010113AF07D0280E116FF4 -:1043F000040E126F1381020E146F020EE15C02E2D2 -:10440000E16AE552E16ED7D16D98010113BF08D082 -:1044100018AF02D061DA2AD07EDABBD9840E27D059 -:1044200018BF2BD0040120AF24D001011451040186 -:10443000265D010115510401275904E226C414F137 -:1044400027C415F11BD80101010E106FA1DA800EEF -:10445000EF6E216BBED9EE52080EEF6E91DAB9D92C -:10446000840EEF6E010E216F8FDA93D9C80EEF6EB6 -:104470001200010131DAC80EEF6E120098D9010165 -:10448000080E145D000E15590DE214C1DEFF15C1B2 -:10449000DDFF0F5102E1010E03D00F0506E1020E10 -:1044A0000F6F03D0080EDE6EDD6A73D9EF9271D9FB -:1044B000EF906FD9010EDB50EF126BD9EE52DFCFC8 -:1044C000EFFF000EDB50145F010EDB50155B280E72 -:1044D0001D6F040E1E6F13B10FD0F7D91BE011C171 -:1044E000F6FF12C1F7FF112B000E12230800F55042 -:1044F00096D9F3E2DB06F1D7E8D90CE011C1E9FF68 -:1045000012C1EAFF112B000E1223EF5088D9F4E2FA -:10451000DB06F2D7020EE15C02E2E16AE552E16EEF -:104520004AD145D956D9EE52EFCFDFFFDFCF00F0A9 -:1045300000500101195D000E1A5903E219C1DFFF95 -:1045400009D0DF50006E016AE850195D196F015003 -:104550001A591A6F010EDB6ADF50F36E010EDBCFC2 -:10456000F4FFF350F45C10E2010EDB5082D916C167 -:10457000E9FF17C1EAFF162B000E1723E552E7509B -:10458000EF6E010EDB2AE8D7000ED8801955000E19 -:104590001A550DE2F4D854D91CD9EF50400B03E161 -:1045A000EAD9C80E02D0E7D9880EEF6E0FD0F0D945 -:1045B000840EEF6E1B511C1107E005D01CC1FAFFE1 -:1045C00001011B51F96EFADF0101189F020EE15C37 -:1045D00002E2E16AE552E16EEED00101138F10D9DB -:1045E000010EE66EE66AE66A020EE66E010EAFD9CD -:1045F00022C401F10401225104E10101100E006FF7 -:1046000012000101200E006F04D9150ECEEF23F029 -:10461000CED8000EDE6E040EDD6EE8D8040DF35029 -:10462000006E016A020E0F0B05E0D89001320032D5 -:10463000E806FBE1D89000360136D8900036013606 -:10464000D9CFE9FFDACFEAFF0050EE260150ED2284 -:10465000A9D8EF9EFD0EDB5002E16AD901D06DD9D9 -:10466000EA22DECFEEFFDDCFEDFF9CD8EF9C9AD89B -:10467000040EE926000EEA22EF8C020EE15C02E253 -:10468000E16AE552E16E97D092D8FE0EDB50016AE6 -:10469000700F006E0F0EDFD885D8FD0EDBCFEFFF59 -:1046A000DBA402D0E66AF5D8FD0EDBA203D0010E32 -:1046B000E66EEFD8020EE15C02E2E16AE552E16EDD -:1046C0007AD075D8FE0EDB5005E125D962D8840E6C -:1046D000EF6E05D08BD80CD989D8010F09D9020EFD -:1046E000E15C02E2E16AE552E16E65D060D8FD0E60 -:1046F000DB5002E022D901D01BD9A7D853D806D964 -:10470000FB0EDBCFEEFFFC0EDBCFEDFF4BD8EE5206 -:10471000FA0EDBCFEFFF400E45D8E850EF16880EBB -:1047200041D8E850EF12FD0EDB5002E006D901D06F -:10473000FFD8EA22EF74DECF00F0DDCF01F000C039 -:10474000F3FF01C0F4FF020EE15C02E2E16AE55210 -:10475000E16E31D0F7D8010EF36EFC0EDB5004E0B1 -:10476000D890F336E806FCE1F31C006EFD0EDBCFBB -:10477000E9FFFE0EDBCFEAFF0050EF161CD0FBD89E -:10478000EE52080EEF6EF7D886EF24F0E66E8FEF4C -:1047900024F00BC1E9FF0CC1EAFF1200E66EE66AE5 -:1047A000AFEF24F0DECFE9FFDDCFEAFF1200CAD879 -:1047B000020EE1261200E552E7CFD9FF1200D6D84B -:1047C000BBEF24F0FE0EEA6ADB34FE0BEA36E96E3C -:1047D000120003C1E9FF04C1EAFF120024510F0BCC -:1047E000E96EEA6AD890E936EA361200FD0EDB502F -:1047F000E824026EFE0EDB50040DF350022412007A -:10480000000EE66EE66AE66A710EE66E0F0EA7EF20 -:1048100024F0000EE66EE66AE66EE66A1200E66EC8 -:104820001DC1E9FF1EC1EAFF1D2B000E1E23E5522C -:10483000E750EF6EDF06010E120084D8E652120038 -:10484000280EEE6E040EED6E1200EA22EECFDEFFB1 -:10485000EDCFDDFF1200012200C0DEFF01C0DDFF51 -:104860001200DF50006E016A080E005C000E015855 -:104870001200EA6A280FE96E040EEA22EF50E66E93 -:104880001200F7220900F5CF11F10A00F5CF12F15D -:104890001200FE0EDBCFE6FFBBDEE552E552120052 -:1048A000160E6F6E9F0E6B6E7B0E696E1200010E00 -:1048B000E66EE66A000EE66EE66A12002251F66EB9 -:1048C000F76AD890F636F7361200D9CFE9FFDACF7B -:1048D000EAFFEE50ED101200020E106F5ADFEE529A -:1048E000EF6A57DFC80EEF6E4ADFAADFBBEF24F096 -:1048F000040DF3CF00F0F4CF01F0000E0026040EFB -:10490000AADF840E4FDFE850EF121200020EE926F4 -:10491000000EEA2212003CD88C0EEF6E1200680ED8 -:10492000E66E0F0EE66E16DFE552E552E552120016 -:1049300049DF070EE926010E120044DF0B0EE926BF -:10494000010E1200D9CFE6FFE1CFD9FF1200E66ECB -:1049500092EC32F0006E050EE15E0050120026EC83 -:1049600013F0006E060EE15E00501200200EEE6E97 -:10497000040EED6E120005C1E9FF06C1EAFF120048 -:1049800028DFC4DFB6EF24F004DFC0DF20EF24F01F -:06499000F6DEDFEF23F06C -:0A499600389E08D0389E30AE05D0E0 -:1049A0002F6C301EE86A3022388E30C02AF02FC0BB -:1049B00029F03C6A3B6A8E0E2B6E2C6AD4EF26F0EF -:1049C000389E0CD0389E30AE09D02D6C2E1E2F1E76 -:1049D000301EE86A2E222F223022388E30C02AF074 -:1049E0002FC029F02EC03CF02DC03BF09E0E2B6E48 -:1049F0002C6AD4EF26F0367E386A10EC27F028ECCB -:104A000027F038B6B8EF26F038A20AD038AA03D07B -:104A100038BEB8EF26F038A4C4EF26F0C1EF26F078 -:104A200038AA05D038ACC4EF26F0C1EF26F038A084 -:104A30000AD038A808D038BE04D038A402D0CDEFB0 -:104A400026F0D1EF26F03B6A2C6A3650315C3A6E84 -:104A500010E32EC03CF02FC029F030C02AF031C046 -:104A600039F033C02EF034C02FF035C030F0383A72 -:104A700009D033C03CF034C029F035C02AF036C02C -:104A800039F03A6C389E38BC388E39C02BF038B0CB -:104A900000EF27F01A0E3A6000EF27F02B6A316A18 -:104AA00038A408D02E6C2F1E301E311EE86A2F222B -:104AB0003022312238AC08D03C6C291E2A1E2B1E15 -:104AC000E86A29222A222B222D6A3A5207E0313441 -:104AD00030322F322E322D323A2EF9D72E503C263C -:104AE0002F50292230502A2231502B222DC03BF04A -:104AF000389E2BAE0BD03B6C3C1E291E2A1E2B1E53 -:104B0000E86A3C2229222A222B22388E2BA006D0AA -:104B1000D8802A3229323C323B32392A39C02BF034 -:104B2000D4EF26F0386A10EC27F028EC27F038B6DE -:104B3000B8EF26F038A205D038BAB8EF26F0BFEFAC -:104B400026F038BACBEF26F038A005D038B8B8EF49 -:104B500026F0CBEF26F038B8BFEF26F02C6A7F0E98 -:104B600031242B6EE86A2C2236502B5EE86A2C5AD0 -:104B70001A0E396E316A3B6A3C6A296A2A6A3350D6 -:104B80002E5E34502F5A3550305A000E315A09E7F4 -:104B900033502E2634502F2235503022000E312231 -:104BA00001D03B8AD8902E362F3630363136D89009 -:104BB0003B363C3629362A36392EE1D730502F1075 -:104BC0002E10D8A43B8AD4EF26F0386A10EC27F0D8 -:104BD00028EC27F038B6B8EF26F038A205D038B860 -:104BE000B8EF26F0BFEF26F038AA05D038B0B8EFFE -:104BF00026F0BFEF26F038B002D038A802D0CBEFB5 -:104C000026F02C6A365031242B6EE86A2C227E0E58 -:104C10002B5EE86A2C5A3B6A3C6A296A2A6A35503C -:104C20003002F4CF2AF0F3CF29F034503002F350A1 -:104C30003C26F4502922000E2A2235502F02F35030 -:104C40003C26F4502922000E2A2233503002F35021 -:104C50003B26F4503C22000E29222A2234502F02F7 -:104C6000F3503B26F4503C22000E29222A223550D4 -:104C70002E02F3503B26F4503C22000E29222A2219 -:104C800033502F02F4503B26000E3C2229222A22C8 -:104C900034502E02F4503B26000E3C2229222A22B8 -:104CA000D4EF26F0386A10EC27F038B65CEF26F027 -:104CB00038A20ED038B405D07F0E306EFF0E2F6EA6 -:104CC0001FD0800E306E2F6A1BD0306A2F6A18D02A -:104CD00038B0FBD78F0E3160EDD77E0E3164F5D73B -:104CE0008E0E315C05E0D89030322F32312AF8D761 -:104CF00038A406D02F6C301EE86A302230AEE5D7DB -:104D00001200386A10EC27F038B68BEF26F038A284 -:104D10000FD038B407D07F0E306EFF0E2F6E2E6E80 -:104D20002D6E25D0800E306E01D0306A000EF6D781 -:104D300038B0FBD72D6A9F0E3160EBD77E0E316401 -:104D4000F4D79E0E315C07E0D89030322F322E32ED -:104D50002D32312AF6D738A40AD02D6C2E1E2F1EE4 -:104D6000301EE86A2E222F22302230AEDED712000B -:104D70007F0E316EFF0E306E2F6E2E6E12007F0E84 -:104D800038BEFF0E316E02D07F0E316E800E306E57 -:104D90002F6A2E6AF3D738AE04D0800E316E306A97 -:104DA000F7D7316A306AF4D72A5029103C103B10EB -:104DB000F8E02CBEF0D72ABE0CD02B502C10EBE024 -:104DC000D8903B363C3629362A362B06D8A02C06FE -:104DD000F2D72C50D4E12B28D2E03BAE11D07F0E7D -:104DE0003B1402E13CA00CD03C2AE86A29222A228A -:104DF00007E3D8802A3229323C322B2A2B28BFE005 -:104E00002B50C9E03CC02EF029C02FF02A34306E60 -:104E10002B30316E3032319E38BE318EBEEF26F0EF -:104E20003036313602E33884387E06E13880316A24 -:104E3000306A2F6A2E6A1200312803E0D88030329F -:104E40001200D890303202E1388212003886120007 -:104E50003536363602E3388C387E06E13888366AD5 -:104E6000356A346A336A1200362803E0D880353256 -:104E70001200D8903532EAE1388A120050EC27F05F -:104E800038B6000C38B0000C38B4000C010C50ECF3 -:104E900027F038B6000C38B0000C38A4000C010C18 -:104EA000386A10EC27F028EC27F038B6120038AE3C -:104EB00008D038A004D038A802D03880120038902A -:104EC00012003650315C0BE13550305C08E1345053 -:104ED0002F5C05E133502E5C02E138801200D8A02F -:104EE00002D0388E10D0315036C031F0366E30508E -:104EF00035C030F0356E2F5034C02FF0346E2E5048 -:104F000033C02EF0336E3650315C10E0FF0F09E0F5 -:104F1000389038B403D038AE3884120038AE3894A4 -:104F20001200362AD89035323432333233502E5E66 -:104F300034502F5A3550305A30BEEAD7D8902E36DA -:104F40002F363036312EF8D7C8D7376A35AEAEEFA8 -:104F500027F0346C351EE86A3522371E30AEB6EFC6 -:104F600027F02F6C301EE86A3022371EB8EC33F081 -:104F700030BEC6EF27F037AE000C2F6C301EE86A4B -:104F800030222B6C2C1EE86A2C22000C37BEBDEFA1 -:064F900027F03888FF0C39 -:0A4F9600D9CFE6FFDACFE6FFE1CF46 -:104FA000D9FFE2CFDAFF1D0EE12402E3E168E65209 -:104FB000E16E67DAFA0EDBCFEEFFFB0EDBCFEEFF22 -:104FC000FC0EDBCFEEFFFD0EDBCFEEFFD950040F62 -:104FD000E66E000EDA20E66E0BDAFAEC2FF0006EC9 -:104FE000060EE15C02E2E16AE552E16E0050E76E16 -:104FF0000B0EE7CFDBFFDB50800807E10A0EDB6A10 -:10500000DE68DE68DE687F0E13D00B0EDB0405E180 -:10501000DE6ADE6ADE6ADD6AA6D10B0EDB500408AA -:1050200009E1DB0EDE6E0F0EDE6EC90EDE6E3F0E88 -:10503000DD6E99D1DDD91EDA2DC0DEFF2EC0DEFF78 -:105040002FC0DEFF30C0DDFFDD52DD52DBD90DDACF -:105050003F0E20DA23E12E6A2F6A800E306E3F0E5B -:10506000316EDECF33F0DECF34F0DECF35F0DDCF82 -:1050700036F0DD52DD5292EC25F02EC0DFFF010E3E -:105080002FC0DBFF020E30C0DBFF030E31C0DBFFA1 -:10509000020EF36E0C0EF3CFDBFF02D00C0EDB6AB8 -:1050A000B1D9A30E336E300E346E890E356E3E0EBE -:1050B000F1D96CE1AF0E2E6E670E2F6E3B0E306E87 -:1050C0003F0E316EB2D92EC008F02FC009F030C0AB -:1050D0000AF031C00BF0C9D93F0E366EFBEC24F05C -:1050E0002EC004F02FC005F030C006F031C007F02C -:1050F000C8D9EECF0CF0EECF0DF0EECF0EF0EFCF23 -:105100000FF00CC033F00DC034F00EC035F00FC0FE -:1051100036F0FCEC24F080D9D70E146EB30E156E69 -:10512000DD0E166E3F0E176EACD9EECF18F0EECF37 -:1051300019F0EECF1AF0EFCF1BF018C033F019C002 -:1051400034F01AC035F01BC036F014C02EF015C074 -:105150002FF016C030F0316EFCEC24F02EC010F0B1 -:105160002FC011F030C012F031C013F02EC033F058 -:105170002FC034F030C035F031C036F035D992EC64 -:1051800025F05FD9DD52DD520C0EDB2A31D972D900 -:105190002DC000F02EC001F02FC002F030C003F08F -:1051A00064D9390E366E2DC02EF07AD947EC27F02F -:1051B000010A01E1B5D04ED938D90D0E2EC0DBFF62 -:1051C0000E0E2FC0DBFF0F0E30C0DBFF100E31C004 -:1051D000DBFF910E2E6E860E2F6E500E306EBD0EC2 -:1051E000316E0D0EDBCF33F00E0EDBCF34F00F0E31 -:1051F000DBCF35F0100E4AD90FD9F60E336E100EF4 -:10520000346EF10E356EBE0E366EFCEC24F0110ECF -:105210002EC0DBFF120E2FC0DBFF130E30C0DBFFF2 -:10522000140E31C0DBFF0D0EDBCF00F00E0EDBCF16 -:1052300001F00F0EDBCF02F0100EDBCF03F0D30E28 -:10524000336ECC0E346EB40E356E3F0E366ECCD847 -:10525000FCEC24F0150E2EC0DBFF160E2FC0DBFF7A -:10526000170E30C0DBFF180E31C0DBFF0D0EDBCF99 -:105270002EF00E0EDBCF2FF00F0EDBCF30F0100E26 -:10528000DBCF31F0110EDBCF33F0120EDBCF34F079 -:10529000130EDBCF35F0140EF9D8150EDBCF33F03B -:1052A000160EDBCF34F0170EDBCF35F0180EDBCF48 -:1052B00036F092EC25F0B0D8190E2EC0DBFF1A0E96 -:1052C0002FC0DBFF1B0E30C0DBFF1C0E31C0DBFF2D -:1052D000C1D8190EDBCF33F01A0EDBCF34F01B0E22 -:1052E000DBCF35F01C0ED2D897D8CBD8EECF2EF02E -:1052F000EECF2FF0EECF30F0EFCF31F000C033F033 -:1053000001C034F002C035F003C036F0FCEC24F0EC -:1053100031C0EDFF30C0EDFF2FC0EDFF2EC0EFFF1D -:105320000C0EDB0409E1920E006E0A0E016E060EF1 -:105330003FD8FCEC24F016D00C0EDB50020806E13E -:10534000DB0E006E0F0E016EC90E09D00C0EDB5085 -:1053500003080BE1920E006E0A0E016E860E28D82D -:10536000FBEC24F06ED8DD52DD52... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-02-24 19:27:50
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via f444918324cd99ce343190d5b122295f6ce31e45 (commit) from 1704a1ff79e3504fe1e5121f576c559b2046766d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f444918324cd99ce343190d5b122295f6ce31e45 Author: Olivier BICHLER <oli...@en...> Date: Wed Feb 24 20:26:51 2010 +0100 [driver] do not fail on startup if the old driver do not respond ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 882f6ea..788442b 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -664,8 +664,9 @@ lwt () = ~member:"Shutdown" ~destination:"fr.krobot.Driver" <:obus_func< unit >> - with OBus_bus.Service_unknown _ -> - return () + with + | OBus_bus.Service_unknown _ | OBus_error.No_reply _ -> + return () in if !kill_and_exit then @@ -728,5 +729,6 @@ lwt () = Manager.OBus.export bus (); lwt () = Log.notice "ready, waiting for requests" in - done_waiter + lwt () = done_waiter in + OBus_connection.close bus end hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 19:18:55
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 1704a1ff79e3504fe1e5121f576c559b2046766d (commit) from 4a734d6396172ea06a22a0b8c0300c48ea0dbf48 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1704a1ff79e3504fe1e5121f576c559b2046766d Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 20:18:37 2010 +0100 typos ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/script.ml b/PC_Mainboard/clients/script.ml index fcd4392..ec111c8 100644 --- a/PC_Mainboard/clients/script.ml +++ b/PC_Mainboard/clients/script.ml @@ -250,9 +250,9 @@ let () = register "calibration-start" (f2 (int "range-finder") (keyword "skip-meas" [("true", true); ("false", false)])) (fun logger -> Krobot.calibration_start); - register "calibartion-stop" f0 + register "calibration-stop" f0 (fun logger -> Krobot.calibration_stop); - register "calibartion-continue" f0 + register "calibration-continue" f0 (fun logger -> Krobot.calibration_continue); (* +---------------------------------------------------------------+ @@ -285,7 +285,7 @@ let () = (fun logger krobot id timeout -> lwt x = Krobot_unsafe.AX12.get_load krobot id timeout in logger [textf "load[%d]: %d" id x]); - register ~path:["ax12"] "stats" (f2 id timeout) + register ~path:["ax12"] "get-stats" (f2 id timeout) (fun logger krobot id timeout -> lwt stats = Krobot_unsafe.AX12.get_stats krobot id timeout in lwt () = logger [textf "ax12[%d] position = %d" id stats.Types.ax12_position] in hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 17:31:32
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 4a734d6396172ea06a22a0b8c0300c48ea0dbf48 (commit) from 874ddbf56c24c94c9805d5faa15e242b0f7eefba (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4a734d6396172ea06a22a0b8c0300c48ea0dbf48 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 18:30:46 2010 +0100 [lib_krobot] use the same bus in Krobot.create and Krobot.bus ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/lib_krobot/krobot.ml b/PC_Mainboard/lib_krobot/krobot.ml index b2d727c..bec637f 100644 --- a/PC_Mainboard/lib_krobot/krobot.ml +++ b/PC_Mainboard/lib_krobot/krobot.ml @@ -85,10 +85,6 @@ let make_card_signal ~peer ~name ~get ~update ~typ ~default = +-----------------------------------------------------------------+ *) let bus = lazy( - OBus_bus.of_addresses (OBus_address.of_string Config.bus_address) -) - -let get_bus () = match try Some(Sys.getenv "KROBOT") with Not_found -> None with | Some command -> begin try_lwt @@ -111,17 +107,18 @@ let get_bus () = | None -> try_lwt lwt () = Log.info "connecting to the krobot with the local krobot bus" in - Lazy.force bus + OBus_bus.of_addresses (OBus_address.of_string Config.bus_address) with exn -> lwt () = Log.exn exn "failed to connect to the local krobot bus" in fail exn +) let create ?peer () = lwt peer = match peer with | Some peer -> return peer | None -> - lwt bus = get_bus () in + lwt bus = Lazy.force bus in return (OBus_peer.make bus "fr.krobot.Driver") in lwt compass = make_dev_signal peer "Compass" "Get" "Value" <:obus_type< int >> 0 hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 09:27:53
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 874ddbf56c24c94c9805d5faa15e242b0f7eefba (commit) from cb562ea4bd61d42e8cd13999561155ba29a95952 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 874ddbf56c24c94c9805d5faa15e242b0f7eefba Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 10:27:25 2010 +0100 [controller] list running servies ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/controller.ml b/PC_Mainboard/clients/controller.ml index c455713..a253a34 100644 --- a/PC_Mainboard/clients/controller.ml +++ b/PC_Mainboard/clients/controller.ml @@ -135,6 +135,21 @@ let rec loop krobot history = loop krobot history (* +-----------------------------------------------------------------+ + | Service monitoring | + +-----------------------------------------------------------------+ *) + +let services, set_services = React.S.create ~eq:TextSet.equal TextSet.empty + +let check_services bus = + lwt l = OBus_bus.list_names bus in + set_services (List.fold_left (fun set name -> + if Text.starts_with name "fr.krobot." then + TextSet.add (String.sub name 10 (String.length name - 10)) set + else + set) TextSet.empty l); + return () + +(* +-----------------------------------------------------------------+ | Drawing | +-----------------------------------------------------------------+ *) @@ -174,6 +189,8 @@ let rec draw krobot = fg line_color; text " ]─┬─[ "; fg name_color; text "Logic Sensors"; fg line_color; text " ]─┬─[ "; + fg name_color; text "Services"; + fg line_color; text " ]─┬─[ "; fg name_color; text "Status"; fg line_color; text " ]─"]; points.(9).(0) <- { line with char = "├" }; @@ -183,9 +200,10 @@ let rec draw krobot = done; for i = 1 to 8 do points.(i).(20) <- { line with char = "│" }; - points.(i).(40) <- { line with char = "│" } + points.(i).(40) <- { line with char = "│" }; + points.(i).(55) <- { line with char = "│" } done; - Draw.textc screen 1 9 [fg line_color; text "───────────────────┴───────────────────┴"]; + Draw.textc screen 1 9 [fg line_color; text "───────────────────┴───────────────────┴──────────────┴"]; let zone = Zone.inner screen in @@ -201,8 +219,18 @@ let rec draw krobot = (j + 0) (if logic_sensors.(j + 0) then "O" else ".") (j + 1) (if logic_sensors.(j + 1) then "O" else ".") done; - let x = 40 in + let zone' = Zone.sub ~zone ~x:40 ~y:0 ~width:14 ~height:8 in + let rec loop y = function + | [] -> + () + | name :: rest -> + Draw.text ~zone:zone' ~x:0 ~y ~text:name; + loop (y + 1) rest + in + loop 0 (TextSet.elements (React.S.value services)); + + let x = 55 in Draw.textf zone x 0 "team = %s" (match React.S.value (Krobot.team krobot) with | Krobot.Team_red -> "red" | Krobot.Team_green -> "green"); @@ -345,6 +373,7 @@ let refresh krobot = lwt () = lwt () = Log.notice "connecting to the krobot bus..." in + lwt bus = Lazy.force Krobot.bus in lwt krobot = Krobot.create () in (* Put the terminal into drawing mode: *) @@ -363,6 +392,10 @@ lwt () = Lwt_main.exit_hooks in + (* Service monitoring *) + lwt () = check_services bus in + Lwt_event.always_notify_p (fun _ -> check_services bus) (OBus_bus.name_owner_changed bus)#event; + (* Minimum delay to wait between two screen redrawing *) let delay = 1.0 /. (float_of_int refresh_rate) in (* Event which refresh the screen when it occurs: *) @@ -385,6 +418,7 @@ lwt () = notify (Krobot.Card.state krobot `Interface); notify (Krobot.Card.state krobot `Sensor); notify (Krobot.Card.state krobot `Motor); + notify services; (* Redraw immedlatly the screen when [signal] changes: *) let urgent signal = Lwt_signal.always_notify_p (fun _ -> refresh krobot) signal in hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 08:13:13
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via cb562ea4bd61d42e8cd13999561155ba29a95952 (commit) from c2a2cd1daade5c0e5d52d2791998f874088988d9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cb562ea4bd61d42e8cd13999561155ba29a95952 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 09:12:30 2010 +0100 [services] ensures there is only one running instance of each service ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/_tags b/PC_Mainboard/_tags index a2972ff..2b3245a 100644 --- a/PC_Mainboard/_tags +++ b/PC_Mainboard/_tags @@ -38,8 +38,8 @@ # | Common | # +------------------------------------------------------------------+ -<common/types.{ml,mli}>: syntax_camlp4o, pkg_obus.syntax -<common/types.*>: pkg_obus +<common/{types,util}.{ml,mli}>: syntax_camlp4o, pkg_obus.syntax, pkg_lwt.syntax +<common/{types,util}.*>: pkg_obus # +------------------------------------------------------------------+ # | Driver | diff --git a/PC_Mainboard/common/util.ml b/PC_Mainboard/common/util.ml index c40e26f..705623f 100644 --- a/PC_Mainboard/common/util.ml +++ b/PC_Mainboard/common/util.ml @@ -7,6 +7,8 @@ * This file is a part of [kro]bot. *) +open Lwt + let front_collide sensors = if Array.length sensors <> 16 then invalid_arg "Until.front_collide"; let rec loop = function @@ -22,3 +24,23 @@ let back_collide sensors = | n -> (sensors.(n) && List.mem n Config.back_sensors) || loop (n + 1) in loop 0 + +let unexpected_reply name reply = + lwt () = Lwt_log.log_f ~level:Lwt_log.Fatal "unexpected reply for request_name(%S): %s" name reply in + exit 1 + +let single_instance bus name = + Lwt_event.always_notify_p + (fun name -> + lwt () = Lwt_log.log ~level:Lwt_log.Notice "service restarted, exiting" in + exit 0) + (React.E.filter ((=) name) (OBus_bus.name_lost bus)#event); + OBus_bus.request_name bus ~allow_replacement:true ~replace_existing:true name >>= function + | `Primary_owner -> + return () + | `In_queue -> + unexpected_reply name "in-queue" + | `Exists -> + unexpected_reply name "exists" + | `Already_owner -> + unexpected_reply name "already-owner" diff --git a/PC_Mainboard/common/util.mli b/PC_Mainboard/common/util.mli index f652bb8..36ad923 100644 --- a/PC_Mainboard/common/util.mli +++ b/PC_Mainboard/common/util.mli @@ -16,3 +16,9 @@ val front_collide : bool array -> bool val back_collide : bool array -> bool (** [front_collide sensors] returns whether on of the back sensors is activated *) + +val single_instance : OBus_bus.t -> OBus_name.bus -> unit Lwt.t + (** [single_instance bus name] requests the bus name [name], and + exit the program when this name is lost. This permit to easily + restart the service and ensures that there is only one running + instance. *) diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index effb1d6..882f6ea 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -503,7 +503,7 @@ struct | Some card -> Krobot_card.close card - OL_method Krobot_cardStates : OBus_connection.t -> Types.card_state * Types.card_state * Types.card_state = fun () connection -> + OL_method CardStates : OBus_connection.t -> Types.card_state * Types.card_state * Types.card_state = fun () connection -> let state card = match React.S.value card with | Some _ -> `Present | None -> `Absent @@ -515,10 +515,10 @@ struct OL_method Shutdown : OBus_connection.t -> unit = fun () connection -> lwt () = Log.info "exiting" in quit := true; - lwt _ = OBus_bus.release_name connection "fr.krobot" - and () = close card_interface + lwt () = close card_interface and () = close card_sensor and () = close card_motor in + lwt _ = OBus_bus.release_name connection "fr.krobot.Driver" in Lwt.wakeup done_wakener (); return () end @@ -662,8 +662,8 @@ lwt () = ~path:["fr"; "krobot"; "Manager"] ~interface:"fr.krobot.Manager" ~member:"Shutdown" - ~destination:"fr.krobot" - <:obus_func< unit >> + ~destination:"fr.krobot.Driver" + <:obus_func< unit >> with OBus_bus.Service_unknown _ -> return () in @@ -672,13 +672,7 @@ lwt () = return () else begin - (* Request the bus name for the driver: *) - lwt () = OBus_bus.request_name bus "fr.krobot" >>= function - | `Primary_owner -> - return () - | _ -> - fail (Failure "cannot obtain the name 'fr.krobot'") - in + lwt () = Util.single_instance bus "fr.krobot.Driver" in lwt () = if !foreground then diff --git a/PC_Mainboard/lib_krobot/krobot.ml b/PC_Mainboard/lib_krobot/krobot.ml index 1b21ace..b2d727c 100644 --- a/PC_Mainboard/lib_krobot/krobot.ml +++ b/PC_Mainboard/lib_krobot/krobot.ml @@ -122,7 +122,7 @@ let create ?peer () = return peer | None -> lwt bus = get_bus () in - return (OBus_peer.make bus "fr.krobot") + return (OBus_peer.make bus "fr.krobot.Driver") in lwt compass = make_dev_signal peer "Compass" "Get" "Value" <:obus_type< int >> 0 and logic_sensors = make_dev_signal peer "LogicSensors" "Get" "Value" <:obus_type< bool array >> (Array.make 16 false) diff --git a/PC_Mainboard/services/hard_stop.ml b/PC_Mainboard/services/hard_stop.ml index fbb2558..c457125 100644 --- a/PC_Mainboard/services/hard_stop.ml +++ b/PC_Mainboard/services/hard_stop.ml @@ -44,6 +44,10 @@ let handle_collide krobot sensors = lwt () = Arg.parse args ignore usage; + lwt bus = Lazy.force Krobot.bus in + (* Ensure there is only one running instance of the service: *) + lwt () = Util.single_instance bus "fr.krobot.HardStop" in + lwt () = if !foreground then Log.info "starting krobot hard stopper in foreground mode" hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-24 07:46:34
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via c2a2cd1daade5c0e5d52d2791998f874088988d9 (commit) from a56ae2921c0bad51ebc5c2cd11f1d9ba336c67d5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c2a2cd1daade5c0e5d52d2791998f874088988d9 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 08:42:56 2010 +0100 [hard_stop] never abort the program on uncaught exception ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/services/hard_stop.ml b/PC_Mainboard/services/hard_stop.ml index a07d177..fbb2558 100644 --- a/PC_Mainboard/services/hard_stop.ml +++ b/PC_Mainboard/services/hard_stop.ml @@ -25,32 +25,34 @@ let usage = Printf.sprintf "Usage: %s [-n]\n\noptions are:" (Filename.basename ( type state = OK | Stopped let handle_collide krobot sensors = - join [ - (if Util.front_collide sensors then begin - lwt () = Log.notice "front collision detected, inhibit motors" in - Krobot.inhibit_forward krobot duration - end else - return ()); - (if Util.back_collide sensors then begin - lwt () = Log.notice "back collision detected, inhibit motors" in - Krobot.inhibit_backward krobot duration - end else - return ()); - ] + try_lwt + join [ + (if Util.front_collide sensors then begin + lwt () = Log.notice "front collision detected, inhibit motors" in + Krobot.inhibit_forward krobot duration + end else + return ()); + (if Util.back_collide sensors then begin + lwt () = Log.notice "back collision detected, inhibit motors" in + Krobot.inhibit_backward krobot duration + end else + return ()); + ] + with exn -> + Log.info_f "collision handling failed with: %s" (Printexc.to_string exn) lwt () = Arg.parse args ignore usage; - if !foreground then - ignore (Log.info "starting hard_stop in foreground mode") - else begin - ignore (Log.info "starting hard_stop in daemon mode"); - Lwt_log.default := Lwt_log.syslog - ~level:(min Lwt_log.Info Lwt_log.default_level) - ~facility:`Daemon - (); - Lwt_daemon.daemonize () - end; + lwt () = + if !foreground then + Log.info "starting krobot hard stopper in foreground mode" + else begin + lwt () = Log.info "starting krobot hard stopper in daemon mode" in + Lwt_daemon.daemonize (); + return () + end + in lwt krobot = Krobot.create () in hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-02-24 01:29:38
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, motor-nurbs has been updated via c72950af55e8c202c2aa7fab117b946af69b1c45 (commit) from 7c4e0b0c1c3b2896d40179d041c3164647b25a71 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c72950af55e8c202c2aa7fab117b946af69b1c45 Author: Xavier Lagorce <Xav...@cr...> Date: Wed Feb 24 01:36:55 2010 +0100 Removed last bits of the old trajectory system ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index a784761..b5f6649 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/lm629.h b/USB_Module/Motor_Controller/Firmware/lm629.h index 7ac3ea7..a538f3e 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.h +++ b/USB_Module/Motor_Controller/Firmware/lm629.h @@ -158,9 +158,6 @@ #define GOTO_CURVE_RIGHT 1 #define GOTO_CURVE_LEFT 2 -#define TRAJ_TYPE_NONE 0x00 -#define TRAJ_TYPE_BEZIER3 0x01 - /** * Initialise l'interface entre le PIC et les LM629 puis effectue un RESET des LM629. * Cette fonction n'a besoin d'e appelqu'une seule fois (avant la boucle programme principale). diff --git a/USB_Module/Motor_Controller/Firmware/motor.c b/USB_Module/Motor_Controller/Firmware/motor.c index 4d65ca1..c5aa6f9 100644 --- a/USB_Module/Motor_Controller/Firmware/motor.c +++ b/USB_Module/Motor_Controller/Firmware/motor.c @@ -11,18 +11,6 @@ volatile long Isens1[ISENS_AVR1]; volatile long Isens2[ISENS_AVR1]; -/* Variables pour le suivi de trajectoires - * ces varibales permettent au syst de suivi de trajectoire de fonctionner - * et d'anger des donn entre le code contenu dans plusieurs fichiers - * - * elles sont dnies dans lm629.c -*/ -extern volatile BOOL gIsFollowingTrajectory; -extern volatile BOOL gIsTrajectoryNew; -extern volatile long gTrajectoryTime; -extern volatile BYTE gTrajectoryType; -extern volatile float gTrajectoryData[10]; - /** * Fonction d'interruption pour les moteurs. * Cette fonction ne doit e appelque dans une interruption. @@ -101,14 +89,6 @@ void interruptCurrentMeasure(void) { default: state = 0; } - - // Initialisation de la trajectoire - if (gIsTrajectoryNew == TRUE) { - v = 0.0; - t = 0.0; - gIsTrajectoryNew = FALSE; - gIsFollowingTrajectory = TRUE; - } } /** hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 23:25:12
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via a56ae2921c0bad51ebc5c2cd11f1d9ba336c67d5 (commit) via 3192e559c2ab36e98d3b408a015a95d24f6f2cd0 (commit) via 694a02719b4b016a8c206177f9d6d70e00ddee6d (commit) via 4435faf7b86a66387821cbeecbb930e3c575ef67 (commit) via 5e643c4777ad4c8746695c8c566e06e6056e79fa (commit) via b4e019644eb1a56de3a006e2136fb99e9c9517db (commit) from fa42027035da13c7ecdd2a9eebda5f869db6bb63 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a56ae2921c0bad51ebc5c2cd11f1d9ba336c67d5 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 24 00:22:47 2010 +0100 [interface] add the get_current_speed request commit 3192e559c2ab36e98d3b408a015a95d24f6f2cd0 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 23:58:44 2010 +0100 [driver] fix inhibition for manual mode when velocity is 0 commit 694a02719b4b016a8c206177f9d6d70e00ddee6d Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 23:34:56 2010 +0100 [driver] do not stop the motors on velocity=0 commit 4435faf7b86a66387821cbeecbb930e3c575ef67 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 23:14:54 2010 +0100 [generators] fix get-firmware-build and get-board-info commit 5e643c4777ad4c8746695c8c566e06e6056e79fa Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 23:06:25 2010 +0100 [generators] typo commit b4e019644eb1a56de3a006e2136fb99e9c9517db Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 22:24:01 2010 +0100 High-level command to manipulate ax12s ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/joy_control.ml b/PC_Mainboard/clients/joy_control.ml index f0dcd05..a31a0b7 100644 --- a/PC_Mainboard/clients/joy_control.ml +++ b/PC_Mainboard/clients/joy_control.ml @@ -139,6 +139,7 @@ let try_call action f = return () let rec set_velocities krobot velocities = + lwt () = Log.info_f "set-velocities: left=%d right=%d" (fst velocities) (snd velocities) in lwt () = try_call "set-velocities" (fun () -> diff --git a/PC_Mainboard/common/types.ml b/PC_Mainboard/common/types.ml index 07199cb..3f970ca 100644 --- a/PC_Mainboard/common/types.ml +++ b/PC_Mainboard/common/types.ml @@ -61,3 +61,8 @@ type direction = [ `Forward | `Backward ] let obus_direction = OBus_type.mapping obus_int [(`Forward, 0); (`Backward, 1)] +type ax12_action = { + aa_id : int; + aa_position : int; + aa_velocity : int; +} with obus diff --git a/PC_Mainboard/common/types.mli b/PC_Mainboard/common/types.mli index ec1598d..6fa04c8 100644 --- a/PC_Mainboard/common/types.mli +++ b/PC_Mainboard/common/types.mli @@ -45,3 +45,10 @@ type ax12_stats = { ax12_cw_angle_limit : int; ax12_ccw_angle_limit : int; } with obus(sequence) + +(** Action on an AX12: *) +type ax12_action = { + aa_id : int; + aa_position : int; + aa_velocity : int; +} with obus(sequence) diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index aa0b6f4..effb1d6 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -12,6 +12,7 @@ module Log = Lwt_log.Make(struct let section = "driver" end) open OBus_pervasives +open Types open Lwt (* +-----------------------------------------------------------------+ @@ -80,6 +81,20 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) + OL_method SetAX12 : Types.ax12_action structure list -> unit = fun dev actions -> + lwt () = + Lwt_list.iter_p + (fun action -> + USB_commands.AX12.goto + dev.card + ~id:action.aa_id + ~position:action.aa_position + ~velocity:action.aa_velocity + ~mode:`Action) + actions + in + USB_commands.AX12.action dev.card ~id:0xfe + let make card path = return { obus = OBus_object.make path; @@ -369,29 +384,26 @@ struct let fake_direction_l, direction_l, velocity_l = if velocity_l < 0 then (`Backward, `Backward, -velocity_l) else (`Forward, `Forward, velocity_l) in let fake_direction_r, direction_r, velocity_r = if velocity_r < 0 then (`Forward, `Backward, -velocity_r) else (`Backward, `Forward, velocity_r) in let date = Unix.gettimeofday () in - if ((direction_l = `Forward || direction_r = `Forward) && date < dev.inhibit_forward_until) - || ((direction_l = `Backward || direction_r = `Backward) && date < dev.inhibit_backward_until) then - fail (Failure "inhibited move") + if (((direction_l = `Forward && velocity_l > 0) || (direction_r = `Forward && velocity_r > 0)) && date < dev.inhibit_forward_until) + || (((direction_l = `Backward && velocity_l > 0) || (direction_r = `Backward && velocity_r > 0)) && date < dev.inhibit_backward_until) then + fail (Failure "inhibited move") else begin - if velocity_l = 0 && velocity_r = 0 then begin - stop_motors dev `Smooth - end else begin + if velocity_l <> 0 || velocity_r <> 0 then dev.state <- Manual(Lwt_unix.sleep duration >> stop_motors dev `Smooth, { velocity = velocity_l; acceleration = acceleration_l; direction = direction_l }, { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }); - lwt () = - if acceleration_l <> settings_l.acceleration then - USB_commands.Motors.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l - else - USB_commands.Motors.traj_change_velocity dev.card `Left velocity_l fake_direction_l - and () = - if acceleration_r <> settings_r.acceleration then - USB_commands.Motors.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r - else - USB_commands.Motors.traj_change_velocity dev.card `Right velocity_r fake_direction_r - in - USB_commands.Motors.traj_start dev.card `Both - end + lwt () = + if acceleration_l <> settings_l.acceleration then + USB_commands.Motors.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l + else + USB_commands.Motors.traj_change_velocity dev.card `Left velocity_l fake_direction_l + and () = + if acceleration_r <> settings_r.acceleration then + USB_commands.Motors.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r + else + USB_commands.Motors.traj_change_velocity dev.card `Right velocity_r fake_direction_r + in + USB_commands.Motors.traj_start dev.card `Both end let set_velocities dev velocities accelerations duration = diff --git a/PC_Mainboard/generators/gen_script_commands.ml b/PC_Mainboard/generators/gen_script_commands.ml index fd82083..020bf5d 100644 --- a/PC_Mainboard/generators/gen_script_commands.ml +++ b/PC_Mainboard/generators/gen_script_commands.ml @@ -88,7 +88,7 @@ let () = printf " let __type_card name = keyword name [(\"interface\", `Interface); (\"sensor\", `Sensor); (\"motor\", `Motor)] in\n"; let card_type = typ "card" in List.iter - (print "\"unsafe\"" "Card.") + (print "\"unsafe\"; \"card\"" "Card.") (List.map (function | Request req -> Request{ req with req_args = Arg("card", card_type) :: req.req_args } diff --git a/PC_Mainboard/interface/interface.ml b/PC_Mainboard/interface/interface.ml index e00fdee..8d042dc 100644 --- a/PC_Mainboard/interface/interface.ml +++ b/PC_Mainboard/interface/interface.ml @@ -202,12 +202,14 @@ let typ name = let card = [ request ~name:"get-firmware-build" - ~code:PcInterface.get_firmware_build + ~code:PcInterface.cmd_get + ~args:[Cst(uint8, PcInterface.get_firmware_build)] ~repl:[Arg("date", string)] (); request ~name:"get-board-info" - ~code:PcInterface.get_board_info + ~code:PcInterface.cmd_get + ~args:[Cst(uint8, PcInterface.get_board_info)] ~repl:[Arg("info", string)] (); command @@ -525,5 +527,12 @@ let interfaces = [ ~args:[Cst(uint8, PcInterface.motor_disable); Arg("motor", typ "motor")] (); + request + ~name:"get-velocities" + ~code:PcInterface.cmd_get + ~args:[Cst(uint8, PcInterface.get_current_speed)] + ~repl:[Arg("right", sint32); + Arg("left", sint32)] + (); ]); ] diff --git a/PC_Mainboard/lib_krobot/krobot.ml b/PC_Mainboard/lib_krobot/krobot.ml index df76ee4..1b21ace 100644 --- a/PC_Mainboard/lib_krobot/krobot.ml +++ b/PC_Mainboard/lib_krobot/krobot.ml @@ -172,6 +172,14 @@ OP_method CalibrationStop : unit OP_method CalibrationContinue : unit (* +-----------------------------------------------------------------+ + | AX12 | + +-----------------------------------------------------------------+ *) + +include MakeDevice(struct let name = "AX12" end) + +OP_method SetAX12 : Types.ax12_action structure list -> unit + +(* +-----------------------------------------------------------------+ | Motors | +-----------------------------------------------------------------+ *) diff --git a/PC_Mainboard/lib_krobot/krobot.mli b/PC_Mainboard/lib_krobot/krobot.mli index b926f60..ea2e27a 100644 --- a/PC_Mainboard/lib_krobot/krobot.mli +++ b/PC_Mainboard/lib_krobot/krobot.mli @@ -62,6 +62,12 @@ val calibration_start : t -> int -> bool -> unit Lwt.t val calibration_continue : t -> unit Lwt.t val calibration_stop : t -> unit Lwt.t +(** {6 AX12s} *) + +val set_ax12 : t -> Types.ax12_action list -> unit Lwt.t + (** [set_ax12 krobot actions] move all given ax12 at the same + time. *) + (** {6 Motors} *) val turn : t -> angle : int -> velocity : int -> acceleration : int -> Types.move_result Lwt.t hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-02-23 22:56:43
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via fa42027035da13c7ecdd2a9eebda5f869db6bb63 (commit) from d5dd29f7cee70a51a4bbfb294b48c970927ace06 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit fa42027035da13c7ecdd2a9eebda5f869db6bb63 Author: Xavier Lagorce <Xav...@cr...> Date: Tue Feb 23 23:54:57 2010 +0100 Adding a USB command to get the current velocities of both motors. Also added the associated command in lm629.c ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/common/PcInterface.h b/PC_Mainboard/common/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/PC_Mainboard/common/PcInterface.h +++ b/PC_Mainboard/common/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/PC_Mainboard/python/dev/USB_Com_Layer/src/PcInterface.h b/PC_Mainboard/python/dev/USB_Com_Layer/src/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/PC_Mainboard/python/dev/USB_Com_Layer/src/PcInterface.h +++ b/PC_Mainboard/python/dev/USB_Com_Layer/src/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/PC_Mainboard/python/dev/User_Interface/PcInterface.h b/PC_Mainboard/python/dev/User_Interface/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/PC_Mainboard/python/dev/User_Interface/PcInterface.h +++ b/PC_Mainboard/python/dev/User_Interface/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/USB_Dev_Board/Firmware/PcInterface.h b/USB_Dev_Board/Firmware/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/USB_Dev_Board/Firmware/PcInterface.h +++ b/USB_Dev_Board/Firmware/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/USB_Module/Battery_Monitoring/Firmware/PcInterface.h b/USB_Module/Battery_Monitoring/Firmware/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/USB_Module/Battery_Monitoring/Firmware/PcInterface.h +++ b/USB_Module/Battery_Monitoring/Firmware/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 192f5e4..4037f9f 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ diff --git a/USB_Module/Motor_Controller/Firmware/PcInterface.h b/USB_Module/Motor_Controller/Firmware/PcInterface.h index 8fd98e0..e79e8fa 100644 --- a/USB_Module/Motor_Controller/Firmware/PcInterface.h +++ b/USB_Module/Motor_Controller/Firmware/PcInterface.h @@ -78,6 +78,7 @@ typedef struct _UP { #define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] #define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] #define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index 0ee0b12..9f5b7e8 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -567,6 +567,27 @@ void stop(char axis, WORD type) { } /** + * Rp la vitesse vtable des moteurs drminpar les LMs + * + * @param axis l'axe moteur correspondant au LM, peut valoir : @n + * #MOTOR_RIGHT le moteur de droite uniquement @n + * #MOTOR_LEFT le moteur de gauche uniquement @n + * (spfier les #MOTOR_BOTH est bien demment impossible) +*/ +DWORD getRealVelocity(char axis) { + WORD velData; + + if (axis == MOTOR_BOTH) + return 0; + else { + writeCommand(axis, LM_CMD_RDRV); + velData = readDataWord(axis); + + return (((long)velData) << 16); + } +} + +/** * Avance. * * @param pos position tteindre, en mm, sur 16 bits diff --git a/USB_Module/Motor_Controller/Firmware/lm629.h b/USB_Module/Motor_Controller/Firmware/lm629.h index a538f3e..8ead717 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.h +++ b/USB_Module/Motor_Controller/Firmware/lm629.h @@ -196,6 +196,9 @@ BOOL readStatusBit(char axis, BYTE type); void resetInterrupt(char axis); void initLM(char axis, WORD kp, WORD ki, WORD kd, WORD il); +// Fonctions de rptions des grandeurs actuelles +DWORD getRealVelocity(char axis); + // Fonctions de gration des trajectoires void newPosition(char axis, DWORD pos, DWORD vel, DWORD acc); void newVelocity(char axis, DWORD vel, DWORD acc, char dir); diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index 1ce9713..3d60360 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -775,6 +775,18 @@ void ProcessIO(void) { ToSendDataBuffer.DATA[7] = dword.byte.LB; break; + case GET_CURRENT_SPEED: + dword.Val = getRealVelocity(MOTOR_RIGHT); + ToSendDataBuffer.DATA[0] = dword.byte.MB; + ToSendDataBuffer.DATA[1] = dword.byte.UB; + ToSendDataBuffer.DATA[2] = dword.byte.HB; + ToSendDataBuffer.DATA[3] = dword.byte.LB; + dword.Val = getRealVelocity(MOTOR_LEFT); + ToSendDataBuffer.DATA[4] = dword.byte.MB; + ToSendDataBuffer.DATA[5] = dword.byte.UB; + ToSendDataBuffer.DATA[6] = dword.byte.HB; + ToSendDataBuffer.DATA[7] = dword.byte.LB; + default: ToSendDataBuffer.ERR = ERR_UNKNOWN_GET; } diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof index 591696c..24be1b3 100644 Binary files a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof and b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.cof differ diff --git a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex index 278bba0..b66e9b5 100644 --- a/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex +++ b/USB_Module/Motor_Controller/Firmware/output/Motor_controller.hex @@ -1,1565 +1,1579 @@ :020000040000FA -:060000005EEF33F0120078 +:06000000CEEF33F0120008 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:060800005EEF33F0120070 +:06080000CEEF33F0120000 :060808002EEF04F01200C7 :0608180096EF04F012004F -:06082A0004004F6700000E -:100830002601000021000000476700005F01000062 -:100840000800000039670000470100000E000000AA -:0C085000366700006A0100000300000091 +:06082A0004002F6800002D +:100830002601000021000000276800005F01000081 +:100840000800000019680000470100000E000000C9 +:0C085000166800006A01000003000000B0 :04085C00DACFE4FF0C :10086000E2CFDAFFE9CFE4FFEACFE4FFF6CFE4FF1F :10087000F7CFE4FFF5CFE4FFF3CFE4FFF4CFE4FFDD :10088000FACFE4FF00EE29F0140EE80403E3EECF04 :10089000E4FFFBD700EE00F0290EE80403E3EECFFF -:1008A000E4FFFBD75EEC13F09EA013D068EC13F0CE +:1008A000E4FFFBD79AEC13F09EA013D0A4EC13F056 :1008B00001014D2B000E4E23E80E4D5D030E4E59E7 -:1008C00005E34D6B4E6B4F2B000E502308EC2CF0C4 -:1008D0009E9071EC13F002E2E16AE552E16EE5529E +:1008C00005E34D6B4E6B4F2B000E502378EC2CF054 +:1008D0009E90ADEC13F002E2E16AE552E16EE55262 :1008E000E7CFD9FFE55200EE28F0290EE80403E334 :1008F000E5CFEDFFFBD700EE3CF0140EE80403E378 :10090000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF6D :10091000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF36 :10092000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF1A :10093000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFFB -:10094000E4FFF4CFE4FF5EEC13F071EC13F002E28D +:10094000E4FFF4CFE4FF9AEC13F0ADEC13F002E215 :10095000E16AE552E16EE552E7CFD9FFE552E5CF16 :10096000F4FFE5CFF3FFE5CFDAFFE550E5CFE0FF99 -:10097000E5CFD8FF100004D8EBEC1EF060D8FCD710 -:100980000F0EC11202D8B5EF1EF081EC13F0E65243 -:1009900035EC13F00101676F070E675D10E1E66A41 -:1009A00078EC32F0E552DF6E000EDF8079EC13F068 -:1009B000E66A31EC33F0E552DF7079EC13F0D08E5B +:10097000E5CFD8FF100004D85BEC1FF060D8FCD79F +:100980000F0EC11202D825EF1FF0BDEC13F0E65296 +:1009900071EC13F00101676F070E675D10E1E66A05 +:1009A000E8EC32F0E552DF6E000EDF80B5EC13F0BC +:1009B000E66AA1EC33F0E552DF70B5EC13F0D08EAF :1009C000F28EF28CF30E8C1695160101476B486B74 :1009D000496B4A6B010E4B6FF90E921680160E0E84 -:1009E000E66E7C0EE66EE10EE66EEBEC31F0E55263 +:1009E000E66E7C0EE66EE10EE66E5BEC32F0E552F2 :1009F000E552E552CF0E9216939894943F0E9516B9 -:100A0000010EE66E86EC13F0E552838C81888284B9 -:100A1000808A838E80888294010EE66E6CEC33F0BF -:100A2000E55282849D80C50EE66EC1EC32F0E5523F -:100A300068EC13F0E552E552E7CFD9FF1200D9CFA9 +:100A0000010EE66EC2EC13F0E552838C818882847D +:100A1000808A838E80888294010EE66EDCEC33F04F +:100A2000E55282849D80C50EE66E31EC33F0E552CE +:100A3000A4EC13F0E552E552E7CFD9FF1200D9CF6D :100A4000E6FFE1CFD9FF0F0EE12601014B5102E095 -:100A50007AEC12F0200E0101005D03E36D50020BF1 -:100A600002E070EF12F0010149514A1102E1000E5B +:100A5000B6EC12F0200E0101005D03E36D50020BB5 +:100A600002E0ACEF12F0010149514A1102E1000E1F :100A700008D049C1E9FF4AC1EAFFEF50800B01E00D :100A8000010E000947E101014651EA6A260FE96EAD :100A9000010EEA22EF5000083DE20501406B010122 :100AA0004C514C2B0501416F0501040E426F0101B1 :100AB0004651EA6A260FE96E010EEA22EFCF43F5AE :100AC000400EE66E400EE66E050EE66E010EE66E18 -:100AD000010EE66E06EC23F0006E050EE15E00509E +:100AD000010EE66E76EC23F0006E050EE15E00502E :100AE000F3CF49F1F4CF4AF101014651EA6A260FEA :100AF000E96E010EEA22EF6A01014651000803E2A5 :100B00000101460707D001014551000803E2010138 :100B10001F0E466F010149514A1102E1000E08D033 :100B200049C1E9FF4AC1EAFFEF50800B01E0010E25 -:100B300000092CE10101520529E1E4EC1AF0000959 +:100B300000092CE10101520529E152EC1BF00009EA :100B400025E00501406B01014C514C2B0501416F23 :100B500005010A0E426F0501436B0501010E486F46 :100B6000400EE66E400EE66E050EE66E010EE66E77 -:100B7000010EE66E06EC23F0006E050EE15E0050FD +:100B7000010EE66E76EC23F0006E050EE15E00508D :100B8000F3CF49F1F4CF4AF10101526B000E01019C :100B9000E76E5119E8AE02D0513503D0E750D88046 :100BA000515501E38ED001015151FF0A29E0FD0AA0 -:100BB00013E0030A01E06ED0020EE66E54EC2DF055 -:100BC000E552ADEC16F0000904E00101020E516F90 +:100BB00013E0030A01E06ED0020EE66EC4EC2DF0E5 +:100BC000E552E9EC16F0000904E00101020E516F54 :100BD00002D00101516960D0200EE66E030EE66E70 -:100BE000C80EE66EE66AE80EE66E030EE66E06ECEA +:100BE000C80EE66EE66AE80EE66E030EE66E75EC7B :100BF00018F0006E060EE15E00500101516B4CD002 :100C0000010149514A1102E1000E08D049C1E9FF32 :100C10004AC1EAFFEF50800B01E0010E000939E103 :100C20000501406B01014C514C2B0501416F050141 -:100C3000050E426F0501436B0501486BB70E006E50 -:100C4000630E016E026A00C0E6FF01C0E6FF02C04B -:100C5000E6FF480EE66E050EE66E3CEC32F0036EE3 +:100C3000050E426F0501436B0501486B970E006E70 +:100C4000640E016E026A00C0E6FF01C0E6FF02C04A +:100C5000E6FF480EE66E050EE66EACEC32F0036E73 :100C6000050EE15E0350400EE66E400EE66E050E88 -:100C7000E66E010EE66E010EE66E06EC23F0006EE7 +:100C7000E66E010EE66E010EE66E76EC23F0006E77 :100C8000050EE15E0050F3CF49F1F4CF4AF10101C6 -:100C9000516B02D00101516B020EE66EE66A48EC20 +:100C9000516B02D00101516B020EE66EE66A84ECE4 :100CA00016F0E552E55200090AE1020EE66E010E69 -:100CB000E66E48EC16F0E552E552000902E001014B +:100CB000E66E84EC16F0E552E552000902E001010F :100CC000516901014751481102E1000E08D047C1A6 :100CD000E9FF48C1EAFFEF50800B01E0010E000977 -:100CE00002E070EF12F005010251070A02E1D1EFB4 -:100CF00011F00D0A01E10CD2010A01E1DCD10D0A6B -:100D000001E174D1040A1AE0030A07E0010A02E0D3 -:100D10002FEF12F0FF0070EF12F0E66A78EC32F07D -:100D2000E552DF6E000EDB80DFCFE6FFE66A58ECAF -:100D300032F0E552E552FF0070EF12F00101495127 +:100CE00002E0ACEF12F005010251070A02E10DEF3C +:100CF00012F00D0A01E148D2010A01E118D20D0AF1 +:100D000001E1B0D1040A1AE0030A07E0010A02E097 +:100D10006BEF12F0FF00ACEF12F0E66AE8EC32F095 +:100D2000E552DF6E000EDB80DFCFE6FFE66AC8EC3F +:100D300032F0E552E552FF00ACEF12F001014951EB :100D40004A1102E1000E08D049C1E9FF4AC1EAFF99 -:100D5000EF50800B01E0010E000901E045D100C514 +:100D5000EF50800B01E0010E000901E081D100C5D8 :100D600040F50501416B0501030E426F0501436B20 -:100D700005010851070A01E1BBD0010A01E17ED05B -:100D8000020A71E0070A64E0010A20E0030A06E0B3 -:100D9000010A01E0FFD067C148F5FFD00501486BAB -:100DA000930E006E630E016E026A00C0E6FF01C082 -:100DB000E6FF02C0E6FF480EE66E050EE66E3CEC6E -:100DC00032F0036E050EE15E0350E7D00501486B7B -:100DD000870E006E630E016E026A00C0E6FF01C05E -:100DE000E6FF02C0E6FF480EE66E050EE66E3CEC3E -:100DF00032F0036E050EE15E0350850E006E630E49 -:100E0000016E026A00C0E6FF01C0E6FF02C0E6FF15 -:100E1000480EE66E050EE66E3CEC32F0036E050EF3 -:100E2000E15E03507C0E006E630E016E026A00C02C -:100E3000E6FF01C0E6FF02C0E6FF480EE66E050EC3 -:100E4000E66E3CEC32F0036E050EE15E0350A5D079 -:100E500092CF48F593CF49F594CF4AF595CF4BF50E -:100E600096CF4CF59AD080CF48F581CF49F582CF07 -:100E70004AF583CF4BF584CF4CF58FD0E66AAEECC4 -:100E80002CF0E552010E2DC0DBFF020E2EC0DBFF61 -:100E9000030E2FC0DBFF040E30C0DBFF040EDBCFE0 -:100EA00048F5030EDBCF49F5020EDBCF4AF5010E04 -:100EB000DBCF4BF5010EE66EAEEC2CF0E552010EE9 -:100EC0002DC0DBFF020E2EC0DBFF030E2FC0DBFFA9 -:100ED000040E30C0DBFF040EDBCF4CF5030EDBCF7E -:100EE0004DF5020EDBCF4EF5010EDBCF4FF555D0A1 -:100EF0000A0EE66EE66AD6EC13F0E552E552E66AB3 -:100F00003AEC15F0E552030EF3CFDBFF040EF4CFFD -:100F1000DBFFE66A3AEC15F0E552DE52F3CFDEFF76 -:100F2000F4CFDDFFDD52040EDBCF48F5030EDBCF3F -:100F300049F5020EDBCF4AF5010EDBCF4BF50A0E69 -:100F4000E66E010EE66ED6EC13F0E552E552010EA8 -:100F5000E66E3AEC15F0E552030EF3CFDBFF040E1C -:100F6000F4CFDBFF010EE66E3AEC15F0E552DE52EF -:100F7000F3CFDEFFF4CFDDFFDD52040EDBCF4CF507 -:100F8000030EDBCF4DF5020EDBCF4EF5010EDBCFAE -:100F90004FF503D00501020E436F400EE66E400E82 -:100FA000E66E050EE66E010EE66E010EE66E06ECCE -:100FB00023F0006E050EE15E0050F3CF49F1F4CF4F -:100FC0004AF1400EE66E000EE66E050EE66EE66A2B -:100FD000010EE66E06EC23F0006E050EE15E005099 -:100FE000F3CF47F1F4CF48F170EF12F0050108514B -:100FF000030A37E0010A25E0030A13E0010A01E0D1 -:1010000040D005010951921205010A5193120501C0 -:101010000B51941205010C51951205010D519612B8 -:1010200035D00501091D921605010A1D931605010B -:101030000B1D941605010C1D951605010D1D961628 -:1010400025D00501091D891605010A1D8A1605010D -:101050000B1D8B1605010C1D8C1605010D1D8D1623 -:1010600015D005010951891205010A518A1205019D -:101070000B518B1205010C518C1205010D518D1273 -:1010800005D0030EE66EFEEC32F0E552400EE66E41 -:10109000000EE66E050EE66EE66A010EE66E06ECE2 -:1010A00023F0006E050EE15E0050F3CF47F1F4CF60 -:1010B00048F170EF12F005010851020A09E0030A35 -:1010C00001E00CD009C5E6FF54EC2DF0E5520BD041 -:1010D00009C5E6FF64EC2DF0E55205D0010EE66E81 -:1010E000FEEC32F0E552400EE66E000EE66E050EA6 -:1010F000E66EE66A010EE66E06EC23F0006E050E63 -:10110000E15E0050F3CF47F1F4CF48F170EF12F0F9 -:1011100005010851060A02E190EF11F0080A02E108 -:1011200056EF11F0030A02E14DEF11F0070A02E158 -:1011300033EF10F0030A02E129EF0EF0010A01E19A -:10114000D8D20F0A01E1C0D2020A01E174D2010A29 -:1011500001E142D2070A01E110D2010A01E1DED128 -:10116000030A01E1ACD1010A01E1A5D10C0A01E1B8 -:1011700026D1030A01E194D0040A02E0B8EF11F08D -:101180000501095104E0020E0501095D40E10AC5AF -:10119000E6FF010EE66E58EC32F0E552E5520BC563 -:1011A000E6FF020EE66E58EC32F0E552E5520CC551 -:1011B000E6FF030EE66E58EC32F0E552E5520DC53F -:1011C000E6FF040EE66E58EC32F0E552E5520EC52D -:1011D000E6FF050EE66E58EC32F0E552E5520FC51B -:1011E000E6FF060EE66E58EC32F0E552E55210C509 -:1011F000E6FF070EE66E58EC32F0E552E55211C5F7 -:10120000E6FF080EE66E58EC32F0E552E5520501B5 -:10121000090504E0020E0501095D40E10AC5E6FF8B -:10122000090EE66E58EC32F0E552E5520BC5E6FFCA -:101230000A0EE66E58EC32F0E552E5520CC5E6FFB8 -:101240000B0EE66E58EC32F0E552E5520DC5E6FFA6 -:101250000C0EE66E58EC32F0E552E5520EC5E6FF94 -:101260000D0EE66E58EC32F0E552E5520FC5E6FF82 -:101270000E0EE66E58EC32F0E552E55210C5E6FF70 -:101280000F0EE66E58EC32F0E552E55211C5E6FF5E -:10129000100EE66E58EC32F0E552E552BDEF11F05B -:1012A00000C540F50501416B0501030E426F0501C4 -:1012B000436B010EE66E78EC32F0E5520501486FA3 -:1012C000020EE66E78EC32F0E5520501496F030E2E -:1012D000E66E78EC32F0E55205014A6F040EE66ED8 -:1012E00078EC32F0E55205014B6F050EE66E78ECB6 -:1012F00032F0E55205014C6F060EE66E78EC32F0E6 -:10130000E55205014D6F070EE66E78EC32F0E552BE -:1013100005014E6F080EE66E78EC32F0E5520501DD -:101320004F6F090EE66E78EC32F0E5520501506F12 -:101330000A0EE66E78EC32F0E5520501516F0B0EA5 -:10134000E66E78EC32F0E5520501526F0C0EE66E57 -:1013500078EC32F0E5520501536F0D0EE66E78EC35 -:1013600032F0E5520501546F0E0EE66E78EC32F065 -:10137000E5520501556F0F0EE66E78EC32F0E5523E -:101380000501566F100EE66E78EC32F0E55205015D -:10139000576F400EE66E400EE66E050EE66E010ECD -:1013A000E66E010EE66E06EC23F0006E050EE15EC1 -:1013B0000050F3CF49F1F4CF4AF1BDEF11F0030E25 -:1013C000E66E010EE66E58EC32F0E552E552E80E9C -:1013D000E66E020EE66E58EC32F0E552E552E66A31 -:1013E000030EE66E58EC32F0E552E552010EE66E61 -:1013F000040EE66E58EC32F0E552E552E66A050E50 -:10140000E66E58EC32F0E552E552E66A060EE66EFC -:1014100058EC32F0E552E552270EE66E070EE66E06 -:1014200058EC32F0E552E552100EE66E080EE66E0C -:1014300058EC32F0E552E552030EE66E090EE66E08 -:1014400058EC32F0E552E552E80EE66E0A0EE66E12 -:1014500058EC32F0E552E552E66A0B0EE66E58ECB7 -:1014600032F0E552E552010EE66E0C0EE66E58ECD7 -:1014700032F0E552E552E66A0D0EE66E58EC32F0B7 -:10148000E552E552E66A0E0EE66E58EC32F0E55291 -:10149000E552270EE66E0F0EE66E58EC32F0E5527E -:1014A000E552100EE66E100EE66E58EC32F0E55284 -:1014B000E552BDEF11F0ADEC16F0BDEF11F0060EE8 -:1014C00009C5DBFF050E0AC5DBFF080E0BC5DBFFF8 -:1014D000070E0CC5DBFF0A0E0DC5DBFF090E0EC59E -:1014E000DBFF090EDBCFE6FF0A0EDBCFE6FF070EC0 -:1014F000DBCFE6FF080EDBCFE6FF050EDBCFE6FF16 -:10150000060EDBCFE6FF06EC18F0006E060EE15E7D -:1015100000500101010E526FBDEF11F0060E09C51A -:10152000DBFF050E0AC5DBFF080E0BC5DBFF070E50 -:101530000CC5DBFF0A0E0DC5DBFF090E0EC5DBFF78 -:10154000090EDBCFE6FF0A0EDBCFE6FF070EDBCF8F -:10155000E6FF080EDBCFE6FF050EDBCFE6FF060E4B -:10156000DBCFE6FF11EC18F0006E060EE15E0050D6 -:101570000101010E526FBDEF11F0060E09C5DBFF30 -:10158000050E0AC5DBFF080E0BC5DBFF070E0CC5F9 -:10159000DBFF0A0E0DC5DBFF090E0EC5DBFF090ED2 -:1015A000DBCFE6FF0A0EDBCFE6FF070EDBCFE6FF61 -:1015B000080EDBCFE6FF050EDBCFE6FF060EDBCF26 -:1015C000E6FF1EEC18F0006E060EE15E0050010111 -:1015D000010E526FBDEF11F0060E09C5DBFF050EBF -:1015E0000AC5DBFF080E0BC5DBFF070E0CC5DBFFD2 -:1015F0000A0E0DC5DBFF090E0EC5DBFF090EDBCFA2 -:10160000E6FF0A0EDBCFE6FF070EDBCFE6FF080E94 -:10161000DBCFE6FF050EDBCFE6FF060EDBCFE6FFF6 -:101620002AEC18F0006E060EE15E00500101010E7A -:10163000526FBDEF11F0060E09C5DBFF050E0AC59E -:10164000DBFF080E0BC5DBFF070E0CC5DBFF0A0E28 -:101650000DC5DBFF090E0EC5DBFF0C0E0FC5DBFF52 -:101660000B0E10C5DBFF0E0E12C5DBFF0D0E13C5F2 -:10167000DBFF0D0EDBCFE6FF0E0EDBCFE6FF11C565 -:10168000E6FF0B0EDBCFE6FF0C0EDBCFE6FF090E0D -:10169000DBCFE6FF0A0EDBCFE6FF070EDBCFE6FF70 -:1016A000080EDBCFE6FF050EDBCFE6FF060EDBCF35 -:1016B000E6FF36EC18F0006E0B0EE15E0050010103 -:1016C000010E526FBDEF11F0060E0AC5DBFF050ECD -:1016D0000BC5DBFF050EDBCFE6FF060EDBCFE6FF1B -:1016E00009C5E6FFFCEC17F0E552E552E552BDEF07 -:1016F00011F0060E0AC5DBFF050E0BC5DBFF080E59 -:101700000CC5DBFF070E0DC5DBFF0A0E0EC5DBFFA8 -:10171000090E0FC5DBFF020E0501095D01E0B8D11E -:10172000090EDBCF2FF00A0EDBCF30F05BEC24F09C -:101730002EC008F02FC009F030C00AF031C00BF005 -:10174000A60E336E280E346E940E356E3F0E366E36 -:1017500008C02EF009C02FF00AC030F00BC031F0E5 -:1017600075EC25F02EC004F02FC005F030C006F057 -:1017700031C007F0CC0E336EBC0E346E8C0E356E5D -:101780003B0E366E04C02EF005C02FF006C030F0C0 -:1017900007C031F075EC25F011EC26F02DC000F0FB -:1017A0002EC001F02FC002F030C003F000C0E6FFF1 -:1017B00001C0E6FF02C0E6FF03C0E6FF070EDBCF75 -:1017C0002FF0080EDBCF30F05BEC24F02EC014F0CD -:1017D0002FC015F030C016F031C017F0A60E336ED2 -:1017E000280E346E940E356E3F0E366E14C02EF0F9 -:1017F00015C02FF016C030F017C031F075EC25F091 -:101800002EC010F02FC011F030C012F031C013F014 -:10181000BD0E336E370E346E860E356E410E366E4B -:1018200010C02EF011C02FF012C030F013C031F0F4 -:1018300075EC25F011EC26F02DC00CF02EC00DF04B -:101840002FC00EF030C00FF00CC0E6FF0DC0E6FF59 -:101850000EC0E6FF0FC0E6FF050EDBCF2FF0060E31 -:10186000DBCF30F05BEC24F02EC01CF02FC01DF05D -:1018700030C01EF031C01FF0A60E336E280E346E3D -:10188000940E356E3F0E366E1CC02EF01DC02FF02C -:101890001EC030F01FC031F075EC25F011EC26F0C1 -:1018A0002DC018F02EC019F02FC01AF030C01BF058 -:1018B000000E186C191E19221A1E1A221B1E1B223A -:1018C00018C0E6FF19C0E6FF1AC0E6FF1BC0E6FF1E -:1018D000E66A2FEC17F0206E0D0EE15E2050090E27 -:1018E000DBCF2FF00A0EDBCF30F05BEC24F02EC004 -:1018F00008F02FC009F030C00AF031C00BF0A60E7E -:10190000336E280E346E940E356E3F0E366E08C060 -:101910002EF009C02FF00AC030F00BC031F075EC8A -:1019200025F02EC004F02FC005F030C006F031C005 -:1019300007F0CC0E336EBC0E346E8C0E356E3B0E43 -:10194000366E04C02EF005C02FF006C030F007C080 -:1019500031F075EC25F011EC26F02DC000F02EC012 -:1019600001F02FC002F030C003F000C0E6FF01C05C -:10197000E6FF02C0E6FF03C0E6FF070EDBCF2FF055 -:10198000080EDBCF30F05BEC24F02EC014F02FC03B -:1019900015F030C016F031C017F0A60E336E280EC9 -:1019A000346E940E356E3F0E366E14C02EF015C098 -:1019B0002FF016C030F017C031F075EC25F02EC0B6 -:1019C00010F02FC011F030C012F031C013F0BD0E76 -:1019D000336E370E346E860E356E410E366E10C085 -:1019E0002EF011C02FF012C030F013C031F075ECA2 -:1019F00025F011EC26F02DC00CF02EC00DF02FC0FC -:101A00000EF030C00FF00CC0E6FF0DC0E6FF0EC0B8 -:101A1000E6FF0FC0E6FF050EDBCF2FF0060EDBCF93 -:101A200030F05BEC24F02EC01CF02FC01DF030C055 -:101A30001EF031C01FF0A60E336E280E346E940EC9 -:101A4000356E3F0E366E1CC02EF01DC02FF01EC02E -:101A500030F01FC031F075EC25F011EC26F02DC0F0 -:101A600018F02EC019F02FC01AF030C01BF018C0AB -:101A7000E6FF19C0E6FF1AC0E6FF1BC0E6FF010E35 -:101A8000E66E2FEC17F0206E0D0EE15E2050E0D0D8 -:101A9000090EDBCF2FF00A0EDBCF30F05BEC24F029 -:101AA0002EC008F02FC009F030C00AF031C00BF092 -:101AB000A60E336E280E346E940E356E3F0E366EC3 -:101AC00008C02EF009C02FF00AC030F00BC031F072 -:101AD00075EC25F02EC004F02FC005F030C006F0E4 -:101AE00031C007F0CC0E336EBC0E346E8C0E356EEA -:101AF0003B0E366E04C02EF005C02FF006C030F04D -:101B000007C031F075EC25F011EC26F02DC000F087 -:101B10002EC001F02FC002F030C003F000C0E6FF7D -:101B200001C0E6FF02C0E6FF03C0E6FF070EDBCF01 -:101B30002FF0080EDBCF30F05BEC24F02EC014F059 -:101B40002FC015F030C016F031C017F0A60E336E5E -:101B5000280E346E940E356E3F0E366E14C02EF085 -:101B600015C02FF016C030F017C031F075EC25F01D -:101B70002EC010F02FC011F030C012F031C013F0A1 -:101B8000BD0E336E370E346E860E356E410E366ED8 -:101B900010C02EF011C02FF012C030F013C031F081 -:101BA00075EC25F011EC26F02DC00CF02EC00DF0D8 -:101BB0002FC00EF030C00FF00CC0E6FF0DC0E6FFE6 -:101BC0000EC0E6FF0FC0E6FF050EDBCF2FF0060EBE -:101BD000DBCF30F05BEC24F02EC01CF02FC01DF0EA -:101BE00030C01EF031C01FF0A60E336E280E346ECA -:101BF000940E356E3F0E366E1CC02EF01DC02FF0B9 -:101C00001EC030F01FC031F075EC25F011EC26F04D -:101C10002DC018F02EC019F02FC01AF030C01BF0E4 -:101C2000000E186C191E19221A1E1A221B1E1B22C6 -:101C300018C0E6FF19C0E6FF1AC0E6FF1BC0E6FFAA -:101C400009C5E6FF2FEC17F0206E0D0EE15E205067 -:101C500094D3060E0AC5DBFF050E0BC5DBFF080E8D -:101C60000CC5DBFF070E0DC5DBFF020E0501095D8C -:101C700001E04FD1FF0E05010E03F350E66E070E93 -:101C8000DBCF2FF0080EDBCF30F05BEC24F02EC062 -:101C900008F02FC009F030C00AF031C00BF0A60EDA -:101CA000336E280E346E940E356E3F0E366E08C0BD -:101CB0002EF009C02FF00AC030F00BC031F075ECE7 -:101CC00025F02EC004F02FC005F030C006F031C062 -:101CD00007F0CC0E336EBC0E346E8C0E356E3B0EA0 -:101CE000366E04C02EF005C02FF006C030F007C0DD -:101CF00031F075EC25F011EC26F02DC000F02EC06F -:101D000001F02FC002F030C003F000C0E6FF01C0B8 -:101D1000E6FF02C0E6FF03C0E6FF050EDBCF2FF0B3 -:101D2000060EDBCF30F05BEC24F02EC014F02FC099 -:101D300015F030C016F031C017F0A60E336E280E25 -:101D4000346E940E356E3F0E366E14C02EF015C0F4 -:101D50002FF016C030F017C031F075EC25F02EC012 -:101D600010F02FC011F030C012F031C013F0BD0ED2 -:101D7000336E370E346E860E356E410E366E10C0E1 -:101D80002EF011C02FF012C030F013C031F075ECFE -:101D900025F011EC26F02DC00CF02EC00DF02FC058 -:101DA0000EF030C00FF00CC0E6FF0DC0E6FF0EC015 -:101DB000E6FF0FC0E6FFE66A71EC17F0186E0A0E38 -:101DC000E15E18500EC5E6FF070EDBCF2FF0080EC0 -:101DD000DBCF30F05BEC24F02EC008F02FC009F010 -:101DE00030C00AF031C00BF0A60E336E280E346EF0 -:101DF000940E356E3F0E366E08C02EF009C02FF0DF -:101E00000AC030F00BC031F075EC25F02EC004F0A4 -:101E10002FC005F030C006F031C007F0CC0E336E95 -:101E2000BC0E346E8C0E356E3B0E366E04C02EF03A -:101E300005C02FF006C030F007C031F075EC25F07A -:101E400011EC26F02DC000F02EC001F02FC002F0E2 -:101E500030C003F000C0E6FF01C0E6FF02C0E6FFAD -:101E600003C0E6FF050EDBCF2FF0060EDBCF30F010 -:101E70005BEC24F02EC014F02FC015F030C016F02B -:101E800031C017F0A60E336E280E346E940E356EE8 -:101E90003F0E366E14C02EF015C02FF016C030F075 -:101EA00017C031F075EC25F02EC010F02FC011F0E6 -:101EB00030C012F031C013F0BD0E336E370E346EE9 -:101EC000860E356E410E366E10C02EF011C02FF00A -:101ED00012C030F013C031F075EC25F011EC26F093 -:101EE0002DC00CF02EC00DF02FC00EF030C00FF042 -:101EF0000CC0E6FF0DC0E6FF0EC0E6FF0FC0E6FF18 -:101F0000010EE66E71EC17F0186E0A0EE15E1850C5 -:101F1000A9D0FF0E05010E03F350E66E070EDBCFCE -:101F20002FF0080EDBCF30F05BEC24F02EC008F071 -:101F30002FC009F030C00AF031C00BF0A60E336E8E -:101F4000280E346E940E356E3F0E366E08C02EF09D -:101F500009C02FF00AC030F00BC031F075EC25F04D -:101F60002EC004F02FC005F030C006F031C007F0DD -:101F7000CC0E336EBC0E346E8C0E356E3B0E366E50 -:101F800004C02EF005C02FF006C030F007C031F0BD -:101F900075EC25F011EC26F02DC000F02EC001F0FC -:101FA0002FC002F030C003F000C0E6FF01C0E6FF22 -:101FB00002C0E6FF03C0E6FF050EDBCF2FF0060EE2 -:101FC000DBCF30F05BEC24F02EC014F02FC015F006 -:101FD00030C016F031C017F0A60E336E280E346EE6 -:101FE000940E356E3F0E366E14C02EF015C02FF0D5 -:101FF00016C030F017C031F075EC25F02EC010F08F -:102000002FC011F030C012F031C013F0BD0E336E8E -:10201000370E346E860E356E410E366E10C02EF0C1 -:1020200011C02FF012C030F013C031F075EC25F064 -:1020300011EC26F02DC00CF02EC00DF02FC00EF0CC -:1020400030C00FF00CC0E6FF0DC0E6FF0EC0E6FF8B -:102050000FC0E6FF09C5E6FF71EC17F0186E0A0E17 -:10206000E15E18508AD1060E0AC5DBFF050E0BC5CE -:10207000DBFF020E0501095D01E0B3D0FF0E050193 -:102080000C03F350E66E050EDBCF2FF0060EDBCF10 -:1020900030F05BEC24F02EC008F02FC009F030C007 -:1020A0000AF031C00BF0A60E336E280E346E940E7B -:1020B000356E3F0E366E08C02EF009C02FF00AC0F4 -:1020C00030F00BC031F075EC25F02EC004F02FC0BD -:1020D00005F030C006F031C007F0BD0E336E370E8C -:1020E000346E860E356E410E366E04C02EF005C07D -:1020F0002FF006C030F007C031F075EC25F011EC80 -:1021000026F02DC000F02EC001F02FC002F030C02C -:1021100003F000C0E6FF01C0E6FF02C0E6FF03C017 -:10212000E6FFE66AB5EC17F00C6E060EE15E0C50A9 -:102130000CC5E6FF050EDBCF2FF0060EDBCF30F02F -:102140005BEC24F02EC008F02FC009F030C00AF07C -:1021500031C00BF0A60E336E280E346E940E356E21 -:102160003F0E366E08C02EF009C02FF00AC030F0C6 -:102170000BC031F075EC25F02EC004F02FC005F037 -:1021800030C006F031C007F0BD0E336E370E346E2E -:10219000860E356E410E366E04C02EF005C02FF04F -:1021A00006C030F007C031F075EC25F011EC26F0D8 -:1021B0002DC000F02EC001F02FC002F030C003F09F -:1021C00000C0E6FF01C0E6FF02C0E6FF03C0E6FF75 -:1021D000010EE66EB5EC17F00C6E060EE15E0C50CB -:1021E0005BD0FF0E05010C03F350E66E050EDBCF4E -:1021F0002FF0060EDBCF30F05BEC24F02EC008F0A1 -:102200002FC009F030C00AF031C00BF0A60E336EBB -:10221000280E346E940E356E3F0E366E08C02EF0CA -:1022200009C02FF00AC030F00BC031F075EC25F07A -:102230002EC004F02FC005F030C006F031C007F00A -:10224000BD0E336E370E346E860E356E410E366E11 -:1022500004C02EF005C02FF006C030F007C031F0EA -:1022600075EC25F011EC26F02DC000F02EC001F029 -:102270002FC002F030C003F000C0E6FF01C0E6FF4F -:1022800002C0E6FF03C0E6FF09C5E6FFB5EC17F0A4 -:102290000C6E060EE15E0C5070D009C5E6FFCDEC69 -:1022A00017F0E5520101010E526F67D0B3EC1AF03E -:1022B000050EF3CFDBFF060EF4CFDBFFCBEC1AF0FD -:1022C000070EF3CFDBFF080EF4CFDBFF00C540F5B0 -:1022D0000501416B0501030E426F0501436B060EBC -:1022E000DBCF48F5050EDBCF49F5080EDBCF4AF50D -:1022F000070EDBCF4BF5400EE66E400EE66E050E88 -:10230000E66E010EE66E010EE66E06EC23F0006E40 -:10231000050EE15E0050F3CF49F1F4CF4AF12DD024 -:1023200000C540F50501416B0501030E426F050133 -:10233000436BE4EC1AF0000904E00501010E486F5C -:1023400002D00501486B400EE66E400EE66E050EAB -:10235000E66E010EE66E010EE66E06EC23F0006EF0 -:10236000050EE15E0050F3CF49F1F4CF4AF105D0FC -:10237000010EE66EFEEC32F0E552400EE66E000E07 -:10238000E66E050EE66EE66A010EE66E06EC23F0DA -:10239000006E050EE15E0050F3CF47F1F4CF48F137 -:1023A0009FD0010149514A1102E1000E08D049C1F4 -:1023B000E9FF4AC1EAFFEF50800B01E0010E00097E -:1023C0004DE10101010E516F0501406B01014C51BE -:1023D0004C2B0501416F0501050E426F0501436B52 -:1023E0000501486B680E006E630E016E026A00C044 -:1023F000E6FF01C0E6FF02C0E6FF480EE66E050EEE -:10240000E66E3CEC32F0036E050EE15E0350400ECA -:10241000E66E400EE66E050EE66E010EE66E010EED -:10242000E66E06EC23F0006E050EE15E0050F3CF81 -:1024300049F1F4CF4AF1400EE66E000EE66E050E4D -:10244000E66EE66A010EE66E06EC23F0006E050EFF -:10245000E15E0050F3CF47F1F4CF48F141D00101E4 -:1024600049514A1102E1000E08D049C1E9FF4AC1B1 -:10247000EAFFEF50800B01E0010E000931E100C5D9 -:1024800040F50501416B0501030E426F0501010E88 -:10249000436F400EE66E400EE66E050EE66E010ED0 -:1024A000E66E010EE66E06EC23F0006E050EE15EB0 -:1024B0000050F3CF49F1F4CF4AF1400EE66E000E22 -:1024C000E66E050EE66EE66A010EE66E06EC23F099 -:1024D000006E050EE15E0050F3CF47F1F4CF48F1F6 -:1024E0000F0EE15C02E2E16AE552E16EE552E7CFF0 -:1024F000D9FF120001015351541104E1100E536F22 -:10250000270E546F5307000E545B6DA207D0535132 -:1025100054112EE18C748CB413D027D001010051DA -:1025200002E18C9422D0000502E18C8409D0020ED5 -:10253000005D02E18C8419D0040E005D03E18C94EF -:102540008C861200100E005D06E1010153515411FA -:102550000FE18C740AD0200E005D0AE10101535195 -:10256000541106E18C748CA402D08C9612008C86D7 -:1025700012001200120012001200A5EF30F012003B -:102580001E0EE66E010EE66ED4EC22F0E552E55228 -:10259000400EE66E000EE66E050EE66EE66A010E71 -:1025A000E66E06EC23F0006E050EE15E0050F3CF00 -:1025B00047F1F4CF48F112006D840101080E686FF5 -:1025C000070E696F6807000E695B68516911FAE1CF -:1025D0006D941200D9CFE6FFE1CFD9FFFD0EDBCF1E -:1025E0002FF0FE0EDBCF30F0010E2F1801E130503E -:1025F00033E0E8682F1802E1E86830182BE0030E9A -:102600002F1801E1305024E0040E2F1801E1305062 -:102610001DE0020E2F1801E1305016E0170E2F18A2 -:1026200001E130500FE0160E2F1801E1305008E0A4 -:10263000150E2F1801E1305001E010D0A1DF0FD0AE -:102640009EDF0DD09ADF0BD096DF09D092DF07D046 -:1026500091DF05D091DF03D0000001D000D0010E42 -:1026600000D0E552E7CFD9FF12004BD8E652D0B2E6 -:1026700002D0010E15D0D0B802D0020E11D0D0B0C9 -:1026800002D0030E0DD0D0B602D0040E09D0FCAE9D -:1026900002D0050E05D0FCAC02D0060E01D0070E0C -:1026A000DF6ED088D086D084D082D080FC9EFC9C07 -:1026B000DF50E552E552E7CFD9FF1200E65221D8AC -:1026C000020EE126F350DF6E010EF4CFDBFF1200A5 -:1026D000C00EE66EE00EE66EE2EC32F0E552E55238 -:1026E0001200DF50F36E010EDB50F46E020EE15C5F -:1026F0001200DFCFE6FFE66A58EC32F0E552E55211 -:0C2700001200D9CFE6FFE1CFD9FF120094 -:04270C001BEC1CF0B6 -:10271000FE0EDB5006E1F80E96163C0E94169598C8 -:1027200008D0FE0EDB0405E1070E9612C30E9412CC -:10273000958820EF1CF0D9CFE6FFE1CFD9FFE65214 -:10274000010EE66EE3DFE552809AFE0EDB5004E0F8 -:10275000FE0EDB5002080FE1839C81880000839EFF -:102760000000000000008450010BDF6E838E00002B -:102770000000DF04F4E0FE0EDB0404E0FE0EDB509C -:1027800002080FE1838C81980000839E0000000006 -:1027900000008450010BDF6E838E00000000DF0418 -:1027A000F4E0E552E552E7CFD9FF1200D9CFE6FFBA -:1027B000E1CFD9FFE652FD0EDB50DF6EFE0EDBCF20 -:1027C000E6FFB9DFE552E66AA1DFE552FE0EDB5017 -:1027D00003E1839C81880CD0FE0EDB0403E1838C33 -:1027E000819806D0FE0EDB50020802E1839C81989E -:1027F000809A00008098D9CFE9FFDACFEAFFEF5046 -:10280000010B02E0848001D08490D9CFE9FFDACFB8 -:10281000EAFFEF50020B02E0848201D08492D9CF0C -:10282000E9FFDACFEAFFEF50040B02E0848401D025 -:102830008494D9CFE9FFDACFEAFFEF50080B02E02A -:10284000838801D08398D9CFE9FFDACFEAFFEF5030 -:10285000100B02E0828201D08292D9CFE9FFDACF59 -:10286000EAFFEF50200B02E0828E01D0829ED9CF8A -:10287000E9FFDACFEAFFEF50400B02E0828001D09F -:102880008290D9CFE9FFDACFEAFFEF50800B02E068 -:10289000828C01D0829C0000000080880000000033 -:1028A000E552E552E7CFD9FF1200D9CFE6FFE1CFDD -:1028B000D9FF020EE126FC0EDBCFDEFFDBCFDDFF12 -:1028C000FE0EDBCFE6FF37DFE552E66A1FDFE5529B -:1028D000FE0EDB5003E1839C81880CD0FE0EDB04EE -:1028E00003E1838C819806D0FE0EDB50020802E1E2 -:1028F000839C8198808A00008098D9CFE9FFDACF45 -:10290000EAFFEE52EF50010B02E0848001D0849088 -:10291000D9CFE9FFDACFEAFFEE52EF50020B02E027 -:10292000848201D08492D9CFE9FFDACFEAFFEE5258 -:10293000EF50040B02E0848401D08494D9CFE9FFE6 -:10294000DACFEAFFEE52EF50080B02E0838801D0A5 -:102950008398D9CFE9FFDACFEAFFEE52EF50100BA0 -:1029600002E0828201D08292D9CFE9FFDACFEAFF7A -:10297000EE52EF50200B02E0828E01D0829ED9CF22 -:10298000E9FFDACFEAFFEE52EF50400B02E082801F -:1029900001D08290D9CFE9FFDACFEAFFEE52EF50B3 -:1029A000800B02E0828C01D0829C000000008088B5 -:1029B000000000008098D9CFE9FFDACFEAFFEF509E -:1029C000010B02E0848001D08490D9CFE9FFDACFF7 -:1029D000EAFFEF50020B02E0848201D08492D9CF4B -:1029E000E9FFDACFEAFFEF50040B02E0848401D064 -:1029F0008494D9CFE9FFDACFEAFFEF50080B02E069 -:102A0000838801D08398D9CFE9FFDACFEAFFEF506E -:102A1000100B02E0828201D08292D9CFE9FFDACF97 -:102A2000EAFFEF50200B02E0828E01D0829ED9CFC8 -:102A3000E9FFDACFEAFFEF50400B02E0828001D0DD -:102A40008290D9CFE9FFDACFEAFFEF50800B02E0A6 -:102A5000828C01D0829C0000000080880000000071 -:102A6000020EE15C02E2E16AE552E16EE552E7CF77 -:102A7000D9FF1200D9CFE6FFE1CFD9FF020EE12640 -:102A8000FE0EDBCFE6FF57DEE552010EE66E3EDEC0 -:102A9000E552FE0EDB5003E1839C818805D0FE0EDB -:102AA000DB0402E1838C8198808A0000839E000011 -:102AB000000000008450010B066E8450020B01E000 -:102AC000010EE824056E8450040B01E0010E040D94 -:102AD000F3CF04F08350100B01E0010E080DF3CF8B -:102AE00003F08250020B01E0010E100DF3CF02F053 -:102AF0008250800B01E0010E200DF3CF01F08250D7 -:102B0000010B400DF3CF00F08250400B01E0010EAD -:102B1000800DF35000100110021003100410051076 -:102B20000610E76E010EE7CFDBFF838E000000008A -:102B3000839E0000000000008450010B066E84504C -:102B4000020B01E0010EE824056E8450040B01E045 -:102B5000010E040DF3CF04F08350100B01E0010EC1 -:102B6000080DF3CF03F08250020B01E0010E100DAF -:102B7000F3CF02F08250800B01E0010E200DF3CF65 -:102B800001F08250010B400DF3CF00F08250400B5A -:102B900001E0010E800DF35000100110021003102F -:102BA000041005100610DF6E838EDECF00F0DDCF3F -:102BB00001F000C0F3FF01C0F4FF00D0020EE15CA1 -:102BC00002E2E16AE552E16EE552E7CFD9FF120079 -:102BD000D9CFE6FFE1CFD9FFE652DF6AFE0EDBCFA9 -:102BE000E6FFA9DDE552010EE66E90DDE552FE0E30 -:102BF000DB5003E1839C818805D0FE0EDB0402E1FB -:102C0000838C8198809A0000839E00000000000061 -:102C10008450010B066E8450020B01E0010EE82483 -:102C2000056E8450040B01E0010E040DF3CF04F097 -:102C30008350100B01E0010E080DF3CF03F082501A -:102C4000020B01E0010E100DF3CF02F08250800B59 -:102C500001E0010E200DF3CF01F08250010B400D79 -:102C6000F3CF00F08250400B01E0010E800DF350D5 -:102C70000010011002100310041005100610DF6E82 -:102C8000838EDF5000D0E552E552E7CFD9FF120026 -:102C90001BEC1CF0E652DF6A58EC1CF0DF6EFD0EF8 -:102CA000DB50DF14DF6EDF5002E0010E01D0000EBA -:102CB000E55220EF1CF01BEC1CF01D0EBDEC1BF0D0 -:102CC000000EE1EC1DF020EF1CF01BEC1CF058ECAA -:102CD0001CF084080DE058EC1CF0C40809E0E66A1A -:102CE000EFEC1DF0B0EC1CF031EC33F0E552EFD717 -:102CF0001C0EBDEC1BF00A0EE1EC1DF0B4EC1CF058 -:102D000058EC1CF0800804E058EC1CF0C008E7E127 -:102D100058EC1CF0C00802E1B4EC1CF01E0EBDEC37 -:102D20001BF00F0EE1EC1DF085EC1EF0FA0EDBCF70 -:102D3000E6FFFB0E5AEC1DF0F80EDBCFE6FFF90EB6 -:102D40005AEC1DF0F60EDBCFE6FFF70E5AEC1DF045 -:102D5000040EBDEC1BF020EF1CF01BEC1CF0080E69 -:102D6000E126010EEFEC1BF0010EE7CFDBFF020EB8 -:102D700000EC1EF0DF6E030EEFEC1BF0030EE7CF4E -:102D8000DBFF040EEFEC1BF0020EE7CFDBFF050EBE -:102D9000EFEC1BF0050EE7CFDBFF060EEFEC1BF0B0 -:102DA000040EE7CFDBFF070EEFEC1BF0070EE7CFBB -:102DB000DBFF080EEFEC1BF024EC1CF0E66AB9EC2C -:102DC0001CF0090EEFEC1BF0010EE7CFDBFF0A0E43 -:102DD00000EC1EF0DF6E0B0EEFEC1BF0030EE7CFE6 -:102DE000DBFF0C0EEFEC1BF0020EE7CFDBFF0D0E4E -:102DF000EFEC1BF0050EE7CFDBFF0E0EEFEC1BF048 -:102E0000040EE7CFDBFF0F0EEFEC1BF0070EE7CF52 -:102E1000DBFF100EEFEC1BF024EC1CF0010EE66E55 -:102E2000B9EC1CF0020EE66EE66EB0EC1CF0E66A41 -:102E30009EEC1CF007E1020EE66E010EE66E9EECC3 -:102E40001CF002E0000E01D0010E006E080EE15CE5 -:102E500002E2E16AE552E16E005020EF1CF01BEC4B -:102E60001CF00C0EF2EC1BF0D950F20FE5EC1DF04B -:102E7000080EEECFDBFF090EEECFDBFF0A0EEECF22 -:102E8000DBFF0B0EEECFDBFF1F0EBDEC1BF0A4EC47 -:102E90001CF00A0EDBCF02F00B0EC0EC1CF010E0B1 -:102EA0002B0EE1EC1DF00A0EDBCFE6FF0B0E5AEC09 -:102EB0001DF0080EDBCFE6FF090EDBCFE6FF03D0E7 -:102EC0000B0EE66EE66A54EC1EF05AEC1DF05FEC59 -:102ED0001EF00C0EE15C02E2E16AE552E16E20EFC9 -:102EE0001CF01BEC1CF00A0EF2EC1BF0080EDB6A67 -:102EF000090EDB6A1F0EBDEC1BF0F50EDBCF00F0F8 -:102F0000003407E2080EDB6A100EF36E090EF3CFF1 -:102F1000DBFF040EDBCF00F0050EDBCF01F0060E69 -:102F2000DBCF02F0070EC0EC1CF00DE0A4EC1CF0AF -:102F3000280E0012080E0112D5EC1CF054EC1EF005 -:102F4000DBCFE6FF07D0A4EC1CF0080E0012011244 -:102F5000D5EC1CF0D5DB5FEC1EF00A0EE15C02E262 -:102F6000E16AE552E16E20EF1CF01BEC1CF0F90E5B -:102F7000DBCFE6FFE66AE66AE66AE66AD950FA0F50 -:102F8000E5EC1DF066EC1EF0EFEC1DF0AADF006E24 -:102F90000A0EE15E005020EF1CF01BEC1CF0FE0E50 -:102FA000DB5004E0FE0EDB5002080DE18DEC1CF05E -:102FB000F3CF61F1F4CF62F1E66A09EC1EF0F3CFD2 -:102FC0005FF1F4CF60F1FE0EDB0404E0FE0EDB5097 -:102FD00002080EE16BEC1CF0F3CF65F1F4CF66F163 -:102FE000010EE66E09EC1EF0F3CF63F1F4CF64F14D -:102FF000010EC3DB20EF1CF01BEC1CF01F0EBDDB31 -:1030000085EC1EF0010EB9DB20EF1CF0AAEC1DF0E0 -:103010005DEC1CF0AFEC1DF09FDB3DEC1CF020EFF5 -:103020001CF0AAEC1DF098DBE66A19DFAFEC1DF08E -:1030300016EC1EF03DEC1CF020EF1CF08BEC1EF0AB -:103040008BDBE66A0CDFABEC1CF0F3EC1CF084DBF2 -:1030500080EF1DF08BEC1EF05DEC1CF0ABEC1CF077 -:10306000F3EC1CF016EC1EF080EF1DF0E4DB3C0EE0 -:10307000E1264CEC1DF023EC1EF04CEC1DF06FEC47 -:103080001EF01AEC1EF008C02EF009C02FF00AC086 -:1030900030F00BC031F075EC25F042EC1EF098ECEE -:1030A0001DF02CEC1EF04BEC1EF098EC1DF074ECB7 -:1030B0001CF01AEC1EF014C02EF015C02FF016C034 -:1030C00030F017C031F075EC25F06AEC1DF039ECEA -:1030D0001EF08CEC24F00DEC1EF0336A346A800E86 -:1030E000356E05EC1EF0380E2EC0DBFF390E2FC0FA -:1030F000DBFF3A0E30C0DBFF3B0E31C0DBFF4CEC98 -:103100001DF00DEC1EF0DDDB98EC1DF047DBD9DB8C -:10311000D4EC2DF0086E080EE15E0850080E2DC0AC -:10312000DBFF090E2EC0DBFF0A0E2FC0DBFF0B0EEC -:1031300030C0DBFFCADBF60EDB5007E0D950F40FDE -:10314000E5EC1DF0EE50ED103AE16DDB080EDBCF43 -:103150000EF0090EDBCF0FF00A0EDBCF10F00B0ED6 -:103160005DDA3FDA8BEC1DF02E6A2F6A800E306E2E -:10317000400E316E380EDBCF33F0390EDBCF34F03A -:103180003A0EDBCF35F03B0E81EC1EF0B3EC1DF0B8 -:1031900098DBA3EC1DF02DC002F02EC003F02FC071 -:1031A00004F030C005F02DC02EF0F9EC1DF09DECC0 -:1031B0001DF02CDF0A6E060EE15E0A50CDD1380EEE -:1031C000DBCF04F0390EDBCF05F03A0EDBCF06F093 -:1031D0003B0EDBCF07F00C6A0D6A0E6A400E0F6ED5 -:1031E00096DA75EC25F018EC1DF0F40EDBCF2FF01D -:1031F000F50E7ADB8DDB67EC1DF08CEC24F0140E01 -:103200002EC0DBFF150E2FC0DBFF160E30C0DBFF1C -:10321000170E33DA4CEC1DF067EC1DF075EC25F061 -:10322000180E2EC0DBFF190E2FC0DBFF1A0E30C0A8 -:10323000DBFF1B0E22DA98EC1DF02CEC1EF067EC85 -:103240001DF075EC25F01C0E2EC0DBFF1D0E2FC0EF -:10325000DBFF1E0E30C0DBFF1F0E31C0DBFF1C0E7C -:10326000DBCF00F01D0EDBCF01F01E0EDBCF02F036 -:103270001F0EDBCF03F08BDB5EEC1DF075EC25F051 -:10328000200E2EC0DBFF210E2FC0DBFF220E30C030 -:10329000DBFF230E31C0DBFFD950180FE96EDACF08 -:1032A000EAFF240EEECFDBFF250EEECFDBFF260E6E -:1032B000EECFDBFF270EEECFDBFFFD0EDBCF2FF0D7 -:1032C000FE0EA9EC1EF0200EDBCF33F0210EDBCF7B -:1032D00034F0220EDBCF35F0230E6DEC1DF0280EFE -:1032E0002EC0DBFF290E2FC0DBFF2A0E30C0DBFF14 -:1032F0002B0E31C0DBFF98EC1DF0A9EC1EF0240E64 -:10330000DBCF33F0250EDBCF34F0260EDBCF35F0EC -:10331000270EE3DB2C0E2EC0DBFF2D0E2FC0DBFFB4 -:103320002E0E30C0DBFF2F0E31C0DBFF2C0EDBCFAB -:1033300004F02D0EDBCF05F02E0EDBCF06F02F0EA6 -:10334000DBCF07F024DB39EC1EF075EC25F0A0DABA -:10335000300E2EC0DBFF310E2FC0DBFF320E30C02F -:10336000DBFF330E31C0DBFF280EDBCF2EF0290E42 -:10337000DBCF2FF02A0EDBCF30F02B0EDBCF31F07E -:1033800087DA340E2EC0DBFF350E2FC0DBFF360E82 -:1033900030C0DBFF370E31C0DBFFD950300F77DB99 -:1033A000D950340F74DBD4EC2DF0006E080EE15EC2 -:1033B00000500C0E2DC0DBFF0D0E2EC0DBFF0E0EDD -:1033C0002FC0DBFF0F0E30C0DBFF006A016A026A0C -:1033D000400E036EEADA02C0E6FFE66E49DB23EC3C -:1033E0001EF06FDA8FEC1EF02DC014F02EC015F019 -:1033F0002FC016F030C017F016EC1EF0D4EC2DF0F4 -:10340000186E080EE15E1850E552E7CF03F0E55262 -:10341000E7CF02F0E552E7CF01F0E552E7CF00F049 -:103420002DC004F02EC005F02FC006F030C007F00C -:10343000A3DB44DB75EC25F0100E2EC0DBFF110E74 -:103440002FC0DBFF120E30C0DBFF130E31C0DBFFDD -:10345000F60EDB5002081BE145DB8BEC24F095DB1C -:103460008CEC24F08ED94ADA060E2FC0DBFF070E53 -:1034700030C0DBFF000EDFCF2FF0010E8FD98CDBC9 -:10348000D7DA10DB040E2FC0DBFF050E4ED02E6AFC -:103490002F6A306A400E316E080EDBCF33F0090E12 -:1034A000DBCF34F00A0EDBCF35F00B0E81EC1EF0D3 -:1034B000B4DB0C0EDBCF04F00D0EDBCF05F00E0EEF -:1034C000DBCF06F00F0EDBCF07F004C033F005C0F2 -:1034D00034F006C035F007C036F08BEC24F00C0E4B -:1034E0002EC0DBFF0D0E2FC0DBFF0E0E30C0DBFF4A -:1034F0000F0E31C0DBFFF6DA8CEC24F046DB8BECF0 -:1035000024F03FD9FBD9040E2FC0DBFF050E30C0DD -:10351000DBFF020EDBCF2FF0030E40D943DB88DA4E -:10352000C1DA060E2FC0DBFF070E30C0DBFF59D813 -:103530000DD9040EDBCF2FF0050E3CDA33DB5BD860 -:10354000BCD9F9DB03D9060EDBCF2FF0070E32DA38 -:1035500023DB51D801D991D93C0EE15C02E2E16A4A -:10356000E552E16E6DD167D9040EE126D6D916DA9F -:10357000E66ADAD901015F51EE5C066E6051EE58E1 -:10358000076E6151EE58086E62510BD902E2E16A92 -:10359000E552E16E55D14FD9040EE1269CD9FED9F2 -:1035A000010EE66EC1D901016351EE5C066E6451F5 -:1035B000EE58076E6551EE58086E6651F2D802E279 -:1035C000E16AE552E16E3CD1040EE66EE66AB6D9D8 -:1035D00006E0040EE66E010EE66EB0D901E1000CC5 -:1035E000010CF2DF0009FDE01200AADB28DAA0DA04 -:1035F000E1D94CEF1DF02EC01CF02FC01DF030C0E3 -:103600001EF031C01FF02CDBA0DB2DC018F02EC047 -:1036100019F02FC01AF030C01BF01200DBCF11F0F0 -:10362000336A346A340E356E430E366E0EC02EF099 -:103630000FC02FF010C030F011C031F075EC25F044 -:103640002EC00AF02FC00BF030C00CF031C00DF0CE -:10365000DB0E336E0F0E346E490E356ED6DA83DA1A -:10366000E9DA02C02EF0C5DA8BEC24F066DAE6DC8B -:10367000126E060EE15E1250120031C0DBFF046ACA -:10368000056A800E066E3F0E076E0C6A0D6A0E6AA2 -:10369000400E0F6E04C0E6FF05C0E6FF06C0E6FF61 -:1036A00007C0E6FF0CC0E6FF0DC0E6FF0EC0E6FF58 -:1036B000E66E35DBE552E7CF0FF0E552E7CF0EF0CF -:1036C000E552E7CF0DF0E552E7CF0CF0E552E7CF3A -:1036D00007F0E552E7CF06F0E552E7CF05F0E552F7 -:1036E000E7CF04F02DC010F02EC011F02FC012F063 -:1036F00030C013F041DA5CDA75EC25F018EF1DF0FC -:103700006EDA55EC14F0E552E552E5521200F40E73 -:10371000DBCF2FF0F50EA0DADDD9D8EF1DF08ADA75 -:103720005EEF1DF0140EDBCF00F0150EDBCF01F0C5 -:10373000160EDBCF02F0170EDBCF03F0336A346ACC -:10374000DC0E356E420E366E5EEF1DF0F70EDBCFEF -:103750002FF0F80E1FEF1DF0000E186C191E192225 -:103760001A1E1A221B1E1B2218C0E6FF19C0E6FFF4 -:103770001AC0E6FF1BC0E6FF1200E66E30DAEAEF81 -:103780001DF0100EDBCF33F0110EDBCF34F0120E34 -:10379000DBCF35F0130EB5DAE2EF25F05DDA42EF5C -:1037A0001EF0EE58096E06C02DF007C02EF008C0BE -:1037B0002FF0306E72EC24F02EC002F02FC003F018 -:1037C00030C004F031C005F04BDA22EC25F0ACDA61 -:1037D0002FC0F3FF30C0F4FF040EE15C120010DADA -:1037E000E76E1200E126D9CFE9FFDACFEAFFFA0E41 -:1037F000DBCFEEFFFB0EDBCFEEFFFC0EDBCFEEFFF1 -:10380000FD0EDBCFEEFFD950F60FDFD9040EEECF61 -:10381000DBFF050EEECFDBFF060EEECFDBFF070E64 -:10382000EECFDBFF120077D9026A036AB40E046E92 -:10383000420E056E1200D9CFE6FFE1CFD9FF12008C -:10384000E552E7CFD9FF1200060EE7CFDBFFDBCF53 -:10385000E6FF070EDBCFE6FF040EDBCFE6FF050E2B -:10386000DBCFE6FF020EDBCFE6FF030EDBCFE6FF8A -:10387000DECFE6FFDDCFE6FF1200010EE66E2FEC95 -:1038800017F059DA020EE66ECDEC17F0E552120091 -:10389000140EDBCF33F0150EDBCF34F0160EDBCF7A -:1038A00035F0170EDBCF36F022EC25F00DEF1EF0D1 -:1038B00096D9E8EC15F0E5521200B8D9E66A2FEF78 -:1038C00017F04CDA31C0E6FF1200020EE66E5BEC38 -:1038D00016F0E55212000A0EE66E010EE66E7AD977 -:1038E000010EE66E09EF1EF0B7D92EC018F02FC0FA -:1038F00019F030C01AF031C01BF01200020E2FC0B8 -:10390000DBFF030E30C0DBFF1BDADBCF30F0120031 -:10391000336A346A356A05EF1EF00A0EE66EE66A0F -:1039200059D9E66A09EF1EF074D9F3CFDEFFF4CF60 -:10393000DDFFD9CFE9FFDACFEAFF120048EC16F03D -:10394000E552E55200091200080EDBCF00F0090E27 -:10395000DBCF01F01200286E0D0EE15E2850120040 -:1039600039D9020EE66E12003AD95BEC16F0E55238 -:10397000120065EC16F0006E090EE15E00501200B8 -:10398000DBCF03F000500110021003101200336A65 -:10399000346A800E356EBF0E366E1200020EF3CF03 -:1039A000DBFF030EF4CFDBFF120000C0E6FF01C017 -:1039B000E6FF120051D96FD953D975EC25F098D98B -:1039C000BD0E336E370E346E860E356E410E366E7A -:1039D000BCD92DC00CF02EC00DF02FC00EF030C0A1 -:1039E0000FF016EF1EF001DE2EC024F02FC025F0E0 -:1039F00030C026F031C027F0350E336EFA0E346E2B -:103A00000E0E356E3C0E366E75EC25F02EC020F095 -:103A10002FC021F030C022F031C023F0336A346A65 -:103A20005C0E356E430E366E75EC25F0FBEF1AF02A -:103A30000AD900D91ED922EC25F00DEF1EF00CD9C1 -:103A400002D90ED975EC25F01DD9CC0E336EBC0E03 -:103A5000346E8C0E356E3B0E366E77D92DC000F06D -:103A60002EC001F02FC002F030C003F016EF1EF0A0 -:103A7000140EDBCF0CF0150EDBCF0DF0160EDBCFE6 -:103A80000EF0170EDBCF0FF042DE8BEF24F0E96E65 -:103A9000DACFEAFF66EF1EF0FD0EDBCF2FF0FE0E51 -:103AA0002CEF1EF04DD9D8D81AD939DE75EC25F097 -:103AB000E2EF25F0DBCFE6FF80EF1BF000C02EF039 -:103AC00001C02FF002C030F003C031F01200E3D883 -:103AD0008FEF1BF00DD91AEF1EF013D9B4D81FDEEB -:103AE0008BEF24F0A0DE0C0EDBCF0EF00D0EDBCF43 -:103AF0000FF00E0EDBCF10F00F0E90DD92EF1BF0EB -:103B0000010EE66E2FEC17F026DF020EE66ECDEC0E -:103B100017F0E55295D6F70EDBCFE6FFF80EDBCFB8 -:103B2000E6FFF90EDBCFE6FFFA0EDBCFE6FF120071 -:103B3000FB0EDBCF2FF0FC0E1200F6D82FC0E6FFF5 -:103B400030C0E6FF1200E7EC29F0E552E552E552FD -:103B5000E552120070DEB9DE48DDFBEF1AF0EBD85B -:103B600044DDFBEF1AF02EC006F02FC007F030C086 -:103B700008F031C009F012002DC033F02EC034F02F -:103B80002FC035F030C036F01200FBDD2FC0DEFF55 -:103B900030C0DDFF92EF1BF0020EDBCF2FF0030EE3 -:103BA0002CEF1EF0000EDFCF2FF0010E2CEF1EF0D9 -:103BB0000CC02EF00DC02FF00EC030F00FC031F051 -:103BC0001200E66EE66A80EF1BF0E96EFF0EDA2067 -:103BD000EA6E1200D6EC13F0E552E5521200FE0E2A -:103BE000DBCFE6FF1200DECFE6FFDDCFE6FF80EFA2 -:103BF0001BF003C02FF004C030F005C031F01200FC -:103C0000E66E78EC32F0E5521200400E366E22EF8E -:103C100025F03AEC15F0E55212002EC000F02FC04E -:103C200001F030C002F031C003F012002DC0E6FFF9 -:103C3000AEEF1EF02EC033F02FC034F030C035F0A0 -:103C400031C036F012002EC008F02FC009F030C08D -:103C50000AF031C00BF01200DBCF30F05DEF24F042 -:103C6000A60E336E280E346E940E356E3F0E366EF1 -:103C7000120004C02EF005C02FF006C030F007C0BF -:103C800031F012002EC004F02FC005F030C006F055 -:103C900031C007F012002EC014F02FC015F030C054 -:103CA00016F031C017F012002BDD060EDBCFE6FF59 -:103CB000070E00DF040EDBCFE6FF050E1200020E3A -:103CC000DBCFE6FF030EF6DEF3EF1DF0EECFE6FFEF -:103CD000EECFE6FFEECFE6FFEFCFE6FF12002EC0FD -:103CE0000CF02FC00DF030C00EF031C00FF01200FC -:103CF0002EC010F02FC011F030C012F031C013F000 -:103D00001200DBCF36F075EF25F0FC0EDBCFE6FFBF -:103D1000FD0E5AEF1DF08FDDD8DDF3EF1CF0D9500A -:103D2000380FB5DEA3EF1DF0E2EC25F02FC000F058 -:103D300030C001F01200206E0D0EE15E2050120026 -:103D4000F90EDBCF2FF0FA0E120075EC25F011EF13 -:103D500026F024DDDDDD61DF38EF1DF02EC0E6FF4B -:0A3D60002FC0E6FF30C0E6FF12009E -:063D6A00ADEC23F06A6AD3 -:103D7000686AE0EC23F06D8C6E6A90EC23F06D9C29 -:103D8000DF6AC1EC23F010E2DF50040DF3CFE9FF4E -:103D9000F4CFEAFF000EE926040EEA22EE6AEE6A8C -:103DA000EE6AEE6ADF2AEDD7160E706E68A604D0B2 -:103DB000030E56EC23F0FAD70101136B186B196B45 -:103DC0001A6B6D98080E0B6F040E0C6F016B006B75 -:103DD000E5526BEF23F0ADEC23F0010100510BE154 -:103DE0006D6A696AE0EC23F06DB602D06D86FCD78F -:103DF0000101010E006F000508E16DBA06D0686A86 -:103E0000696A69806988020E006F6850040B07E0D8 -:103E10006950040B04E0020E56EC23F089D86DB211 -:103E200047D06850010B14E06950010B11E09DDF91 -:103E30000101040E006F0401200E026F040E036FD7 -:103E4000080E016F006B8C0E0013E66A1FEC24F065 -:103E50006850100B07E06950100B04E060D8040EA6 -:103E600056EC23F06850400B0BE06950400B08E023 -:103E7000E7EC23F0020E5EEC23F0060E56EC23F086 -:103E80006850200B04E06950200B01E035D86850E1 -:103E9000020B0AE06950020B07E0E7EC23F0E6684A -:103EA000E6683FEC24F06A6A040E0101005D02E25C -:103EB000A19A1FD069A61CD0DF6A040EDF5C18E24D -:103EC00068A616D06CCF20F1030E56EC23F0780EC6 -:103ED0000101201502E138D809D0000EE66EE66A2D -:103EE000200EE66E010EE66E010EE8DBDF2AE5D756 -:103EF000A19AE5526BEF23F070A00ED079EC23F07D -:103F0000EF50800808E1D5DBEF50840804E179EC3C -:103F100023F08C0EEF6E7090050E56EF23F069843F -:103F2000040EC4DB6D8299EC23F0040E5EEF23F0E7 -:103F300099EC23F0030EC2DB6D92699468A403D060 -:103F4000020EB4DBFBD71200ADEC23F0FD0E010135 -:103F500020153DE17E0E2015E8407F0B040DF3CFC8 -:103F600003F1F4CF04F1000E0327040E042303C170 -:103F700005F104C106F10575BCDBEF503C0BE842CE -:103F8000E8420D0822E1B5DB16EC24F0EECF00F09C -:103F9000EFCF01F0280E001816E1040E011813E10E -:103FA00050EC24F0DF6AEDDB0EE2DF50C9EC23F0C9 -:103FB000DF50EA6A200FE96E040EEA22E552E7506C -:103FC000EF6EDF2AF0D70AD807D01AD805D0FD0E39 -:103FD0002015040801E122D8E5527DD36ADBEF50B9 -:103FE000800B02E066DBEF6A01010F6B106B146B54 -:103FF000156B136B64D89DDB170E60DB94EF21F01B -:10400000020E0101105D02E121EF22F034D801011E -:10401000215102E11BEF24F0216B12009EDB49DBF2 -:10402000EF50400B01E0010EDF6E01010B75080E31 -:10403000005D09E122C46EFF6E50000802E2100E1E -:1040400001D0040E006F100513E154EC24F0A6D942 -:10405000020E01010F5D03E12CDB840E07D0DF505F -:1040600003E127DBC80E02D024DB880EEF6E01D0FF -:1040700002D8E55230D32BDB0101106B1ADBEF6A5B -:10408000040E0B19006E0CC101F0DE6E0CC1DDFFD9 -:1040900019DBEF6A18AF0CD01B511C1107E005D0DB -:1040A0001CC1FAFF01011B51F96EFADF0101189FD3 -:1040B000020EE15C02E2E16AE552E16E0CD304011A -:1040C0002051600BE842E842E842E842E842000939 -:1040D00001E0120021510C0A45E00B0A3FE00C0AF6 -:1040E00031E0010A22E00B0A1EE0020A1CE0030A8A -:1040F00018E0080A10E0010A0CE00F0A08E0030AC1 -:1041000001E012000101138F080E006F120014EF7E -:1041100021F07DEF22F00101010E116F010E126FEF -:104120000CD055EF21F0B3EF20F024510101116FB5 -:10413000126B020E1127010E12231381010E146F50 -:10414000138F12000101138F04012451EA6A020F38 -:10415000E96E010EEA2222C4EFFF1200EADA160E1F -:104160005EEF23F012007EDB040EE126040122053F -:1041700010E120511F0B00090CE10101138F030E08 -:104180000401215D04E10101010E1F6F02D0010154 -:104190001F6B0401225141E120511F0B02083DE138 -:1041A00024510F0B000939E00101138F040124BFD2 -:1041B00005D0A4DA070EE926010E04D09FDA0B0E13 -:1041C000E926010ED2DA030E215D03E17BDA840ECB -:1041D00023D024510F0B016A700F006E0F0E0122C5 -:1041E000020E00C0DBFF030E01C0DBFF020EDBCFBF -:1041F000E9FF030EDBCFEAFFEE90ED5224AF06D0CD -:1042000061DAEF6ADF745EDA400E06D05BDA880EA0 -:10421000EF6EDF7457DAC80EEF6E040EE15C02E257 -:10422000E16AE552E16E57D2800E0401205D3CE167 -:104230000101C00E136F04012351030A1EE0010A9D -:1042400009E0030A2FE10101180E116F620E126FCF -:10425000120E22D0C3DAC20EF626620EA2DA020EC7 -:104260000101F76A1125F66E1251F7220900F5CF08 -:1042700014F10A00F5CF15F11200030E225D0FE2D2 -:10428000ADDAC40EF626620E8CDA11C1F6FF12C149 -:10429000F7FF0800F5500101146F156B12000101C2 -:1042A000136B12000101136B120011DA0401286B69 -:1042B000296B20511F0B020A11E0030A0CE0010ACE -:1042C00022E10101138F0401288101011F051BE177 -:1042D0000401288318D00101138F15D00101138F19 -:1042E000040124BF05D00ADA070EE926010E04D026 -:1042F00005DA0B0EE926010E38DAE4D9EF50040B8B -:1043000002E0010E286F010113AF07D0280E116FD4 -:10431000040E126F1381020E146F020EE15C02E2B2 -:10432000E16AE552E16ED7D16D98010113BF08D063 -:1043300018AF02D061DA2AD07EDABBD9840E27D03A -:1043400018BF2BD0040120AF24D001011451040167 -:10435000265D010115510401275904E226C414F118 -:1043600027C415F11BD80101010E106FA1DA800ED0 -:10437000EF6E216BBED9EE52080EEF6E91DAB9D90D -:10438000840EEF6E010E216F8FDA93D9C80EEF6E97 -:104390001200010131DAC80EEF6E120098D9010146 -:1043A000080E145D000E15590DE214C1DEFF15C193 -:1043B000DDFF0F5102E1010E03D00F0506E1020EF1 -:1043C0000F6F03D0080EDE6EDD6A73D9EF9271D9DC -:1043D000EF906FD9010EDB50EF126BD9EE52DFCFA9 -:1043E000EFFF000EDB50145F010EDB50155B280E53 -:1043F0001D6F040E1E6F13B10FD0F7D91BE011C152 -:10440000F6FF12C1F7FF112B000E12230800F55022 -:1044100096D9F3E2DB06F1D7E8D90CE011C1E9FF48 -:1044200012C1EAFF112B000E1223EF5088D9F4E2DB -:10443000DB06F2D7020EE15C02E2E16AE552E16ED0 -:104440004AD145D956D9EE52EFCFDFFFDFCF00F08A -:1044500000500101195D000E1A5903E219C1DFFF76 -:1044600009D0DF50006E016AE850195D196F0150E4 -:104470001A591A6F010EDB6ADF50F36E010EDBCFA3 -:10448000F4FFF350F45C10E2010EDB5082D916C148 -:10449000E9FF17C1EAFF162B000E1723E552E7507C -:1044A000EF6E010EDB2AE8D7000ED8801955000EFA -:1044B0001A550DE2F4D854D91CD9EF50400B03E142 -:1044C000EAD9C80E02D0E7D9880EEF6E0FD0F0D926 -:1044D000840EEF6E1B511C1107E005D01CC1FAFFC2 -:1044E00001011B51F96EFADF0101189F020EE15C18 -:1044F00002E2E16AE552E16EEED00101138F10D9BC -:10450000010EE66EE66AE66A020EE66E010EAFD9AD -:1045100022C401F10401225104E10101100E006FD7 -:1045200012000101200E006F04D9150E5EEF23F07A -:10453000CED8000EDE6E040EDD6EE8D8040DF3500A -:10454000006E016A020E0F0B05E0D89001320032B6 -:10455000E806FBE1D89000360136D89000360136E7 -:10456000D9CFE9FFDACFEAFF0050EE260150ED2265 -:10457000A9D8EF9EFD0EDB5002E16AD901D06DD9BA -:10458000EA22DECFEEFFDDCFEDFF9CD8EF9C9AD87C -:10459000040EE926000EEA22EF8C020EE15C02E234 -:1045A000E16AE552E16E97D092D8FE0EDB50016AC7 -:1045B000700F006E0F0EDFD885D8FD0EDBCFEFFF3A -:1045C000DBA402D0E66AF5D8FD0EDBA203D0010E13 -:1045D000E66EEFD8020EE15C02E2E16AE552E16EBE -:1045E0007AD075D8FE0EDB5005E125D962D8840E4D -:1045F000EF6E05D08BD80CD989D8010F09D9020EDE -:10460000E15C02E2E16AE552E16E65D060D8FD0E40 -:10461000DB5002E022D901D01BD9A7D853D806D944 -:10462000FB0EDBCFEEFFFC0EDBCFEDFF4BD8EE52E7 -:10463000FA0EDBCFEFFF400E45D8E850EF16880E9C -:1046400041D8E850EF12FD0EDB5002E006D901D050 -:10465000FFD8EA22EF74DECF00F0DDCF01F000C01A -:10466000F3FF01C0F4FF020EE15C02E2E16AE552F1 -:10467000E16E31D0F7D8010EF36EFC0EDB5004E092 -:10468000D890F336E806FCE1F31C006EFD0EDBCF9C -:10469000E9FFFE0EDBCFEAFF0050EF161CD0FBD87F -:1046A000EE52080EEF6EF7D816EF24F0E66E1FEF0D -:1046B00024F00BC1E9FF0CC1EAFF1200E66EE66AC6 -:1046C0003FEF24F0DECFE9FFDDCFEAFF1200CAD8CA -:1046D000020EE1261200E552E7CFD9FF1200D6D82C -:1046E0004BEF24F0FE0EEA6ADB34FE0BEA36E96E8D -:1046F000120003C1E9FF04C1EAFF120024510F0BAD -:10470000E96EEA6AD890E936EA361200FD0EDB500F -:10471000E824026EFE0EDB50040DF350022412005A -:10472000000EE66EE66AE66A710EE66E0F0E37EF71 -:1047300024F0000EE66EE66AE66EE66A1200E66EA9 -:104740001DC1E9FF1EC1EAFF1D2B000E1E23E5520D -:10475000E750EF6EDF06010E120084D8E652120019 -:10476000280EEE6E040EED6E1200EA22EECFDEFF92 -:10477000EDCFDDFF1200012200C0DEFF01C0DDFF32 -:104780001200DF50006E016A080E005C000E015836 -:104790001200EA6A280FE96E040EEA22EF50E66E74 -:1047A0001200F7220900F5CF11F10A00F5CF12F13E -:1047B0001200FE0EDBCFE6FFBBDEE552E552120033 -:1047C000160E6F6E9F0E6B6E7B0E696E1200010EE1 -:1047D000E66EE66A000EE66EE66A12002251F66E9A -:1047E000F76AD890F636F7361200D9CFE9FFDACF5C -:1047F000EAFFEE50ED101200020E106F5ADFEE527B -:10480000EF6A57DFC80EEF6E4ADFAADF4BEF24F0E6 -:10481000040DF3CF00F0F4CF01F0000E0026040EDB -:10482000AADF840E4FDFE850EF121200020EE926D5 -:10483000000EEA2212003CD88C0EEF6E1200680EB9 -:10484000E66E0F0EE66E16DFE552E552E5521200F7 -:1048500049DF070EE926010E120044DF0B0EE926A0 -:10486000010E1200D9CFE6FFE1CFD9FF1200E66EAC -:1048700022EC32F0006E050EE15E00501200EAEC10 -:1048800012F0006E060EE15E00501200200EEE6E79 -:10489000040EED6E120005C1E9FF06C1EAFF120029 -:1048A00028DFC4DF46EF24F004DFC0DFB0EF23F0E1 -:0648B000F6DE6FEF23F0BD -:0A48B600389E08D0389E30AE05D0C1 -:1048C0002F6C301EE86A3022388E30C02AF02FC09C -:1048D00029F03C6A3B6A8E0E2B6E2C6A64EF26F040 -:1048E000389E0CD0389E30AE09D02D6C2E1E2F1E57 -:1048F000301EE86A2E222F223022388E30C02AF055 -:104900002FC029F02EC03CF02DC03BF09E0E2B6E28 -:104910002C6A64EF26F0367E386AA0EC26F0B8ECFC -:1049200026F038B648EF26F038A20AD038AA03D0CD -:1049300038BE48EF26F038A454EF26F051EF26F0A9 -:1049400038AA05D038AC54EF26F051EF26F038A045 -:104950000AD038A808D038BE04D038A402D05DEF01 -:1049600026F061EF26F03B6A2C6A3650315C3A6ED5 -:1049700010E32EC03CF02FC029F030C02AF031C027 -:1049800039F033C02EF034C02FF035C030F0383A53 -:1049900009D033C03CF034C029F035C02AF036C00D -:1049A00039F03A6C389E38BC388E39C02BF038B0AC -:1049B00090EF26F01A0E3A6090EF26F02B6A316ADB -:1049C00038A408D02E6C2F1E301E311EE86A2F220C -:1049D0003022312238AC08D03C6C291E2A1E2B1EF6 -:1049E000E86A29222A222B222D6A3A5207E0313422 -:1049F00030322F322E322D323A2EF9D72E503C261D -:104A00002F... [truncated message content] |
From: Xavier L. <Ba...@us...> - 2010-02-23 22:55:26
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, motor-nurbs has been updated via 7c4e0b0c1c3b2896d40179d041c3164647b25a71 (commit) from 2672320990d4ee6d23b80bdcabd1ed52d99118b9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7c4e0b0c1c3b2896d40179d041c3164647b25a71 Author: Xavier Lagorce <Xav...@cr...> Date: Tue Feb 23 22:32:25 2010 +0100 foo ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcp b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcp index e2142f1..5ea8141 100644 --- a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcp +++ b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcp @@ -38,17 +38,19 @@ file_010=. file_011=. file_012=. file_013=. -file_014=Common +file_014=. file_015=Common -file_016=USB Stack +file_016=Common file_017=USB Stack file_018=USB Stack file_019=USB Stack file_020=USB Stack file_021=USB Stack file_022=USB Stack -file_023=. +file_023=USB Stack file_024=. +file_025=. +file_026=. [GENERATED_FILES] file_000=no file_001=no @@ -75,6 +77,8 @@ file_021=no file_022=no file_023=no file_024=no +file_025=no +file_026=no [OTHER_FILES] file_000=no file_001=no @@ -101,6 +105,8 @@ file_021=no file_022=no file_023=no file_024=no +file_025=no +file_026=no [FILE_INFO] file_000=usb_descriptors.c file_001=main.c @@ -110,23 +116,25 @@ file_004=lm629.c file_005=usb_device.c file_006=usb_function_hid.c file_007=error.c -file_008=HardwareProfile.h -file_009=usb_config.h -file_010=eeprom.h -file_011=motor.h -file_012=lm629.h -file_013=PcInterface.h -file_014=Include\Compiler.h -file_015=Include\GenericTypeDefs.h -file_016=Include\Usb\usb.h -file_017=Include\Usb\usb_ch9.h -file_018=Include\Usb\usb_common.h -file_019=Include\Usb\usb_device.h -file_020=Include\Usb\usb_function_hid.h -file_021=Include\Usb\usb_hal.h -file_022=Include\Usb\usb_hal_pic18.h -file_023=error.h -file_024=rm18f4550.lkr +file_008=trajectory.c +file_009=HardwareProfile.h +file_010=usb_config.h +file_011=eeprom.h +file_012=motor.h +file_013=lm629.h +file_014=PcInterface.h +file_015=Include\Compiler.h +file_016=Include\GenericTypeDefs.h +file_017=Include\Usb\usb.h +file_018=Include\Usb\usb_ch9.h +file_019=Include\Usb\usb_common.h +file_020=Include\Usb\usb_device.h +file_021=Include\Usb\usb_function_hid.h +file_022=Include\Usb\usb_hal.h +file_023=Include\Usb\usb_hal_pic18.h +file_024=error.h +file_025=trajectory.h +file_026=rm18f4550.lkr [SUITE_INFO] suite_guid={5B7D72DD-9861-47BD-9F60-2BE967BF8416} suite_state= diff --git a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw index 26d348e..a784761 100644 Binary files a/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw and b/USB_Module/Motor_Controller/Firmware/Motor_Controller.mcw differ hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-02-23 21:14:30
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, motor-nurbs has been updated via 2672320990d4ee6d23b80bdcabd1ed52d99118b9 (commit) from 821b31d67ca783924aa55eba5cf94d0b3a7f6247 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2672320990d4ee6d23b80bdcabd1ed52d99118b9 Author: Xavier Lagorce <Xav...@cr...> Date: Tue Feb 23 22:13:26 2010 +0100 New architecture of the trajectory system The functions are grouped in a dedicated file The interrupt function is now a dedicated one executed in main.c ----------------------------------------------------------------------- Changes: diff --git a/USB_Module/Motor_Controller/Firmware/PcInterface.h b/USB_Module/Motor_Controller/Firmware/PcInterface.h index 530d113..8fd98e0 100644 --- a/USB_Module/Motor_Controller/Firmware/PcInterface.h +++ b/USB_Module/Motor_Controller/Firmware/PcInterface.h @@ -156,9 +156,6 @@ typedef struct _UP { #define TRAJ_NOT_COMPLETED 0x00 #define TRAJ_COMPLETED 0x01 -#define TRAJ_TYPE_NONE 0x00 -#define TRAJ_TYPE_BEZIER3 0x01 - #define TRAJ_STOP_MOTOR_OFF 256 #define TRAJ_STOP_ABRUPT 512 #define TRAJ_STOP_SMOOTH 1024 diff --git a/USB_Module/Motor_Controller/Firmware/lm629.c b/USB_Module/Motor_Controller/Firmware/lm629.c index fc76286..0ee0b12 100644 --- a/USB_Module/Motor_Controller/Firmware/lm629.c +++ b/USB_Module/Motor_Controller/Firmware/lm629.c @@ -11,26 +11,6 @@ volatile DWORD_VAL posRight = 0; volatile DWORD_VAL posLeft = 0; -/* Variables pour le suivi de trajectoires - * ces varibales permettent au syst de suivi de trajectoire de fonctionner - * et d'anger des donn entre le code contenu dans plusieurs fichiers -*/ -volatile BOOL gIsFollowingTrajectory = FALSE; -volatile BOOL gIsTrajectoryNew = FALSE; -volatile long gTrajectoryTime = 0; -volatile BYTE gTrajectoryType = TRAJ_TYPE_NONE; -/* Le tableau suivant contient les donn nssaires 'extion de la trajectoire - * Pour TRAJ_TYPE_BEZIER3 : - * - gTrajectoryData[0] : parame cx - * - gTrajectoryData[1] : parame cy - * - gTrajectoryData[2] : parame bx - * - gTrajectoryData[3] : parame by - * - gTrajectoryData[4] : parame ax - * - gTrajectoryData[5] : parame ay - * - gTrajectoryData[6] : vitesse de parcours de l'abscisse curviligne -*/ -volatile float gTrajectoryData[10]; - /** * Change la direction du BUS de donn * Cette fonction est utilisen interne et ne doit pas e appelsinon. @@ -777,19 +757,6 @@ void goTo(short x, short y, short vel, short acc, BYTE mode, short d) { } } -void goToBezier(short x0, short y0, short x1, short y1, short x2, short y2, short x3, short y3, short vel) { - gIsFollowingTrajectory = FALSE; - gTrajectoryData[0] = 3.0 * ((float)x1 - (float)x0); - gTrajectoryData[1] = 3.0 * ((float)y1 - (float)y0); - gTrajectoryData[2] = 3.0 * ((float)x2 - (float)x1) - gTrajectoryData[0]; - gTrajectoryData[3] = 3.0 * ((float)y2 - (float)y1) - gTrajectoryData[1]; - gTrajectoryData[4] = (float)x3 - (float)x0 - gTrajectoryData[2] - gTrajectoryData[0]; - gTrajectoryData[5] = (float)y3 - (float)y0 - gTrajectoryData[3] - gTrajectoryData[1]; - gTrajectoryData[6] = (float)vel; - gTrajectoryType = TRAJ_TYPE_BEZIER3; - gIsTrajectoryNew = TRUE; -} - WORD getRelPosRight() { DWORD_VAL pos; diff --git a/USB_Module/Motor_Controller/Firmware/main.c b/USB_Module/Motor_Controller/Firmware/main.c index b244776..a0637bc 100644 --- a/USB_Module/Motor_Controller/Firmware/main.c +++ b/USB_Module/Motor_Controller/Firmware/main.c @@ -90,6 +90,7 @@ #include "error.h" #include "lm629.h" #include "motor.h" +#include "trajectory.h" /* VARIABLES ******************************************************/ #pragma udata @@ -233,7 +234,8 @@ char ResetSource(void); s++; } - interruptMotor(); + interruptCurrentMeasure(); + interruptTrajectory(); // On rtorise l'interruption PIR1bits.TMR1IF = 0; diff --git a/USB_Module/Motor_Controller/Firmware/motor.c b/USB_Module/Motor_Controller/Firmware/motor.c index 25e10a6..4d65ca1 100644 --- a/USB_Module/Motor_Controller/Firmware/motor.c +++ b/USB_Module/Motor_Controller/Firmware/motor.c @@ -28,14 +28,12 @@ extern volatile float gTrajectoryData[10]; * Cette fonction ne doit e appelque dans une interruption. * Elle permet la mesure du courant dans le moteur. */ -void interruptMotor(void) { +void interruptCurrentMeasure(void) { static char state = 0; static char Isens_idx0 = 0; static char Isens_idx1 = 0; static long Isens1_0[ISENS_AVR0]; static long Isens2_0[ISENS_AVR0]; - static float vx, vy, v = 0, t = 0, theta; - static DWORD velR, velL; char i; @@ -111,37 +109,6 @@ void interruptMotor(void) { gIsTrajectoryNew = FALSE; gIsFollowingTrajectory = TRUE; } - - // Suivi de trajectoire - if (gIsFollowingTrajectory == TRUE) { - gTrajectoryTime += 1; - t = t + v*0.001*gTrajectoryData[6]; - if (t >= 1) { - stop(MOTOR_BOTH, LM_LTRJ_STOP_ABRUPT); - gIsFollowingTrajectory = FALSE; - } else { - if (gTrajectoryType == TRAJ_TYPE_BEZIER3) { - // On drmine la nouvelle vitesse - vx = 3*gTrajectoryData[4]*t*t + 2*gTrajectoryData[2]*t + gTrajectoryData[0]; - vy = 3*gTrajectoryData[5]*t*t + 2*gTrajectoryData[3]*t + gTrajectoryData[1]; - v = sqrt(vx*vx + vy*vy); - vx = vx / v; - vy = vy / v; - theta = atan2(vy, vx); - if (theta >= 0) { - velR = gTrajectoryData[6]; - velL = (gTrajectoryData[6] + (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) / (gTrajectoryData[6] - (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) * velR; - } - if (theta >= 0) { - velL = gTrajectoryData[6]; - velR = (gTrajectoryData[6] + (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) / (gTrajectoryData[6] - (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) * velL; - } - changeVelocity(MOTOR_LEFT, velL * COEF_LEFT_WHEEL * CONST_VEL, 0); - changeVelocity(MOTOR_RIGHT, velR * COEF_LEFT_WHEEL * CONST_VEL, 0); - } - // pas d'autre type de trajectoire implntour le moment - } - } } /** diff --git a/USB_Module/Motor_Controller/Firmware/motor.h b/USB_Module/Motor_Controller/Firmware/motor.h index 1e71445..a5009ea 100644 --- a/USB_Module/Motor_Controller/Firmware/motor.h +++ b/USB_Module/Motor_Controller/Firmware/motor.h @@ -9,7 +9,6 @@ #include <adc.h> #include "Compiler.h" #include "HardwareProfile.h" -#include "lm629.h" // Parames graux #define ISENS_R 0.02 ///< Valeur de la rstance de mesure du courant (en ohm) @@ -85,7 +84,7 @@ ); \ } -void interruptMotor(void); +void interruptCurrentMeasure(void); long getIsens(char axis); void enableMotor(char axis); void disableMotor(char axis); diff --git a/USB_Module/Motor_Controller/Firmware/trajectory.c b/USB_Module/Motor_Controller/Firmware/trajectory.c new file mode 100644 index 0000000..fc9770c --- /dev/null +++ b/USB_Module/Motor_Controller/Firmware/trajectory.c @@ -0,0 +1,97 @@ +/** + * @file trajectory.c + * G le syst de suivi de trajectoire. +*/ + +#ifndef TRAJECTORY_C +#define TRAJECTORY_C + +/* Variables pour le suivi de trajectoires + * ces varibales permettent au syst de suivi de trajectoire de fonctionner + * et d'anger des donn entre le code contenu dans plusieurs fichiers +*/ +volatile BOOL gIsFollowingTrajectory = FALSE; // Indique si une trajectoire est en cours de suivi +volatile BOOL gIsTrajectoryNew = FALSE; // Indique qu'il faut drrer une nouvelle trajectoire +volatile long gTrajectorySampleRate = 10; // Pode d'antillonnage de la commande de vitesse (en ms) +volatile long gTrajectoryTime = 0; // Temps ulepuis le dt du suivi de trajectoire +volatile BYTE gTrajectoryType = TRAJ_TYPE_NONE; // Type de trajectoire en cours +/* Le tableau suivant contient les donn nssaires 'extion de la trajectoire + * pour TRAJ_TYPE_LINE : + * - gTrajectoryData[0] : vitesse + * - gTrajectoryData[1] : accration + * - gTrajectoryData[2] : distance arcourir + * Pour TRAJ_TYPE_BEZIER3 : + * - gTrajectoryData[0] : parame cx + * - gTrajectoryData[1] : parame cy + * - gTrajectoryData[2] : parame bx + * - gTrajectoryData[3] : parame by + * - gTrajectoryData[4] : parame ax + * - gTrajectoryData[5] : parame ay + * - gTrajectoryData[6] : vitesse de parcours de l'abscisse curviligne +*/ +volatile float gTrajectoryData[10]; + +/** + * Fonction d'interruption pour la gestion des trajectoires. + * Cette fonction ne doit e appelque dans une interruption. + * Elle permet le suivi de trajectoire par le robot. +*/ +void interruptTrajectory(void) { + static float vx, vy, v = 0, t = 0, theta; + static DWORD velR, velL; + + + // Initialisation de la trajectoire + if (gIsTrajectoryNew == TRUE) { + v = 0.0; + t = 0.0; + gIsTrajectoryNew = FALSE; + gIsFollowingTrajectory = TRUE; + } + + // Suivi de trajectoire + if (gIsFollowingTrajectory == TRUE) { + gTrajectoryTime += 1; + t = t + v*0.001*gTrajectoryData[6]; + if (t >= 1) { + stop(MOTOR_BOTH, LM_LTRJ_STOP_ABRUPT); + gIsFollowingTrajectory = FALSE; + } else { + if (gTrajectoryType == TRAJ_TYPE_BEZIER3) { + // On drmine la nouvelle vitesse + vx = 3*gTrajectoryData[4]*t*t + 2*gTrajectoryData[2]*t + gTrajectoryData[0]; + vy = 3*gTrajectoryData[5]*t*t + 2*gTrajectoryData[3]*t + gTrajectoryData[1]; + v = sqrt(vx*vx + vy*vy); + vx = vx / v; + vy = vy / v; + theta = atan2(vy, vx); + if (theta >= 0) { + velR = gTrajectoryData[6]; + velL = (gTrajectoryData[6] + (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) / (gTrajectoryData[6] - (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) * velR; + } + if (theta >= 0) { + velL = gTrajectoryData[6]; + velR = (gTrajectoryData[6] + (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) / (gTrajectoryData[6] - (((float) WHEELS_DIST)/2.0 * theta / 1000.0)) * velL; + } + changeVelocity(MOTOR_LEFT, velL * COEF_LEFT_WHEEL * CONST_VEL, 0); + changeVelocity(MOTOR_RIGHT, velR * COEF_LEFT_WHEEL * CONST_VEL, 0); + } + // pas d'autre type de trajectoire implntour le moment + } + } +} + +void goToBezier(short x0, short y0, short x1, short y1, short x2, short y2, short x3, short y3, short vel) { + gIsFollowingTrajectory = FALSE; + gTrajectoryData[0] = 3.0 * ((float)x1 - (float)x0); + gTrajectoryData[1] = 3.0 * ((float)y1 - (float)y0); + gTrajectoryData[2] = 3.0 * ((float)x2 - (float)x1) - gTrajectoryData[0]; + gTrajectoryData[3] = 3.0 * ((float)y2 - (float)y1) - gTrajectoryData[1]; + gTrajectoryData[4] = (float)x3 - (float)x0 - gTrajectoryData[2] - gTrajectoryData[0]; + gTrajectoryData[5] = (float)y3 - (float)y0 - gTrajectoryData[3] - gTrajectoryData[1]; + gTrajectoryData[6] = (float)vel; + gTrajectoryType = TRAJ_TYPE_BEZIER3; + gIsTrajectoryNew = TRUE; +} + +#endif \ No newline at end of file diff --git a/USB_Module/Motor_Controller/Firmware/trajectory.h b/USB_Module/Motor_Controller/Firmware/trajectory.h new file mode 100644 index 0000000..6192b78 --- /dev/null +++ b/USB_Module/Motor_Controller/Firmware/trajectory.h @@ -0,0 +1,20 @@ +/** + * @file trajectory.h + * G le syst de suivi de trajectoire +*/ + +#ifndef TRAJECTORY_H +#define TRAJECTORY_H + +#include "lm629.h" + +// Constantes descriptives +#define TRAJ_TYPE_NONE 0x00 +#define TRAJ_TYPE_LINE 0x01 +//#define TRAJ_TYPE_ARC 0x02 +//#define TRAJ_TYPE_BEZIER3 0x03 + +void interruptTrajectory(void); +void goToBezier(short x0, short y0, short x1, short y1, short x2, short y2, short x3, short y3, short vel); + +#endif \ No newline at end of file hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 21:11:31
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via d5dd29f7cee70a51a4bbfb294b48c970927ace06 (commit) from 55485c76b7ae61643fb73003c6f7c02ec144c984 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d5dd29f7cee70a51a4bbfb294b48c970927ace06 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 22:10:51 2010 +0100 [generators] remove some ugly hacks ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/card.ml b/PC_Mainboard/driver/card.ml deleted file mode 100644 index 4956a72..0000000 --- a/PC_Mainboard/driver/card.ml +++ /dev/null @@ -1,350 +0,0 @@ -(* - * card.ml - * ------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -module Log = Lwt_log.Make(struct let section = "card" end) - -open Lwt - -(* +-----------------------------------------------------------------+ - | Messages | - +-----------------------------------------------------------------+ *) - -let data_length = 52 - (* Taille en octet du corps d'un message *) - -type serial = int - (* Type d'un numéro de série d'un message *) - -type message = { - host_serial : serial; - (* Le numéro de série du message, émis par l'ordinateur. Vaut 0 pour - les messages émis par le PIC. *) - - device_serial : serial; - (* Le numéro de série du message, émis par le PIC. Vaut 0 pour les - messages émis par l'ordinateur. *) - - command : int; - (* La commande, en fait c'est plutôt le type du message *) - - error : int; - (* Si c'est un message d'erreur ce flag est non-nul *) - - data : string; - (* Les données du messages, il y a 52 octets. *) -} - -let make_buffer () = String.make data_length '\000' - -(* Parse un message depuis un buffer brut: *) -let parse_message buf = { - host_serial = Char.code buf.[PcInterface.up_hseq]; - device_serial = Char.code buf.[PcInterface.up_dseq]; - command = Char.code buf.[PcInterface.up_cmd]; - error = Char.code buf.[PcInterface.up_err]; - data = String.sub buf PcInterface.up_data 52; -} - -(* Créé un buffer brut depuis un message: *) -let forge_message msg = - let buf = String.make 64 '\000' in - buf.[PcInterface.up_hseq] <- Char.chr msg.host_serial; - buf.[PcInterface.up_dseq] <- Char.chr msg.device_serial; - buf.[PcInterface.up_cmd] <- Char.chr msg.command; - buf.[PcInterface.up_err] <- Char.chr msg.error; - if String.length msg.data > 52 then - Printf.ksprintf invalid_arg "message body too big: %d > 52" (String.length msg.data) - else begin - String.blit msg.data 0 buf PcInterface.up_data (String.length msg.data); - buf - end - -(* +-----------------------------------------------------------------+ - | Definitions | - +-----------------------------------------------------------------+ *) - -exception Card_closed -exception Card_crashed of string - -module Int_map = Map.Make(struct type t = int let compare = compare end) - -(* Type of a up and running card *) -type card = { - mutable serial_pool : serial list; - (* Pool de serial disponibles, comme il n'y a que 256 serial - disponibles on évite de juste incrémenter un compteur au pif. *) - - mutable reply_waiters : string Lwt.u Int_map.t; - (* Threads en attente d'une réponse *) - - handle : USB.handle; - (* Handle pour le périphérique usb *) - - kernel_active : bool; - (* Est-ce qu'un driver noyau était attaché à la carte avant qu'on - l'utilise ? *) - - mutex : Lwt_mutex.t; - (* Mutex pour envoyer des commandes, les cartes n'aiment pas les - appels parallèles. *) - - mutable events : (string -> unit) Lwt_sequence.t Int_map.t; - (* Connected events *) - - abort_waiter : int Lwt.t; - abort_wakener : int Lwt.u; - (* Sleeping thread which is wakeup when the card is closed *) - - wrapper : wrapper; - (* The associated wrapper *) -} - -and state = - | Opened of card - | Closed of exn - -and wrapper = { - mutable state : state; - name : string; - watch : [ `Error of exn | `Closed ] Lwt.t; -} - -type t = wrapper - -let name wrapper = wrapper.name -let closed wrapper = match wrapper.state with - | Opened _ -> false - | Closed _ -> true - -let watch wrapper = wrapper.watch - -(* Return a running card, if possible. *) -let rec get_card wrapper = match wrapper.state with - | Opened card -> - return card - | Closed exn -> - fail exn - -(* +-----------------------------------------------------------------+ - | Aborting | - +-----------------------------------------------------------------+ *) - -let abort wrapper exn = - match wrapper.state with - | Closed exn -> - return exn - | Opened card -> - wrapper.state <- Closed exn; - try_lwt - lwt () = USB.release_interface card.handle 0 in - if card.kernel_active then USB.attach_kernel_driver card.handle 0; - USB.close card.handle; - return exn - finally - wakeup_exn card.abort_wakener exn; - Int_map.iter (fun serial w -> wakeup_exn w exn) card.reply_waiters; - return () - -(* +-----------------------------------------------------------------+ - | Dispatching | - +-----------------------------------------------------------------+ *) - -let dropped typ msg = - lwt () = Log.warning_f "%s dropped" typ in - lwt () = Log.warning_f "===== -host_serial = %d -device_serial = %d -command = %d -error = %d -data:" msg.host_serial msg.device_serial msg.command msg.error in - Lwt_stream.iter_s (fun line -> Log.warning line) (Lwt_stream.hexdump (Lwt_stream.of_string msg.data)) - -(* Dispatch incomming messages continously *) -let rec dispatch card = - let buffer = String.create 64 in - begin - try_lwt - select [card.abort_waiter; - USB.interrupt_recv - ~handle:card.handle - ~endpoint:1 - buffer 0 64] >|= fun len -> `OK len - with exn -> - return (`Error exn) - end >>= function - | `Error exn -> - lwt () = Log.exn_f exn "stop dispatching on %s card" card.wrapper.name in - lwt _ = abort card.wrapper exn in - return () - | `OK len -> - if len <> 64 then begin - let msg = Printf.sprintf "read on %s card returned %d instead of 64" card.wrapper.name len in - lwt () = Log.error msg in - lwt _ = abort card.wrapper (Card_crashed msg) in - return () - end else begin - let msg = parse_message buffer in - if msg.command = PcInterface.cmd_respond then begin - match try Some(Int_map.find msg.host_serial card.reply_waiters) with Not_found -> None with - | Some wakener -> - card.reply_waiters <- Int_map.remove msg.host_serial card.reply_waiters; - card.serial_pool <- card.serial_pool @ [msg.host_serial]; - Lwt.wakeup wakener msg.data - | None -> - ignore (dropped "response" msg) - end else begin - match try Some(Int_map.find msg.command card.events) with Not_found -> None with - | Some seq -> - Lwt_sequence.iter_l - (fun push -> - try - push msg.data - with exn -> - ignore (Log.exn_f exn "pushing event %d from %s card failed with" msg.command card.wrapper.name)) - seq - | None -> - ignore (dropped "command" msg) - end; - dispatch card - end - -(* +-----------------------------------------------------------------+ - | Opening and closing | - +-----------------------------------------------------------------+ *) - -let close wrapper = match wrapper.state with - | Opened _ -> - lwt _ = abort wrapper Card_closed in - return () - | Closed _ -> - return () - -let rec make ~name ~handle = - lwt () = USB.reset_device handle in - let kernel_active = USB.kernel_driver_active handle 0 in - if kernel_active then USB.detach_kernel_driver handle 0; - lwt () = USB.set_configuration handle 1 in - lwt () = USB.claim_interface handle 0 in - let abort_waiter, abort_wakener = wait () in - let rec card = { - serial_pool = (let rec loop = function - | 256 -> [] - | n -> n :: loop (n + 1) - in - loop 1); - reply_waiters = Int_map.empty; - events = Int_map.empty; - handle = handle; - kernel_active = kernel_active; - mutex = Lwt_mutex.create (); - abort_waiter = abort_waiter; - abort_wakener = abort_wakener; - wrapper = wrapper; - } and wrapper = { - state = Opened card; - name = name; - watch = (try_lwt - lwt _ = abort_waiter in - (* Never happen: *) - return `Closed - with - | Card_closed -> - return `Closed - | exn -> - return (`Error exn)) - } in - ignore (dispatch card); - return wrapper - -(* +-----------------------------------------------------------------+ - | Sending/receiving messages | - +-----------------------------------------------------------------+ *) - -let send card buffer = - lwt len = select [card.abort_waiter; USB.interrupt_send ~handle:card.handle ~endpoint:1 buffer 0 64] in - if len <> 64 then begin - let msg = Printf.sprintf "write on %s card returned %d instead of 64" card.wrapper.name len in - lwt () = Log.error msg in - fail =<< abort card.wrapper (Card_crashed msg) - end else - return () - -(* Send a command and wait for the response: *) -let rec send_request wrapper command data = - lwt card = get_card wrapper in - let serial = match card.serial_pool with - | [] -> - failwith "Card.send_request: no more serial available!" - | serial :: rest -> - card.serial_pool <- rest; - serial - in - let waiter, wakener = Lwt.task () in - card.reply_waiters <- Int_map.add serial wakener card.reply_waiters; - on_cancel waiter (fun () -> - card.reply_waiters <- Int_map.remove serial card.reply_waiters; - card.serial_pool <- card.serial_pool @ [serial]); - let buffer = forge_message { host_serial = serial; - device_serial = 0; - command = command; - error = 0; - data = data } in - try_lwt - Lwt_mutex.with_lock card.mutex - (fun () -> - lwt () = send card buffer in - waiter) - with - | Canceled -> - fail Canceled - | exn -> - lwt () = Log.exn_f exn "write to %s card failed with" wrapper.name in - fail =<< abort wrapper exn - -(* Send a command without waiting for the reply: *) -let rec send_command wrapper command data = - lwt card = get_card wrapper in - let buffer = forge_message { host_serial = 0; - device_serial = 0; - command = command; - error = 0; - data = data } in - try_lwt - Lwt_mutex.with_lock card.mutex (fun () -> send card buffer) - with - | Canceled -> - fail Canceled - | exn -> - lwt () = Log.exn_f exn "write to %s card failed with" wrapper.name in - fail =<< abort wrapper exn - -let connect wrapper command = match wrapper.state with - | Closed exn -> - raise exn - | Opened card -> - let event, push = React.E.create () in - let seq = - try - Int_map.find command card.events - with Not_found -> - let seq = Lwt_sequence.create () in - card.events <- Int_map.add command seq card.events; - seq - in - let node = Lwt_sequence.add_l push seq in - let stop = lazy( - Lwt_sequence.remove node; - if Lwt_sequence.is_empty seq then - card.events <- Int_map.remove command card.events; - React.E.stop event - ) in - (object - method event = event - method stop = Lazy.force stop - end) diff --git a/PC_Mainboard/driver/card.mli b/PC_Mainboard/driver/card.mli deleted file mode 100644 index d435a21..0000000 --- a/PC_Mainboard/driver/card.mli +++ /dev/null @@ -1,56 +0,0 @@ -(* - * card.mli - * -------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(** Lowlevel card interfaces *) - -type t - (** Type of a card *) - -val name : t -> string - (** Returns the name of a card. It can be applied on a closed - card. *) - -val closed : t -> bool - (** Returns [true] iff the card has been closed *) - -val watch : t -> [ `Error of exn | `Closed ] Lwt.t - (** [watch card] is a thread which is wakeup when the card is - closed, or when a fatal error happen. The argument describe the - reason. *) - -exception Card_closed - (** Exception raised when trying to use a closed card *) - -exception Card_crashed of string - (** Exception raised when a fatal error happen on the card *) - -(** {6 Card opening/closing} *) - -val make : name : string -> handle : USB.handle -> t Lwt.t - (** [make ~name ~handle] creates a card using the given USB - handle. [name] is used for debug messages. *) - -val close : t -> unit Lwt.t - (** Close the given card *) - -(** {6 Sending/receving messages} *) - -val make_buffer : unit -> string - (** Creates a new buffer for serialization (with the right size) *) - -val send_request : t -> int -> string -> string Lwt.t - (** [send_request card request data] sends a request to the USB - device and wait for the reply *) - -val send_command : t -> int -> string -> unit Lwt.t - (** Sends a command to the device *) - -val connect : t -> int -> < event : string React.event; stop : unit > - (** [connect card command] connects to signals [command] emitted by - [card] *) diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index b367a56..aa0b6f4 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -22,7 +22,7 @@ module Compass = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Krobot_card.t; mutable data : int; } @@ -68,7 +68,7 @@ module AX12 = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Krobot_card.t; } module OBus = OBus_object.Make(struct @@ -95,7 +95,7 @@ module Logic_sensors = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Krobot_card.t; mutable data : bool array; } @@ -140,7 +140,7 @@ module Range_finders = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Krobot_card.t; mutable data : int array; } @@ -219,7 +219,7 @@ struct type t = { obus : OBus_object.t; - card : Card.t; + card : Krobot_card.t; mutable inhibit_forward_until : float; mutable inhibit_backward_until : float; @@ -452,7 +452,7 @@ struct return () let make card path = - let commands = React.E.map (fun data -> Char.code data.[0]) (Card.connect card PcInterface.cmd_traj)#event in + let commands = React.E.map (fun data -> Char.code data.[0]) (Krobot_card.connect card PcInterface.cmd_traj)#event in let dev = { obus = OBus_object.make path; card = card; @@ -489,9 +489,9 @@ struct | None -> return () | Some card -> - Card.close card + Krobot_card.close card - OL_method CardStates : OBus_connection.t -> Types.card_state * Types.card_state * Types.card_state = fun () connection -> + OL_method Krobot_cardStates : OBus_connection.t -> Types.card_state * Types.card_state * Types.card_state = fun () connection -> let state card = match React.S.value card with | Some _ -> `Present | None -> `Absent @@ -515,10 +515,10 @@ end | Objects for cards | +-----------------------------------------------------------------+ *) -module MCard = +module Card = struct type t = { - card : Card.t option React.signal; + card : Krobot_card.t option React.signal; obus : OBus_object.t; name : string; mutable state : unit Lwt.t React.signal; @@ -535,12 +535,12 @@ struct | Some card -> card - include DBus_exports.Common(OBus)(struct let get = get_card end) + include DBus_exports.Card(OBus)(struct let get = get_card end) include OBus.MakeInterface(struct let name = "fr.krobot.Card" end) OL_property_r Name : string = fun dev -> - return (Card.name (get_card dev)) + return (Krobot_card.name (get_card dev)) OL_method GetState : Types.card_state = fun dev -> match React.S.value dev.card with @@ -550,19 +550,19 @@ struct return `Present OL_method GetFirmwareBuild : string = fun dev -> - USB_commands.Common.get_firmware_build (get_card dev) + USB_commands.Card.get_firmware_build (get_card dev) OL_method GetBoardInfo : string = fun dev -> - USB_commands.Common.get_board_info (get_card dev) + USB_commands.Card.get_board_info (get_card dev) OL_method Bootloader : unit = fun dev -> - USB_commands.Common.bootloader (get_card dev) + USB_commands.Card.bootloader (get_card dev) OL_method Reset : unit = fun dev -> - USB_commands.Common.reset (get_card dev) + USB_commands.Card.reset (get_card dev) OL_method Test : unit = fun dev -> - USB_commands.Common.test (get_card dev) + USB_commands.Card.test (get_card dev) OL_signal StateChanged : Types.card_state @@ -582,7 +582,7 @@ struct end (* +-----------------------------------------------------------------+ - | Cards management | + | Krobot_cards management | +-----------------------------------------------------------------+ *) (* Continously try to open the card with given parameters *) @@ -595,16 +595,16 @@ let rec monitor_card ~name ~vendor_id ~product_id ~set on_up on_down = lwt () = Log.info_f "%s card opened" name in begin try_lwt - lwt card = Card.make name handle in - return (`Card card) + lwt card = Krobot_card.make name handle in + return (`Krobot_card card) with exn -> return (`Error exn) end >>= function - | `Card card -> + | `Krobot_card card -> lwt () = Log.info_f "%s card is up and running" name in set (Some card); lwt () = on_up card in - lwt result = Card.watch card in + lwt result = Krobot_card.watch card in set None; lwt () = on_down () in lwt () = @@ -715,9 +715,9 @@ lwt () = return ()) end; - MCard.OBus.export bus (MCard.make "interface" card_interface ["fr"; "krobot"; "Cards"; "Interface"]); - MCard.OBus.export bus (MCard.make "sensor" card_sensor ["fr"; "krobot"; "Cards"; "Sensor"]); - MCard.OBus.export bus (MCard.make "motor" card_motor ["fr"; "krobot"; "Cards"; "Motor"]); + Card.OBus.export bus (Card.make "interface" card_interface ["fr"; "krobot"; "Cards"; "Interface"]); + Card.OBus.export bus (Card.make "sensor" card_sensor ["fr"; "krobot"; "Cards"; "Sensor"]); + Card.OBus.export bus (Card.make "motor" card_motor ["fr"; "krobot"; "Cards"; "Motor"]); Manager.OBus.export bus (); diff --git a/PC_Mainboard/driver/krobot_card.ml b/PC_Mainboard/driver/krobot_card.ml new file mode 100644 index 0000000..a2ba1be --- /dev/null +++ b/PC_Mainboard/driver/krobot_card.ml @@ -0,0 +1,350 @@ +(* + * krobot_card.ml + * -------------- + * Copyright : (c) 2009-2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +module Log = Lwt_log.Make(struct let section = "card" end) + +open Lwt + +(* +-----------------------------------------------------------------+ + | Messages | + +-----------------------------------------------------------------+ *) + +let data_length = 52 + (* Taille en octet du corps d'un message *) + +type serial = int + (* Type d'un numéro de série d'un message *) + +type message = { + host_serial : serial; + (* Le numéro de série du message, émis par l'ordinateur. Vaut 0 pour + les messages émis par le PIC. *) + + device_serial : serial; + (* Le numéro de série du message, émis par le PIC. Vaut 0 pour les + messages émis par l'ordinateur. *) + + command : int; + (* La commande, en fait c'est plutôt le type du message *) + + error : int; + (* Si c'est un message d'erreur ce flag est non-nul *) + + data : string; + (* Les données du messages, il y a 52 octets. *) +} + +let make_buffer () = String.make data_length '\000' + +(* Parse un message depuis un buffer brut: *) +let parse_message buf = { + host_serial = Char.code buf.[PcInterface.up_hseq]; + device_serial = Char.code buf.[PcInterface.up_dseq]; + command = Char.code buf.[PcInterface.up_cmd]; + error = Char.code buf.[PcInterface.up_err]; + data = String.sub buf PcInterface.up_data 52; +} + +(* Créé un buffer brut depuis un message: *) +let forge_message msg = + let buf = String.make 64 '\000' in + buf.[PcInterface.up_hseq] <- Char.chr msg.host_serial; + buf.[PcInterface.up_dseq] <- Char.chr msg.device_serial; + buf.[PcInterface.up_cmd] <- Char.chr msg.command; + buf.[PcInterface.up_err] <- Char.chr msg.error; + if String.length msg.data > 52 then + Printf.ksprintf invalid_arg "message body too big: %d > 52" (String.length msg.data) + else begin + String.blit msg.data 0 buf PcInterface.up_data (String.length msg.data); + buf + end + +(* +-----------------------------------------------------------------+ + | Definitions | + +-----------------------------------------------------------------+ *) + +exception Card_closed +exception Card_crashed of string + +module Int_map = Map.Make(struct type t = int let compare = compare end) + +(* Type of a up and running card *) +type card = { + mutable serial_pool : serial list; + (* Pool de serial disponibles, comme il n'y a que 256 serial + disponibles on évite de juste incrémenter un compteur au pif. *) + + mutable reply_waiters : string Lwt.u Int_map.t; + (* Threads en attente d'une réponse *) + + handle : USB.handle; + (* Handle pour le périphérique usb *) + + kernel_active : bool; + (* Est-ce qu'un driver noyau était attaché à la carte avant qu'on + l'utilise ? *) + + mutex : Lwt_mutex.t; + (* Mutex pour envoyer des commandes, les cartes n'aiment pas les + appels parallèles. *) + + mutable events : (string -> unit) Lwt_sequence.t Int_map.t; + (* Connected events *) + + abort_waiter : int Lwt.t; + abort_wakener : int Lwt.u; + (* Sleeping thread which is wakeup when the card is closed *) + + wrapper : wrapper; + (* The associated wrapper *) +} + +and state = + | Opened of card + | Closed of exn + +and wrapper = { + mutable state : state; + name : string; + watch : [ `Error of exn | `Closed ] Lwt.t; +} + +type t = wrapper + +let name wrapper = wrapper.name +let closed wrapper = match wrapper.state with + | Opened _ -> false + | Closed _ -> true + +let watch wrapper = wrapper.watch + +(* Return a running card, if possible. *) +let rec get_card wrapper = match wrapper.state with + | Opened card -> + return card + | Closed exn -> + fail exn + +(* +-----------------------------------------------------------------+ + | Aborting | + +-----------------------------------------------------------------+ *) + +let abort wrapper exn = + match wrapper.state with + | Closed exn -> + return exn + | Opened card -> + wrapper.state <- Closed exn; + try_lwt + lwt () = USB.release_interface card.handle 0 in + if card.kernel_active then USB.attach_kernel_driver card.handle 0; + USB.close card.handle; + return exn + finally + wakeup_exn card.abort_wakener exn; + Int_map.iter (fun serial w -> wakeup_exn w exn) card.reply_waiters; + return () + +(* +-----------------------------------------------------------------+ + | Dispatching | + +-----------------------------------------------------------------+ *) + +let dropped typ msg = + lwt () = Log.warning_f "%s dropped" typ in + lwt () = Log.warning_f "===== +host_serial = %d +device_serial = %d +command = %d +error = %d +data:" msg.host_serial msg.device_serial msg.command msg.error in + Lwt_stream.iter_s (fun line -> Log.warning line) (Lwt_stream.hexdump (Lwt_stream.of_string msg.data)) + +(* Dispatch incomming messages continously *) +let rec dispatch card = + let buffer = String.create 64 in + begin + try_lwt + select [card.abort_waiter; + USB.interrupt_recv + ~handle:card.handle + ~endpoint:1 + buffer 0 64] >|= fun len -> `OK len + with exn -> + return (`Error exn) + end >>= function + | `Error exn -> + lwt () = Log.exn_f exn "stop dispatching on %s card" card.wrapper.name in + lwt _ = abort card.wrapper exn in + return () + | `OK len -> + if len <> 64 then begin + let msg = Printf.sprintf "read on %s card returned %d instead of 64" card.wrapper.name len in + lwt () = Log.error msg in + lwt _ = abort card.wrapper (Card_crashed msg) in + return () + end else begin + let msg = parse_message buffer in + if msg.command = PcInterface.cmd_respond then begin + match try Some(Int_map.find msg.host_serial card.reply_waiters) with Not_found -> None with + | Some wakener -> + card.reply_waiters <- Int_map.remove msg.host_serial card.reply_waiters; + card.serial_pool <- card.serial_pool @ [msg.host_serial]; + Lwt.wakeup wakener msg.data + | None -> + ignore (dropped "response" msg) + end else begin + match try Some(Int_map.find msg.command card.events) with Not_found -> None with + | Some seq -> + Lwt_sequence.iter_l + (fun push -> + try + push msg.data + with exn -> + ignore (Log.exn_f exn "pushing event %d from %s card failed with" msg.command card.wrapper.name)) + seq + | None -> + ignore (dropped "command" msg) + end; + dispatch card + end + +(* +-----------------------------------------------------------------+ + | Opening and closing | + +-----------------------------------------------------------------+ *) + +let close wrapper = match wrapper.state with + | Opened _ -> + lwt _ = abort wrapper Card_closed in + return () + | Closed _ -> + return () + +let rec make ~name ~handle = + lwt () = USB.reset_device handle in + let kernel_active = USB.kernel_driver_active handle 0 in + if kernel_active then USB.detach_kernel_driver handle 0; + lwt () = USB.set_configuration handle 1 in + lwt () = USB.claim_interface handle 0 in + let abort_waiter, abort_wakener = wait () in + let rec card = { + serial_pool = (let rec loop = function + | 256 -> [] + | n -> n :: loop (n + 1) + in + loop 1); + reply_waiters = Int_map.empty; + events = Int_map.empty; + handle = handle; + kernel_active = kernel_active; + mutex = Lwt_mutex.create (); + abort_waiter = abort_waiter; + abort_wakener = abort_wakener; + wrapper = wrapper; + } and wrapper = { + state = Opened card; + name = name; + watch = (try_lwt + lwt _ = abort_waiter in + (* Never happen: *) + return `Closed + with + | Card_closed -> + return `Closed + | exn -> + return (`Error exn)) + } in + ignore (dispatch card); + return wrapper + +(* +-----------------------------------------------------------------+ + | Sending/receiving messages | + +-----------------------------------------------------------------+ *) + +let send card buffer = + lwt len = select [card.abort_waiter; USB.interrupt_send ~handle:card.handle ~endpoint:1 buffer 0 64] in + if len <> 64 then begin + let msg = Printf.sprintf "write on %s card returned %d instead of 64" card.wrapper.name len in + lwt () = Log.error msg in + fail =<< abort card.wrapper (Card_crashed msg) + end else + return () + +(* Send a command and wait for the response: *) +let rec send_request wrapper command data = + lwt card = get_card wrapper in + let serial = match card.serial_pool with + | [] -> + failwith "Card.send_request: no more serial available!" + | serial :: rest -> + card.serial_pool <- rest; + serial + in + let waiter, wakener = Lwt.task () in + card.reply_waiters <- Int_map.add serial wakener card.reply_waiters; + on_cancel waiter (fun () -> + card.reply_waiters <- Int_map.remove serial card.reply_waiters; + card.serial_pool <- card.serial_pool @ [serial]); + let buffer = forge_message { host_serial = serial; + device_serial = 0; + command = command; + error = 0; + data = data } in + try_lwt + Lwt_mutex.with_lock card.mutex + (fun () -> + lwt () = send card buffer in + waiter) + with + | Canceled -> + fail Canceled + | exn -> + lwt () = Log.exn_f exn "write to %s card failed with" wrapper.name in + fail =<< abort wrapper exn + +(* Send a command without waiting for the reply: *) +let rec send_command wrapper command data = + lwt card = get_card wrapper in + let buffer = forge_message { host_serial = 0; + device_serial = 0; + command = command; + error = 0; + data = data } in + try_lwt + Lwt_mutex.with_lock card.mutex (fun () -> send card buffer) + with + | Canceled -> + fail Canceled + | exn -> + lwt () = Log.exn_f exn "write to %s card failed with" wrapper.name in + fail =<< abort wrapper exn + +let connect wrapper command = match wrapper.state with + | Closed exn -> + raise exn + | Opened card -> + let event, push = React.E.create () in + let seq = + try + Int_map.find command card.events + with Not_found -> + let seq = Lwt_sequence.create () in + card.events <- Int_map.add command seq card.events; + seq + in + let node = Lwt_sequence.add_l push seq in + let stop = lazy( + Lwt_sequence.remove node; + if Lwt_sequence.is_empty seq then + card.events <- Int_map.remove command card.events; + React.E.stop event + ) in + (object + method event = event + method stop = Lazy.force stop + end) diff --git a/PC_Mainboard/driver/krobot_card.mli b/PC_Mainboard/driver/krobot_card.mli new file mode 100644 index 0000000..06063a3 --- /dev/null +++ b/PC_Mainboard/driver/krobot_card.mli @@ -0,0 +1,56 @@ +(* + * krobot_card.mli + * --------------- + * Copyright : (c) 2009-2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(** Lowlevel card interfaces *) + +type t + (** Type of a card *) + +val name : t -> string + (** Returns the name of a card. It can be applied on a closed + card. *) + +val closed : t -> bool + (** Returns [true] iff the card has been closed *) + +val watch : t -> [ `Error of exn | `Closed ] Lwt.t + (** [watch card] is a thread which is wakeup when the card is + closed, or when a fatal error happen. The argument describe the + reason. *) + +exception Card_closed + (** Exception raised when trying to use a closed card *) + +exception Card_crashed of string + (** Exception raised when a fatal error happen on the card *) + +(** {6 Card opening/closing} *) + +val make : name : string -> handle : USB.handle -> t Lwt.t + (** [make ~name ~handle] creates a card using the given USB + handle. [name] is used for debug messages. *) + +val close : t -> unit Lwt.t + (** Close the given card *) + +(** {6 Sending/receving messages} *) + +val make_buffer : unit -> string + (** Creates a new buffer for serialization (with the right size) *) + +val send_request : t -> int -> string -> string Lwt.t + (** [send_request card request data] sends a request to the USB + device and wait for the reply *) + +val send_command : t -> int -> string -> unit Lwt.t + (** Sends a command to the device *) + +val connect : t -> int -> < event : string React.event; stop : unit > + (** [connect card command] connects to signals [command] emitted by + [card] *) diff --git a/PC_Mainboard/generators/gen_dbus_exports.ml b/PC_Mainboard/generators/gen_dbus_exports.ml index ae94a26..f761e04 100644 --- a/PC_Mainboard/generators/gen_dbus_exports.ml +++ b/PC_Mainboard/generators/gen_dbus_exports.ml @@ -70,12 +70,10 @@ let rec print path indent = function print_apply (sprintf "USB_commands.%s%s (Get.get dev)" path (Name.lid cmd.cmd_name)) cmd.cmd_args | Module(name, items) -> - printf "%smodule %s(M : Object.S)(Get : sig val get : M.t -> Card.t end) = struct\n" + printf "%smodule %s(M : Object.S)(Get : sig val get : M.t -> Krobot_card.t end) = struct\n" + indent (Name.uid name); + printf "%s include M.MakeInterface(struct let name = \"fr.krobot.Device.%s.Unsafe\" end)\n" indent (Name.uid name); - printf "%s include M.MakeInterface(struct let name = %S end)\n" indent - (match name with - | "common" -> "fr.krobot.Card.Unsafe" - | _ -> sprintf "fr.krobot.Device.%s.Unsafe" (Name.uid name)); List.iter (print (path ^ Name.uid name ^ ".") (indent ^ " ")) items; printf "%send\n" indent @@ -87,4 +85,10 @@ let rec print path indent = function let () = printf "open OBus_pervasives\n"; - List.iter (print "" "") interface + + printf "module Card(M : Object.S)(Get : sig val get : M.t -> Krobot_card.t end) = struct\n"; + printf " include M.MakeInterface(struct let name = \"fr.krobot.Card.Unsafe\" end)\n"; + List.iter (print "Card." " ") card; + printf "end\n"; + + List.iter (print "" "") interfaces diff --git a/PC_Mainboard/generators/gen_dbus_imports.ml b/PC_Mainboard/generators/gen_dbus_imports.ml index 9fe5e5f..cdd7552 100644 --- a/PC_Mainboard/generators/gen_dbus_imports.ml +++ b/PC_Mainboard/generators/gen_dbus_imports.ml @@ -48,19 +48,6 @@ let rec print indent = function cmd.cmd_args; printf "unit\n"; - | Module("common", items) -> - printf "%smodule Common = struct\n" indent; - printf "%s let proxy krobot (card : Krobot.Card.card) =\n" indent; - printf "%s OBus_proxy.make (Krobot.peer krobot)\n" indent; - printf "%s [\"fr\"; \"krobot\"; \"Cards\"; (match card with\n" indent; - printf "%s | `Interface -> \"Interface\"\n" indent; - printf "%s | `Sensor -> \"Sensor\"\n" indent; - printf "%s | `Motor -> \"Motor\")]\n" indent; - printf "%s let op_method_call member typ krobot card =\n" indent; - printf "%s OBus_proxy.method_call (proxy krobot card) ~interface:\"fr.krobot.Card.Unsafe\" ~member typ\n" indent; - List.iter (print (indent ^ " ")) items; - printf "%send\n" indent - | Module(name, items) -> printf "%smodule %s = struct\n" indent (Name.uid name); printf "%s include MakeDevice(struct let name = \"%s\" end)\n" indent (Name.caml_case name); @@ -85,5 +72,16 @@ module MakeDevice(Name : sig val name : string end) = (struct let name = \"fr.krobot.Device.\" ^ Name.name ^ \".Unsafe\" end) +module Card = struct + let proxy krobot (card : Krobot.Card.card) = + OBus_proxy.make (Krobot.peer krobot) + [\"fr\"; \"krobot\"; \"Cards\"; (match card with + | `Interface -> \"Interface\" + | `Sensor -> \"Sensor\" + | `Motor -> \"Motor\")] + let op_method_call member typ krobot card = + OBus_proxy.method_call (proxy krobot card) ~interface:\"fr.krobot.Card.Unsafe\" ~member typ "; - List.iter (print "") interface + List.iter (print " ") card; + printf "end\n"; + List.iter (print "") interfaces diff --git a/PC_Mainboard/generators/gen_script_commands.ml b/PC_Mainboard/generators/gen_script_commands.ml index 9f9298f..fd82083 100644 --- a/PC_Mainboard/generators/gen_script_commands.ml +++ b/PC_Mainboard/generators/gen_script_commands.ml @@ -80,23 +80,20 @@ let rec print path caml_path = function printf "]) ^ \"}\" in\n"; printf " let _ = print_%s in\n" (Name.lid record.rec_name) | Module(name, items) -> - let items = - if name = "common" then begin - printf "let __type_card name = keyword name [(\"interface\", `Interface); (\"sensor\", `Sensor); (\"motor\", `Motor)] in\n"; - let card = typ "card" in - List.map - (function - | Request req -> Request{ req with req_args = Arg("card", card) :: req.req_args } - | Command cmd -> Command{ cmd with cmd_args = Arg("card", card) :: cmd.cmd_args } - | item -> item) - items - end else - items - in List.iter (print (sprintf "%s; \"%s\"" path (String.lowercase name)) (caml_path ^ Name.uid name ^ ".")) items let () = printf "open Script_commands\n"; printf "let register () =\n"; - List.iter (print "\"unsafe\"" "") (List.filter (function Module _ -> true | _ -> false) interface); + printf " let __type_card name = keyword name [(\"interface\", `Interface); (\"sensor\", `Sensor); (\"motor\", `Motor)] in\n"; + let card_type = typ "card" in + List.iter + (print "\"unsafe\"" "Card.") + (List.map + (function + | Request req -> Request{ req with req_args = Arg("card", card_type) :: req.req_args } + | Command cmd -> Command{ cmd with cmd_args = Arg("card", card_type) :: cmd.cmd_args } + | item -> item) + card); + List.iter (print "\"unsafe\"" "") interfaces; printf " ()" diff --git a/PC_Mainboard/generators/gen_usb_commands.ml b/PC_Mainboard/generators/gen_usb_commands.ml index af190a9..70bfb92 100644 --- a/PC_Mainboard/generators/gen_usb_commands.ml +++ b/PC_Mainboard/generators/gen_usb_commands.ml @@ -20,7 +20,7 @@ let print_common indent name args = | Cst _ -> ()) args; printf " =\n"; - printf "%s let data = Card.make_buffer () in\n" indent; + printf "%s let data = Krobot_card.make_buffer () in\n" indent; if args <> [] then begin printf "%s let writer = RW.writer data in\n" indent; List.iter @@ -35,7 +35,7 @@ let print_common indent name args = let rec print indent = function | Request req -> print_common indent req.req_name req.req_args; - printf "%s lwt data = Card.send_request card %d data in\n" indent req.req_code; + printf "%s lwt data = Krobot_card.send_request card %d data in\n" indent req.req_code; if req.req_repl <> [] then begin printf "%s let reader = RW.reader data in\n" indent; let repl = @@ -56,7 +56,7 @@ let rec print indent = function printf "%s return ()\n" indent | Command cmd -> print_common indent cmd.cmd_name cmd.cmd_args; - printf "%s Card.send_command card %d data\n" indent cmd.cmd_code + printf "%s Krobot_card.send_command card %d data\n" indent cmd.cmd_code | Enum enum -> printf "%slet put_%s writer value =\n" indent (Name.lid enum.enum_name); printf "%s let code = match value with\n" indent; @@ -102,4 +102,4 @@ let rec print indent = function let () = printf "open Lwt\n"; printf "open RW\n"; - List.iter (print "") interface + List.iter (print "") (Module("card", card) :: interfaces) diff --git a/PC_Mainboard/interface/interface.ml b/PC_Mainboard/interface/interface.ml index 011678a..e00fdee 100644 --- a/PC_Mainboard/interface/interface.ml +++ b/PC_Mainboard/interface/interface.ml @@ -198,32 +198,34 @@ let typ name = | Interface | +-----------------------------------------------------------------+ *) -let interface = [ - Module("common", [ - request - ~name:"get-firmware-build" - ~code:PcInterface.get_firmware_build - ~repl:[Arg("date", string)] - (); - request - ~name:"get-board-info" - ~code:PcInterface.get_board_info - ~repl:[Arg("info", string)] - (); - command - ~name:"bootloader" - ~code:PcInterface.cmd_bootloader - (); - command - ~name:"reset" - ~code:PcInterface.cmd_reset - (); - command - ~name:"test" - ~code:PcInterface.cmd_test - (); - ]); +(* Card related commands *) +let card = [ + request + ~name:"get-firmware-build" + ~code:PcInterface.get_firmware_build + ~repl:[Arg("date", string)] + (); + request + ~name:"get-board-info" + ~code:PcInterface.get_board_info + ~repl:[Arg("info", string)] + (); + command + ~name:"bootloader" + ~code:PcInterface.cmd_bootloader + (); + command + ~name:"reset" + ~code:PcInterface.cmd_reset + (); + command + ~name:"test" + ~code:PcInterface.cmd_test + (); +] +(* All other interfaces *) +let interfaces = [ Module("compass", [ request ~name:"get" hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 18:33:12
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 55485c76b7ae61643fb73003c6f7c02ec144c984 (commit) from 82f453512edd3c3b653149f7025735b943249d93 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 55485c76b7ae61643fb73003c6f7c02ec144c984 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 19:32:42 2010 +0100 [script] typo: try instead of try_lwt ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/script.ml b/PC_Mainboard/clients/script.ml index 2ee3211..fcd4392 100644 --- a/PC_Mainboard/clients/script.ml +++ b/PC_Mainboard/clients/script.ml @@ -129,7 +129,7 @@ let exec ~krobot ~logger ~command = logger [fg lred; textf "parse failure: %s" (Printexc.to_string exn)] | `OK(name, args) -> let path, name = decompose name in - try + try_lwt let rec search = function | [] -> logger [fg lred; textf "unknown command '%s'" name] hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 18:31:25
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 82f453512edd3c3b653149f7025735b943249d93 (commit) from dc7f31e7038f1ac3f97cdad9b76de424fbbab041 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 82f453512edd3c3b653149f7025735b943249d93 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 19:31:00 2010 +0100 [driver] typo ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 3c2a145..b367a56 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -269,9 +269,9 @@ struct select [waiter; (lwt () = if dist > 0 then - USB_commands.Motor.forward dev.card dist velocity acc + USB_commands.Motors.forward dev.card dist velocity acc else - USB_commands.Motor.backward dev.card (-dist) velocity acc + USB_commands.Motors.backward dev.card (-dist) velocity acc in thread)] in @@ -298,9 +298,9 @@ struct select [waiter; (lwt () = if angle > 0 then - USB_commands.Motor.left dev.card angle velocity acc + USB_commands.Motors.left dev.card angle velocity acc else - USB_commands.Motor.right dev.card (-angle) velocity acc + USB_commands.Motors.right dev.card (-angle) velocity acc in thread)] in @@ -329,7 +329,7 @@ struct lwt () = select [waiter; (lwt () = - USB_commands.Motor.goto dev.card + USB_commands.Motors.goto dev.card ~x ~y ~velocity:velocity ~acceleration:acc @@ -354,16 +354,16 @@ struct match dev.state with | Trajectory trajectory -> trajectory.stopped <- true; - lwt () = USB_commands.Motor.traj_stop dev.card `Both mode in + lwt () = USB_commands.Motors.traj_stop dev.card `Both mode in wakeup trajectory.abort (); return () | Manual(stopper, left, right) -> - lwt () = USB_commands.Motor.traj_stop dev.card `Both mode in + lwt () = USB_commands.Motors.traj_stop dev.card `Both mode in dev.state <- Static; cancel stopper; return () | Static -> - USB_commands.Motor.traj_stop dev.card `Both mode + USB_commands.Motors.traj_stop dev.card `Both mode let _set_velocities dev (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = let fake_direction_l, direction_l, velocity_l = if velocity_l < 0 then (`Backward, `Backward, -velocity_l) else (`Forward, `Forward, velocity_l) in @@ -381,16 +381,16 @@ struct { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }); lwt () = if acceleration_l <> settings_l.acceleration then - USB_commands.Motor.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l + USB_commands.Motors.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l else - USB_commands.Motor.traj_change_velocity dev.card `Left velocity_l fake_direction_l + USB_commands.Motors.traj_change_velocity dev.card `Left velocity_l fake_direction_l and () = if acceleration_r <> settings_r.acceleration then - USB_commands.Motor.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r + USB_commands.Motors.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r else - USB_commands.Motor.traj_change_velocity dev.card `Right velocity_r fake_direction_r + USB_commands.Motors.traj_change_velocity dev.card `Right velocity_r fake_direction_r in - USB_commands.Motor.traj_start dev.card `Both + USB_commands.Motors.traj_start dev.card `Both end end @@ -682,7 +682,7 @@ lwt () = ignore begin monitor_card ~name:"interace" ~vendor_id:PcInterface.usb_vid ~product_id:PcInterface.usb_pid_robot_interface ~set:set_card_interface (fun card -> - lwt () = USB_commands.Motor.enable card `Both in + lwt () = USB_commands.Motors.enable card `Both in lwt () = Compass.OBus.export bus =|< Compass.make card ["fr"; "krobot"; "Devices"; "Compass"] and () = AX12.OBus.export bus =|< AX12.make card ["fr"; "krobot"; "Devices"; "AX12"] in return ()) @@ -707,7 +707,7 @@ lwt () = ignore begin monitor_card ~name:"motor" ~vendor_id:PcInterface.usb_vid ~product_id:PcInterface.usb_pid_motor_controller ~set:set_card_motor (fun card -> - lwt () = USB_commands.Motor.enable card `Both and () = USB_commands.Motor.traj_init card in + lwt () = USB_commands.Motors.enable card `Both and () = USB_commands.Motors.traj_init card in lwt () = Motors.OBus.export bus =|< Motors.make card ["fr"; "krobot"; "Devices"; "Motors"] in return ()) (fun () -> hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 18:30:14
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via dc7f31e7038f1ac3f97cdad9b76de424fbbab041 (commit) from 4559f9bbbab6518f243fd21f6e406354ac8705ec (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit dc7f31e7038f1ac3f97cdad9b76de424fbbab041 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 19:29:33 2010 +0100 [generators] prevent typos in interface names ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 305a8d7..3c2a145 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -31,7 +31,7 @@ struct let get obj = obj.obus end) - include DBus_exports.Compass(OBus)(struct let get dev = dev.card end)(struct let name = "fr.krobot.Device.Compass.Unsafe" end) + include DBus_exports.Compass(OBus)(struct let get dev = dev.card end) include OBus.MakeInterface(struct let name = "fr.krobot.Device.Compass" end) @@ -76,7 +76,7 @@ struct let get obj = obj.obus end) - include DBus_exports.AX12(OBus)(struct let get dev = dev.card end)(struct let name = "fr.krobot.Device.AX12.Unsafe" end) + include DBus_exports.AX12(OBus)(struct let get dev = dev.card end) include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) @@ -104,7 +104,7 @@ struct let get obj = obj.obus end) - include DBus_exports.Logic_sensors(OBus)(struct let get dev = dev.card end)(struct let name = "fr.krobot.Device.LogicSensors.Unsafe" end) + include DBus_exports.Logic_sensors(OBus)(struct let get dev = dev.card end) include OBus.MakeInterface(struct let name = "fr.krobot.Device.LogicSensors" end) @@ -149,7 +149,7 @@ struct let get obj = obj.obus end) - include DBus_exports.Range_finders(OBus)(struct let get dev = dev.card end)(struct let name = "fr.krobot.Device.RangeFinders.Unsafe" end) + include DBus_exports.Range_finders(OBus)(struct let get dev = dev.card end) include OBus.MakeInterface(struct let name = "fr.krobot.Device.RangeFinders" end) @@ -238,7 +238,7 @@ struct let get obj = obj.obus end) - include DBus_exports.Motor(OBus)(struct let get dev = dev.card end)(struct let name = "fr.krobot.Device.Motors.Unsafe" end) + include DBus_exports.Motors(OBus)(struct let get dev = dev.card end) include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) @@ -535,7 +535,7 @@ struct | Some card -> card - include DBus_exports.Common(OBus)(struct let get = get_card end)(struct let name = "fr.krobot.Card.Unsafe" end) + include DBus_exports.Common(OBus)(struct let get = get_card end) include OBus.MakeInterface(struct let name = "fr.krobot.Card" end) diff --git a/PC_Mainboard/generators/gen_dbus_exports.ml b/PC_Mainboard/generators/gen_dbus_exports.ml index f3b0531..ae94a26 100644 --- a/PC_Mainboard/generators/gen_dbus_exports.ml +++ b/PC_Mainboard/generators/gen_dbus_exports.ml @@ -70,9 +70,12 @@ let rec print path indent = function print_apply (sprintf "USB_commands.%s%s (Get.get dev)" path (Name.lid cmd.cmd_name)) cmd.cmd_args | Module(name, items) -> - printf "%smodule %s(M : Object.S)(Get : sig val get : M.t -> Card.t end)(Name : OBus_interface.Name) = struct\n" + printf "%smodule %s(M : Object.S)(Get : sig val get : M.t -> Card.t end) = struct\n" indent (Name.uid name); - printf "%s include M.MakeInterface(Name)\n" indent; + printf "%s include M.MakeInterface(struct let name = %S end)\n" indent + (match name with + | "common" -> "fr.krobot.Card.Unsafe" + | _ -> sprintf "fr.krobot.Device.%s.Unsafe" (Name.uid name)); List.iter (print (path ^ Name.uid name ^ ".") (indent ^ " ")) items; printf "%send\n" indent diff --git a/PC_Mainboard/interface/interface.ml b/PC_Mainboard/interface/interface.ml index 7c640d8..011678a 100644 --- a/PC_Mainboard/interface/interface.ml +++ b/PC_Mainboard/interface/interface.ml @@ -405,7 +405,7 @@ let interface = [ (); ]); - Module("motor", [ + Module("motors", [ enum ~name:"motor" ~typ:uint8 hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 18:17:50
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 4559f9bbbab6518f243fd21f6e406354ac8705ec (commit) from e4578a9f84417da74eafeb2d81d2ab8079cdb6b3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4559f9bbbab6518f243fd21f6e406354ac8705ec Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 19:17:20 2010 +0100 [driver] fix forward/backward for motors ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 8c5b020..305a8d7 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -366,10 +366,10 @@ struct USB_commands.Motor.traj_stop dev.card `Both mode let _set_velocities dev (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = - let direction_l, velocity_l = if velocity_l < 0 then (`Backward, -velocity_l) else (`Forward, velocity_l) in - let direction_r, velocity_r = if velocity_r < 0 then (`Forward, -velocity_r) else (`Backward, velocity_r) in + let fake_direction_l, direction_l, velocity_l = if velocity_l < 0 then (`Backward, `Backward, -velocity_l) else (`Forward, `Forward, velocity_l) in + let fake_direction_r, direction_r, velocity_r = if velocity_r < 0 then (`Forward, `Backward, -velocity_r) else (`Backward, `Forward, velocity_r) in let date = Unix.gettimeofday () in - if ((direction_l = `Forward || direction_r = `Backward) && date < dev.inhibit_forward_until) + if ((direction_l = `Forward || direction_r = `Forward) && date < dev.inhibit_forward_until) || ((direction_l = `Backward || direction_r = `Backward) && date < dev.inhibit_backward_until) then fail (Failure "inhibited move") else begin @@ -381,14 +381,14 @@ struct { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }); lwt () = if acceleration_l <> settings_l.acceleration then - USB_commands.Motor.traj_new_velocity dev.card `Left velocity_l acceleration_l direction_l + USB_commands.Motor.traj_new_velocity dev.card `Left velocity_l acceleration_l fake_direction_l else - USB_commands.Motor.traj_change_velocity dev.card `Left velocity_l direction_l + USB_commands.Motor.traj_change_velocity dev.card `Left velocity_l fake_direction_l and () = if acceleration_r <> settings_r.acceleration then - USB_commands.Motor.traj_new_velocity dev.card `Right velocity_r acceleration_r direction_r + USB_commands.Motor.traj_new_velocity dev.card `Right velocity_r acceleration_r fake_direction_r else - USB_commands.Motor.traj_change_velocity dev.card `Right velocity_r direction_r + USB_commands.Motor.traj_change_velocity dev.card `Right velocity_r fake_direction_r in USB_commands.Motor.traj_start dev.card `Both end hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-02-23 18:07:10
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via e4578a9f84417da74eafeb2d81d2ab8079cdb6b3 (commit) from f3530f39db8f3f91c4e699cdb2b62dc4deecbd23 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e4578a9f84417da74eafeb2d81d2ab8079cdb6b3 Author: Jérémie Dimino <je...@di...> Date: Tue Feb 23 19:06:01 2010 +0100 [driver] do not reset the state to Static when already in manual mode ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index 7a678d6..8c5b020 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -373,9 +373,9 @@ struct || ((direction_l = `Backward || direction_r = `Backward) && date < dev.inhibit_backward_until) then fail (Failure "inhibited move") else begin - if velocity_l = 0 && velocity_r = 0 then + if velocity_l = 0 && velocity_r = 0 then begin stop_motors dev `Smooth - else begin + end else begin dev.state <- Manual(Lwt_unix.sleep duration >> stop_motors dev `Smooth, { velocity = velocity_l; acceleration = acceleration_l; direction = direction_l }, { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r }); @@ -400,7 +400,6 @@ struct fail (Failure "currently in trajectory mode") | Manual(stopper, left, right) -> cancel stopper; - dev.state <- Static; _set_velocities dev (left, right) velocities accelerations duration | Static -> let static = { velocity = 0; acceleration = 0; direction = `Forward } in hooks/post-receive -- krobot |