/branches/V0.91L_ACC-HH_MartinR/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/V0.91L_ACC-HH_MartinR/GPS.c |
---|
0,0 → 1,16 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) Holger Buss, Ingo Busker |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100% |
/branches/V0.91L_ACC-HH_MartinR/Hex-Files/Flight-Ctrl_MEGA1284p_V0_91L_SVN683.hex |
---|
0,0 → 1,5075 |
:100000000C94AA090C94F9090C94F9090C94F909B7 |
:100010000C94F9090C94F9090C94F9090C94F90958 |
:100020000C94F9090C94391D0C94F9090C94F909F4 |
:100030000C94DA380C94F9090C94F9090C94F90928 |
:100040000C94F9090C94F9090C946D190C94F909A4 |
:100050000C94CB0F0C94F9090C94950F0C94F9099E |
:100060000C9429200C94F9090C9450340C94F9093F |
:100070000C942C9A0C94F9090C9423900C94F90983 |
:100080000C94F9090C94F9090C94F90950205520A5 |
:100090005A2063207A209120A120B120EC207B23DC |
:1000A000912008221922482266228322DD22382349 |
:1000B0000A26CD267327EA272228C528D42A352BDD |
:1000C000AF2BE02B382C662C932CF62C402D8A2D50 |
:1000D000832E6F34A334E63456356E35AF3566362D |
:1000E0002D372D372D372D372D372D372D372D37F0 |
:1000F0002D372D372D37E236E436E9360137033711 |
:100100005F715072D5720072277355739C712F7294 |
:10011000C1816582EA824C83A08309845A8B8A84D8 |
:10012000BC84BC84BC84BC84BC84BC84BC84BC84CF |
:10013000BC84EA846585F6851B865E86B686418723 |
:100140002A8891889188918891889188918891884E |
:1001500091889188C988E7880C896889A489088A68 |
:10016000358AD58A5A8B358B358B358B358B358BCC |
:10017000358B358B358B6A986D986D986D98769820 |
:1001800079987C988E988B980A0D3D3D3D3D3D3D7C |
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F |
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D000A0D1F |
:1001B000426174743A002025642043656C6C73209E |
:1001C00000204C6F77207761726E696E673A202548 |
:1001D000642E2564000A0D466F756E6420424C2D16 |
:1001E0004374726C3A20002564000A0D0A0D212127 |
:1001F000204D495353494E4720424C2D4354524CB5 |
:100200003A202564202121000A0D43616C69627245 |
:100210006174696E6720707265737375726520739F |
:10022000656E736F722E2E004F4B0A0D000A0D463D |
:100230006C696768742D74696D65202575206D691A |
:100240006E20546F74616C3A2575206D696E0041A3 |
:100250006E676C654E69636B202020202020204152 |
:100260006E676C65526F6C6C20202020202020412E |
:1002700063634E69636B20202020202020202041D2 |
:100280006363526F6C6C2020202020202020205996 |
:1002900061774779726F2020202020202020204184 |
:1002A0006C746974756465205B302E316D5D20411E |
:1002B00063635A2020202020202020202020204757 |
:1002C0006173202020202020202020202020204377 |
:1002D0006F6D706173732056616C756520202056B8 |
:1002E0006F6C74616765205B302E31565D20205243 |
:1002F00065636569766572204C6576656C2020477C |
:1003000079726F20436F6D70617373202020204DD0 |
:100310006F746F7220312020202020202020204D5B |
:100320006F746F7220322020202020202020204D4A |
:100330006F746F7220332020202020202020204D39 |
:100340006F746F7220342020202020202020203144 |
:100350003620202020202020202020202020203176 |
:100360003720202020202020202020202020203165 |
:100370003820202020202020202020202020203154 |
:100380003920202020202020202020202020205321 |
:100390006572766F202020202020202020202048F9 |
:1003A0006F76657267617320202020202020204313 |
:1003B000757272656E74205B302E31415D20204372 |
:1003C00061706163697479205B6D41685D202048CC |
:1003D000656967687420536574706F696E74203244 |
:1003E00035202020202020202020202020202032E6 |
:1003F00036202020202020202020202020202043C4 |
:100400006F6D7061737320536574706F696E74499A |
:1004100032432D4572726F7220202020202020420E |
:100420004C204C696D69742020202020202020471A |
:1004300050535F4E69636B202020202020202047EE |
:1004400050535F526F6C6C202020202020202021F0 |
:10045000212120494E434F4D50415449424C4520A3 |
:10046000212121002A002E000A0D20444143206F43 |
:100470007220493243204552524F52212043686531 |
:10048000636B204932432C2033567265662C20441E |
:10049000414320616E6420424C2D4374726C005BBA |
:1004A00025695D005B25695D002B204D696B726FCE |
:1004B0004B6F70746572202B0048573A5625642E96 |
:1004C00025642053573A25642E256425632056342D |
:1004D0000053657474696E673A2564202573004D76 |
:1004E00069786572204572726F72210045525225FB |
:1004F00032643A00486172647761726520457272B5 |
:100500006F7220313A2564202121004D697373698F |
:100510006E6720424C2D4374726C3A256421210091 |
:10052000493243204552524F5221212100486569EA |
:100530006768743A202025356900536574706F69C7 |
:100540006E743A2535690050726573737572653A39 |
:10055000253569004F66667365743A202025356934 |
:10056000002841290048656967687420636F6E74CC |
:10057000726F6C0044495341424C454400616374BE |
:100580002E2062656172696E67004E69636B3A2066 |
:10059000202020202025356900526F6C6C3A2020E5 |
:1005A0002020202025356900436F6D706173733AF8 |
:1005B000202020253569004B25693A253469202003 |
:1005C0004B25693A25346920004E693A2534692063 |
:1005D00020526F3A253469200047733A2534692048 |
:1005E0002047693A253469200050313A2534692082 |
:1005F0002050323A253469200050333A253469209E |
:100600002050343A25346920004779726F202D201C |
:1006100053656E736F72004E69636B2534692028D1 |
:100620002533692E25692900526F6C6C25346920A9 |
:10063000282533692E2569290047696572253469A3 |
:10064000202825336929004E69636B2025346920F1 |
:10065000282533692E25782900526F6C6C202534AB |
:100660006920282533692E257829005961772020B3 |
:10067000253469202825336929004E69636B2025BC |
:100680003469202825336929282533692900526FC8 |
:100690006C6C202534692028253369292825336985 |
:1006A00029005961772020253469202825336929BC |
:1006B000282533692900414343202D2053656E735B |
:1006C0006F72004E69636B202534692028253369D9 |
:1006D0002900526F6C6C2025346920282533692944 |
:1006E000005A20202020253469202825336929003C |
:1006F000566F6C746167653A2020202533692E257A |
:100700003169560043757272656E743A2020202557 |
:1007100033692E2531694100506F7765723A202088 |
:10072000202020253469570044697363686172672B |
:10073000653A202535696D416800526563656976C3 |
:1007400065720052432D5175616C6974793A2025A8 |
:1007500034690052432D4368616E6E656C733A25AF |
:10076000346900436F6D70617373004D61676E652E |
:10077000743A202020253569004779726F3A20208D |
:1007800020202025356900536574706F696E743AB6 |
:100790002025356900506F746925693A202025337A |
:1007A0006900506F746925693A2020253369005328 |
:1007B0006572766F202000536574706F696E7420C7 |
:1007C0002025336900506F736974696F6E3A202574 |
:1007D00033690052616E67653A2533692D253369A7 |
:1007E00000424C2D4374726C204572726F727320FC |
:1007F00000253364202533642025336420253364A9 |
:100800002000424C2054656D70657261747572658C |
:100810000025336420253364202533642025336488 |
:100820002000424C2D4374726C20666F756E6420FC |
:100830000020256320202025632020202563202000 |
:1008400020256320002025632020202563202020F0 |
:100850002563202020256320002025632020202DD3 |
:100860002020202D2020202D20003130003131008B |
:10087000313200466C696768742D54696D652020BB |
:1008800000546F74616C3A2535756D696E00416373 |
:10089000743A20202535756D696E00287265736580 |
:1008A0007429000A0D2D2D3E204861726477617213 |
:1008B000652056657273696F6E20427974652043B6 |
:1008C00068616E676564203C2D2D000A0D47656EDA |
:1008D00065726174696E672064656661756C742009 |
:1008E000506172616D657465722053657420256472 |
:1008F000000A0D5573696E6720506172616D6574F1 |
:10090000657220536574202564000A0D47656E6585 |
:10091000726174696E672064656661756C74204DE0 |
:1009200069786572205461626C65000A0D4D6978C2 |
:1009300065722D436F6E6669673A202725732720FD |
:10094000282575204D6F746F727329000A0D41437D |
:1009500043206E6F742063616C69627261746564B8 |
:10096000210D0A0000008F001E01AD013B02CA02EA |
:100970005803E603740402058F051B06A706330718 |
:10098000BE074808D2085B09E3096B0AF20A780B34 |
:10099000FD0B810C040D860D070E870E060F840FCC |
:1009A00000107B10F5106E11E5115B12CF1242138F |
:1009B000B31323149214FE146A15D3153B16A11613 |
:1009C00005176717C81727188318DE1837198E19E7 |
:1009D000E319361A871AD61A231B6E1BB61BFD1B8A |
:1009E000411C831CC31C001D3C1D751DAB1DE01D5F |
:1009F000121E421E6F1E9A1EC31EE91E0D1F2E1FC1 |
:100A00004D1F691F841F9B1FB01FC31FD31FE11FF2 |
:100A1000EC1FF51FFB1FFF1F002004010000A7783B |
:100A200000020101ED7901030202817A020403034D |
:100A3000297B03000404DE7A2532692E25316956AC |
:100A400000253364256320253033646D256300530E |
:100A50007461747573004552524F523A20253264C6 |
:100A6000200053657425643A2573202000253469DD |
:100A7000202532693A25303269002534696D2563B5 |
:100A80000025336920253369202533692025336902 |
:100A900000253369202533692025336920253369F2 |
:100AA0000054656D706572617475726573202020E5 |
:100AB00020002563432020202020002532692E2598 |
:100AC000316956202533692E253169410025346965 |
:100AD00057202536696D4168004D61676E65743A2F |
:100AE000253369252520253369256300496E636C0C |
:100AF000692E3A2533692563202825692920002598 |
:100B000032756D2F73205361743A256420002020C4 |
:100B10003344004E6F4678004447505300486F6D91 |
:100B2000653A2533646D20253364256320256300F1 |
:100B30004E6F204E6176694374726C21000000058F |
:100B4000000500040106010800060102000400047B |
:100B50000007000700070007000700070007000361 |
:100B6000010301050017010F01060009010A01191F |
:100B7000010501050119011A010F0100004E6F2046 |
:100B80004572726F722020202020202020004E6F9E |
:100B90007420636F6D70617469626C652020004D14 |
:100BA0004B334D6167206E6F7420636F6D70610011 |
:100BB0004E6F20464320636F6D6D756E696361747F |
:100BC00000436F6D7061737320636F6D6D756E6937 |
:100BD000630047505320636F6D6D756E6963617478 |
:100BE000696F00636F6D706173732076616C7565FA |
:100BF000202020005243205369676E616C206C6F87 |
:100C00007374202000464320737069207278206539 |
:100C100072726F7220004E6F204E4320636F6D6DB5 |
:100C2000756E69636174004643204E69636B2047AB |
:100C300079726F2020202000464320526F6C6C2078 |
:100C40004779726F20202020004643205961772089 |
:100C50004779726F2020202020004643204E696390 |
:100C60006B20414343202020202000464320526F28 |
:100C70006C6C204143432020202020004643205A12 |
:100C80002D41434320202020202020200050726549 |
:100C900073737572652073656E736F7220004932CD |
:100CA000432046432D3E424C2D4374726C2000423B |
:100CB0006C204D697373696E67202020202020000E |
:100CC0004D69786572204572726F72202020202055 |
:100CD000004361726566726565204572726F7220AD |
:100CE000200047505320466978206C6F7374202091 |
:100CF0002020004D61676E6574204572726F72200E |
:100D0000202020004D6F746F7220726573746172C1 |
:100D10007420202000424C204C696D697461746914 |
:100D20006F6E202020004750532052616E6765206F |
:100D3000202020202020004E6F2053442D4361723C |
:100D4000642020202020200053442D4C6F676769C9 |
:100D50006E67206572726F7200466C79696E6720EB |
:100D600072616E676521202020004D617820416C02 |
:100D700074697475646521202020004E6F204750EF |
:100D8000532066697820202020202000636F6D703A |
:100D9000617373206E6F742063616C2E00536574F1 |
:100DA00020203A00202121204C69506F20766F6C62 |
:100DB0007461676520212120200020202020204D03 |
:100DC000696B726F4B6F7074657220202020200059 |
:100DD0002020202020202020202020202020202013 |
:100DE00020202020200020202532692E2531695620 |
:100DF00020200020202532692E2531695620200030 |
:100E0000414C543A2534696D20256300414C543AD5 |
:100E10002534696D202000414C543A2D2D2D2D2074 |
:100E20000020202532693A25303269202000202018 |
:100E30002532693A253032692020004449523A204F |
:100E400025336425630043002000202025356920D8 |
:100E500020002020253569202000493A2532692EBE |
:100E60002531694120003A003A003A002D2D2D2D00 |
:100E70002D2D2D2D2D2B2D2D2D2D2D2D2D2D2D2DA4 |
:100E80002D002D2D2D2D2D2D2D2D2D2D2D2D2D2DBF |
:100E90002D2D2D2D2D2D2D003A005341543A253264 |
:100EA000642000444953543A2533646D00442000C3 |
:100EB0003344002121004D41473A25337525252033 |
:100EC00000484D3A253364256320256300696E632D |
:100ED0006C3A2532642563282532692900202020B8 |
:100EE000202532756D2F733A2020484D3A25336402 |
:100EF0002563202563004552523A20253264202183 |
:100F0000004552523A20002121204C69506F207632 |
:100F10006F6C7461676520212100207777772E4DF3 |
:100F2000696B726F4B6F707465722E646520200060 |
:100F3000202532693A2530326920202532692E2554 |
:100F4000316956202534696D416800202532693A9F |
:100F50002530326920202532692E25316956202519 |
:100F600034696D4168004449523A25336425630071 |
:100F7000414C543A2534696D00414C543A2534694A |
:100F80006D00414C543A2D2D2D2D20002563004835 |
:100F90004D3A25336425632020444953543A253380 |
:100FA000646D202563005057523A2532692E253151 |
:100FB0006941202825695729200043460020200048 |
:100FC0004750533A2532756D2F73205341543A25BB |
:100FD0006420002020334420004E4F4649580044EE |
:100FE00047505320002020204E6F204E61766943E9 |
:100FF00074726C20202020202020002532692E25AC |
:1010000069202532692E2569202532692E2569201F |
:101010002532692E25694100253369202533692051 |
:1010200025336920253369256343002532692E2540 |
:1010300069202532692E256941002532692E2569EE |
:10104000202532692E2569202532692E2569202523 |
:1010500032692E25694100253369202533692563CE |
:101060004320202020202020200025336920253304 |
:101070006920253369202533692563430045525291 |
:101080003A202532642021004552523A2000212185 |
:10109000204C69506F20766F6C7461676520212148 |
:1010A00000207777772E4D696B726F4B6F70746588 |
:1010B000722E646520200053657474696E673A254A |
:1010C0007520257320004D696E3A2532692E253131 |
:1010D00069562025732000414C543A00504F544922 |
:1010E0003A2533752000284F4E29202000284F46EE |
:1010F000462920004C494D495400564152494F0061 |
:1011000044495341424C45440043463A0044495304 |
:1011100041424C45440020284F4E29200020284FB2 |
:1011200046462900205445414348004750533A0061 |
:1011300044495341424C4544002846524545290004 |
:1011400028484F4D45290028414944292000284876 |
:101150004F4C4429002046533A257573656B200097 |
:10116000484F4D4520414C543A0025756D00484F7D |
:101170004C4420004E693A25346920526F3A253498 |
:101180006920433A2533690047733A253469205969 |
:10119000613A253469200050313A253469205032B3 |
:1011A0003A25346920333A2533690050343A2534DE |
:1011B000692050353A25346920363A253369004391 |
:1011C0004F55504C494E47204F46462120004C4F2A |
:1011D0004F50494E472120004848212000434F4DA1 |
:1011E00050415353204F4646212000004F5051524A |
:1011F000535453565748005859005A554546474886 |
:10120000410049424A4A000000000000000000007E |
:1012100000444C4D00000000004E0000004B004315 |
:101220000A0D7777772E4D696B726F4B6F7074650F |
:10123000722E646520286329204869537973746588 |
:101240006D7320476D6248000A0D746865207573E0 |
:1012500065206F66207468697320736F66747761A8 |
:101260007265206973206F6E6C79207065726D698C |
:1012700074746564200A0D6F6E206F726967696E01 |
:10128000616C204D696B726F4B6F707465722D4885 |
:1012900061726477617265005573657200486F54BE |
:1012A00054205634004143542044534C004A657442 |
:1012B00069005370656B7472756D0050504D000A73 |
:1012C0000D52656365697665723A2000532E42754A |
:1012D0007300756E6B6E6F776E2E205573696E6737 |
:1012E0002050504D2E2E2E006E6F7420737570702E |
:1012F0006F727465642062792068617264776172CC |
:101300006521000A0D466C69676874436F6E7472DC |
:101310006F6C0A0D48617264776172653A25642EBC |
:1013200025640A0D536F6674776172653A562564B9 |
:101330002E2564256320000A0D202D204C494220D3 |
:101340004E4F5420434F4D50415449424C4520216B |
:101350002121210011241FBECFEFD0E4DEBFCDBF7D |
:1013600012E0A0E0B1E0E8E2FBE301E00BBF02C065 |
:1013700007900D92AE3DB107D9F71CE0AEEDB2E09B |
:1013800001C01D92A13AB107E1F77AEAE2E0F0E08C |
:1013900081E280935700D4907E010894E11CF11CF7 |
:1013A00020EF37EF41E050E087016FE0DA01C9013B |
:1013B0002F5F3F4F4F4F5F4FABBFFC018791F8014D |
:1013C00081938F01615067FFF1CFF7016EE081914A |
:1013D00078277095615067FFFACF8889781729F0D0 |
:1013E000F7E9DF1611F40000FECF0E94C50A0C9445 |
:1013F000939D0C94000088E891E09F938F9384E480 |
:1014000096E19F938F93E0918805F0918905099566 |
:101410000F900F900F900F90089580912D08E82F56 |
:10142000FF27EE0FFF1FEE59F64F808191818D5EF1 |
:101430009F4F14F010920301808191818A5B9F4F2E |
:10144000CCF4809103018823A9F481E08093030107 |
:101450008091BC058F5F8093BC05853038F088EEA5 |
:1014600093E09093140380931303089566E970E06A |
:101470000E94483C08951F93CF93DF93182F882331 |
:1014800089F08EEA91E09F938F9384E496E19F9395 |
:101490008F93E0918805F091890509950F900F9041 |
:1014A0000F900F9080915008823308F044C084EF71 |
:1014B00091E00E944F1AEC01112329F0CE010E9405 |
:1014C000581A8823D9F3C2E0D0E026E530E08091B5 |
:1014D0002001909121018217930730F02196255D1C |
:1014E0003F4FC730D10598F3809150089927C89F86 |
:1014F0009001C99F300DD89F300D11242093010118 |
:101500001123D9F068EC70E08C2F0E94483CDF93E7 |
:10151000CF9386EB91E09F938F9384E496E19F9322 |
:101520008F93E0918805F091890509958DB79EB755 |
:1015300006968DBF02C080930101112311F18091A5 |
:1015400001016AE00E94E69C892F99279F938F935F |
:10155000809101010E94E69C99279F938F9381ECD3 |
:1015600091E09F938F9384E496E19F938F93E09112 |
:101570008805F091890509952DB73EB7285F3F4F43 |
:101580002DBFDF91CF911F910895CFEFD0E4DEBF43 |
:10159000CDBF88249924C1E07C2E14B815B88AE008 |
:1015A0008AB98FE58BB9B7EEEB2EB3E0FB2E2EECAC |
:1015B0003FEFE20EF31EF7FEFACF6624199B08C038 |
:1015C0004C9B04C085E18093020108C086E101C004 |
:1015D00087E18093020181E08093F90381E887B974 |
:1015E0003E9A8FEF88B98BE184B981E085B9469A3C |
:1015F00084B7877F84BF809160008861809360009A |
:101600001092600084EC99E090931403809313038C |
:1016100010924704109246041092670910926609CE |
:10162000109249041092480410924B0410924A04FC |
:1016300020910201243128F084EC94E0A0E0B0E095 |
:1016400004C08BE095E0A0E0B0E080933C01909373 |
:101650003D01A0933E01B0933F012A3011F02431A7 |
:1016600010F0289801C0289A2C3010F0273111F47E |
:10167000299A01C029980E94B81A0E94891A0E94CA |
:101680004C160E94A1380E94BA1E81E00E940434C8 |
:101690000E9405700E94217C83E00E94E298809164 |
:1016A00002018C3010F0873111F4299A01C0299879 |
:1016B00078940E94EB3280915C03826080935C039B |
:1016C00010925F030E94154884EF91E00E944F1A28 |
:1016D0007C0180915C0380FD05C0C7010E94581AFF |
:1016E0008823B9F385ED91E09F938F93A4E4AA2E0C |
:1016F000A6E1BA2EBF92AF92E0918805F0918905DC |
:10170000099580EA9FE00E944F1A7C01C0E0D0E07A |
:101710000F900F900F900F9004E019E0F8EBCF2E90 |
:10172000F8E0DF2E0E94154880915C0380FD05C023 |
:10173000C7010E94581A8823B9F3F6018081181650 |
:10174000ACF40BC00E94154880915C0380FD05C07D |
:10175000C7010E94581A8823B9F3C7010E94581A7A |
:10176000882321F4F8018081882364F7F8018081BF |
:1017700087FF19C02196DF93CF93219787EE91E0E1 |
:101780009F938F93BF92AF92E0918805F091890566 |
:1017900009958091DF028F5F8093DF022DB73EB7FE |
:1017A0002A5F3F4F2DBF219684E090E0C80ED91EDE |
:1017B000085F1F4FCC30D10508F4B4CFC0E0D0E0B3 |
:1017C00001E019E0E8EBEE2EE8E0FE2EF80183815F |
:1017D00087FD1DC0F70180811816CCF42196DF9398 |
:1017E000CF9321978AEE91E09F938F9384E496E1C3 |
:1017F0009F938F93E0918805F0918905099582E088 |
:10180000809311032DB73EB72A5F3F4F2DBFF801DC |
:10181000838180788383219624E030E0E20EF31EFA |
:10182000085F1F4FCC30D10588F20E94FB099091D0 |
:101830002B088091DF02981728F48091A20580611F |
:101840008093A20588E092E09F938F93C4E4D6E151 |
:10185000DF93CF93E0918805F0918905099588EE93 |
:1018600093E00E944F1A7C010E94C01E0F900F90BF |
:101870000F900F90C7010E94581A8823D9F388E26D |
:1018800092E09F938F93DF93CF93E0918805F0913F |
:101890008905099580E00E942C3D809102010F90FE |
:1018A0000F900F900F908A3011F0843110F028982B |
:1018B00001C0289A80ED97E090931403809313035E |
:1018C00085E58093BE058EE090E00E940B3199275C |
:1018D000182F00278FE090E00E940B31080F111D98 |
:1018E0001093E5020093E4028AE090E00E940B313D |
:1018F0009927182F00278BE090E00E940B31080FEA |
:10190000111D1093E3020093E2020F5F1F4F39F0A5 |
:101910008091E4029091E5028F5F9F4F41F4109215 |
:10192000E5021092E4021092E3021092E20280912A |
:10193000E2029091E3029F938F938091E402909151 |
:10194000E5029F938F938DE292E09F938F93DF93B5 |
:10195000CF93E0918805F091890509950E947C2537 |
:1019600088E893E19093370180933601C1E0C093FA |
:10197000BD058C2F0E943B0A809153080E942E982F |
:101980000E94FB0980ED97E00E944F1A7C018AEFCC |
:1019900090E00E944F1A83E0809385071092DE0248 |
:1019A00080919C082DB73EB7285F3F4F2DBF84FF25 |
:1019B00002C0C093E60212BC11BC8091E8028823E9 |
:1019C00011F04798FECF80911703882309F49EC237 |
:1019D00080911201882309F499C210921703809113 |
:1019E000BC05882319F00E940D0A02C00E949C4B7E |
:1019F0000E941548209102012A3011F0243110F084 |
:101A0000289801C0289A80913A04882331F0809167 |
:101A10003A04815080933A040EC080916F00806236 |
:101A200080936F0010926309109262098091A20561 |
:101A300088608093A20580913601909137010197CB |
:101A40009093370180933601809136019091370150 |
:101A5000892B21F080915D038823C9F180913601A3 |
:101A600090913701892BD9F40E942E3485E090E0C3 |
:101A700090933701809336018091BF079091C00702 |
:101A800001969093C0078093BF078091A205816063 |
:101A90008093A2058091860782608093860780915B |
:101AA0000A0190910B018F5F9F4FC1F4809139041F |
:101AB0008823A1F088EA91E690931403809313039E |
:101AC00080E890E090930B0180930A0107C02A30D0 |
:101AD00011F0243110F0289801C0289A0E94AF9983 |
:101AE00080911703882309F00FC280915505882340 |
:101AF00019F00E94DA8B08C280911001882311F03E |
:101B00000E94111B0E9495160E941B12C7010E9481 |
:101B1000581A882309F4F4C184E190E0E80EF91E14 |
:101B20000E94CF1A80915308863019F40E94858153 |
:101B300004C0843011F40E94AA8C8091F903882398 |
:101B400031F18091CC079091CD078C52914074F087 |
:101B5000809195079091960780509240C4F48091AF |
:101B6000CC079091CD07835593408CF0639432E37A |
:101B7000361570F480913904882331F08091A105E5 |
:101B800080628093A10504C08093250401C066246F |
:101B900080915D03882349F08091A2058260809343 |
:101BA000A2058091860782600FC0809113039091F7 |
:101BB0001403892B59F480913601909137010797CE |
:101BC00028F0809186078D7F809386078091E602BA |
:101BD000882361F080913A04873940F01092E60240 |
:101BE00088E893E190931403809313038091050197 |
:101BF000882321F08150809305012EC08093C80571 |
:101C000010920D0410920C0410920B0410920A040E |
:101C1000109209041092080480913A048823E1F498 |
:101C200080910A0190910B018F5F9F4FA9F4209141 |
:101C3000E602223089F088E99AE3909314038093B6 |
:101C4000130380E09CE090930B0180930A01222310 |
:101C500019F082E08093E60280919E01893C70F049 |
:101C6000815080939E018091A2058B7F8093A20575 |
:101C70008091A50581608093A50551C08091680A77 |
:101C80008823F9F08091A20584608093A20589E001 |
:101C90008093180580910A0190910B018F5F9F4FEF |
:101CA00081F480913904882361F088E99AE3909364 |
:101CB00014038093130380E098EA90930B018093C0 |
:101CC0000A0110920A051092090510920805109257 |
:101CD00007051092060510925B0A8FEF8093D00AD9 |
:101CE00010929A0A1092990A10929C0A10929B0ADA |
:101CF0008FEF9FEF9093980A8093970A1092290490 |
:101D000010922A0410922B0410922C0410922D048D |
:101D10008091A5058E7F8093A50510929E018091EC |
:101D20000101282F332780912001909121018217F2 |
:101D30009307CCF480910104806280930104809128 |
:101D40000A0190910B018F5F9F4FC1F480E797E1EB |
:101D5000909314038093130380E093E090930B011E |
:101D600080930A010BC08091130390911403892B77 |
:101D700029F4809101048F7D8093010483E0809396 |
:101D8000120312BC11BC8091E7028F5F8093E702BF |
:101D9000813309F06CC01092E702809142058823DC |
:101DA00019F08150809342058091010481FF0AC09F |
:101DB0008091E0029091E10201969093E10280937C |
:101DC000E00204C05AEA852E55E0952E8091020467 |
:101DD000909103048050944008F049C02091CE07B0 |
:101DE0003091CF074091D0075091D10780911801D1 |
:101DF00090911901A0911A01B0911B012817390780 |
:101E00004A075B0764F48091CE079091CF07A091B9 |
:101E1000D007B091D1070596A11DB11D20C020911A |
:101E2000CE073091CF074091D0075091D1078091D4 |
:101E3000180190911901A0911A01B0911B0182170C |
:101E40009307A407B5079CF48091CE079091CF0724 |
:101E5000A091D007B091D1070597A109B10980934E |
:101E6000CE079093CF07A093D007B093D1070894E3 |
:101E7000811C911C82E788168BE0980609F040C00F |
:101E8000882499242091E4023091E5022F5F3F4F8E |
:101E90003093E5022093E4028091E2029091E30204 |
:101EA00001969093E3028093E202832F9927682F93 |
:101EB0008EE090E00E9413318091E4029091E5025F |
:101EC0009070682F8FE090E00E9413318091E202C1 |
:101ED0009091E302892F9927682F8AE090E00E9471 |
:101EE00013318091E2029091E3029070682F8BE0B1 |
:101EF00090E00E94133184E190E00E944F1A7C012F |
:101F00000E944B750E94387C71107A94772029F4D6 |
:101F10000E9414758CE0782E50CD80911203882396 |
:101F200009F04BCD0E94267048CD1F920F920FB63C |
:101F30000F9211248F939F93EF93FF93809107014A |
:101F40008823E1F48091020390910303019690931A |
:101F5000030380930203FC01E755F94FE081ED3064 |
:101F600019F08C3D910539F410920303109202038D |
:101F700081E080930701E093C60004C01092030340 |
:101F800010920203FF91EF919F918F910F900FBEDE |
:101F90000F901F9018951F920F920FB60F92112459 |
:101FA0002F933F934F935F936F937F938F939F9361 |
:101FB000AF93BF93CF93EF93FF9390E08091E802AC |
:101FC000813029F48091C6008093CE00CCC08091EE |
:101FD000E802823029F48091C6008093CB05C3C00B |
:101FE0008091C6008093FA02509108035C3D10F086 |
:101FF000909309038091FA028D3009F065C08091B9 |
:102000000903823009F060C090930903852F992756 |
:1020100085539A4FFC0132974081209104033091FF |
:102020000503241B3109DC0111978C91281B310910 |
:10203000C9019F70909305038093040346E0969531 |
:1020400087954A95E1F7982F935C909306032F7339 |
:102050003070235C209307038081981729F48C91BA |
:10206000281711F491E006C090E08091F7028F5F8D |
:102070008093F702C091F902CC2309F074C0992330 |
:1020800009F471C081E08093F902580F5093F60271 |
:102090005150E52FFF27E553FA4F8DE08083809163 |
:1020A000CD05823509F05FC00E947C2588E190E073 |
:1020B0002CE00FB6F894A895809360000FBE209393 |
:1020C0006000C09311034FC020910903822F99270C |
:1020D00081309105F9F0823091051CF4892B21F0B3 |
:1020E00040C0029711F13DC08091FA02833239F469 |
:1020F0008091F902882319F481E08093090380918B |
:10210000FA028093CB0581E0809308038091FA0264 |
:10211000992722C02F5F20930903E52FFF27E5535E |
:10212000FA4F8091FA02808309C0E52FFF27E5531B |
:10213000FA4F8091FA0280835C3D20F45F5F5093F8 |
:10214000080302C0109209032091FA02809104034F |
:1021500090910503820F911D9093050380930403D2 |
:1021600002C010920903FF91EF91CF91BF91AF91FF |
:102170009F918F917F916F915F914F913F912F919F |
:102180000F900FBE0F901F901895AC01A0E0B0E02B |
:102190009D01A817B90748F4E9EAF6E08191280FF4 |
:1021A000311D1196A417B507C8F33F70FD01E7551F |
:1021B000F94FC90156E0969587955A95E1F7835CEA |
:1021C00080831196FD01E755F94F2F733070822FF0 |
:1021D000835C8083A655B94F8DE08C9310920701E4 |
:1021E0008091A9068093C6000895A0E0B0E0EBEFCF |
:1021F000F0E10C945F9D2C859D850E85BB2483E2C8 |
:102200008093A9069F599093AA062093AB0633E0CA |
:10221000E32EF12C002309F49EC0CF84D888BE01A0 |
:102220006D5E7F4FA989BA890150109709F493C058 |
:102230001097B9F0F601EB0DF11DB3949081119751 |
:1022400091F4002349F1FB016E5F7F4FDB01C080F9 |
:10225000D1806E5F7F4F0D90BC91A02DBB240150AB |
:1022600002C090E019C01097B9F0F601EB0DF11D16 |
:10227000B3944081119791F4002341F1FB016E5F0B |
:102280007F4FDB01C080D1806E5F7F4F0D90BC918E |
:10229000A02DBB24015002C040E018C01097B1F03F |
:1022A000F601EB0DF11DB3941081119781F4002319 |
:1022B00071F0FB013296DB01CD90DC90BF016E5FC7 |
:1022C0007F4FA081B181BB24015001C010E0F70114 |
:1022D000E755F94F892F86958695835C808308940E |
:1022E000E11CF11CF701E755F94F892F99278370FD |
:1022F000907024E0880F991F2A95E1F755279A01DD |
:1023000094E0369527959A95E1F7822B835C80833C |
:102310000894E11CF11CF701E755F94F4F7050701C |
:10232000440F551F440F551F812F992726E096957E |
:1023300087952A95E1F7842B835C80830894E11CC0 |
:10234000F11CF701E755F94F1F73135C10830894D4 |
:10235000E11CF11C6ACFC7010E94C510E9E00C9492 |
:102360007B9DA3E07A2F4091F6024650442309F466 |
:1023700058C0E72FFF27E553FA4F80818D537F5FC9 |
:10238000E72FFF27E553FA4F20812D537F5FE72F7B |
:10239000FF27E553FA4F30813D537F5FE72FFF273B |
:1023A000E553FA4F60816D537F5F9927880F991F1E |
:1023B000880F991F522F52955F70582B822F9927A3 |
:1023C0008F709070F4E0880F991FFA95E1F7232F32 |
:1023D00026952695282B832F992783709070E6E009 |
:1023E000880F991FEA95E1F7682B41504F3FC9F0DC |
:1023F000EA2FFF27E553FA4F5083AF5F41504F3F1D |
:1024000081F0EA2FFF27E553FA4F2083AF5F415059 |
:102410004F3F39F0EA2FFF27E553FA4F6083AF5F54 |
:10242000A5CF8EEC95E09093F5028093F402A35033 |
:10243000A093F3020895A2E0B0E0E1E2F2E10C948F |
:10244000659D8091F902882309F41AC40E94B11194 |
:102450008091CC05823609F0E6C28091CD0599279E |
:102460008037910509F4ABC081379105C4F48A36F1 |
:10247000910509F443C28B36910544F48B349105E0 |
:1024800071F18636910509F470C1CDC28D36910582 |
:1024900009F469C08E36910509F44DC0C4C2843771 |
:1024A000910541F1853791054CF48137910509F487 |
:1024B0008DC08337910509F4E0C0B5C28737910517 |
:1024C00009F4DEC1883791052CF48537910509F4AC |
:1024D0009AC1A9C28937910509F47FC1A4C2E091CC |
:1024E000F402F091F5028081918190938B018093A9 |
:1024F0008A0199C28091F602A091F402B091F5028E |
:10250000853140F080E1E6EAF5E00D9001928A9590 |
:10251000E1F70DC08D919D910D90BC91A02D809300 |
:10252000A6059093A705A093A805B093A90580EFF1 |
:102530008093F10247C0809107018823E1F38DE485 |
:1025400090E09F938F938BEA98E09F938F9381E025 |
:102550008F938F938EE48F930E94F5108DB79EB763 |
:1025600007968DBF60C2A091F402B091F5021C9154 |
:10257000113081F48DE4EBEAF8E00D9001928A9538 |
:10258000E1F70E94263219838091A2058F7E809305 |
:10259000A20501C01982809107018823E1F381E03F |
:1025A00090E09F938F93CE0101969F938F9381E04C |
:1025B0008F938F938DE48F930E94F51009C181E072 |
:1025C0008093FC028FEF809305012DC28091390426 |
:1025D000882309F028C2E091F402F091F502E0812D |
:1025E0008E2F8A508A3058F48983882311F481E031 |
:1025F00003C0863010F085E0898361E00EC08E2F25 |
:1026000084518A3070F48983882311F481E003C0F7 |
:10261000863010F085E0898360E089810E94A832CD |
:1026200012C0E983EF3F19F40E94893289838981BE |
:10263000882311F481E003C0863010F085E089839F |
:1026400089810E942931809107018823E1F38EE777 |
:1026500090E09F938F938CE298E09F938F9381E01B |
:1026600090E09F938F93CE0101969F938F9382E08A |
:102670008F9381E08F9381E539C12091F4023091ED |
:10268000F502D9018C918150853008F045C0F901DF |
:1026900081818F3509F040C0809139048823E1F5AC |
:1026A0002F5F3F4F8EE7ECE2F8E0D9010D900192E9 |
:1026B0008A95E1F7F90182910E94963180916D0827 |
:1026C0009927AA27BB27BC01CD0124EC39E040E0C3 |
:1026D00050E00E94C79CDC01CB0180938201909363 |
:1026E0008301A0938401B093850180916E0899279E |
:1026F000AA27BB27BC01CD010E94C79CDC01CB01EE |
:1027000080937E0190937F01A0938001B09381011B |
:102710000E948932898301C0198280910701882330 |
:10272000E1F381E090E09F938F93CE0101969F9318 |
:102730008F9381E08F938F9383E58F930E94F510A1 |
:102740008DB79EB707968DBF80913904882329F4F1 |
:102750006EE670E089810E94483C80E00E943B0A5E |
:10276000809153080E942E985EC18091390488237D |
:1027700009F059C1E091F402F091F502E0818E2F49 |
:102780008150853018F48E2F0E9429310E948932A1 |
:102790008983809107018823E1F381E090E09F9392 |
:1027A0008F93CE0101969F938F9381E08F938F93A8 |
:1027B00086E48F930E94F5106EE670E089810E9496 |
:1027C000483C80E00E943B0A809153080E942E986A |
:1027D000ADB7BEB71796ADBF26C119822981A091AA |
:1027E000F402B091F502E2E6F9E08D91992787FDB8 |
:1027F000909593A382A3822F8F5F8983282F32968F |
:102800008C3098F310C1E091F402F091F5028081D0 |
:102810000E94FA378A83882319F481E0898301C0F2 |
:102820001982809107018823E1F388E090E09F936B |
:102830008F9389EF98E09F938F9321E030E03F934F |
:102840002F938091F4029091F5029F938F933F9381 |
:102850002F93CE0102969F938F933F932F93CE0198 |
:10286000820F931F9F938F9384E08F9381E08F93C8 |
:1028700085E58F930E94F510EDB7FEB773963CC0C7 |
:102880008091F302893008F4CEC02091F402309197 |
:10289000F5022F5F3F4F88E0A9EFB8E0F901019002 |
:1028A0000D928A95E1F7D9018E910E9450378A8363 |
:1028B000882319F481E0898301C01982809107017E |
:1028C0008823E1F321E030E03F932F93CE0102967D |
:1028D0009F938F933F932F93CE01820F931F9F93CC |
:1028E0008F9382E08F9381E08F9387E58F930E948F |
:1028F000F510EDB7FEB73B96EDBF95C0809139045A |
:10290000882309F090C00E94E5978983823019F0EE |
:10291000843009F088C020E430E0F8948091C10050 |
:102920008F738093C1008091C9008F738093C90019 |
:102930008091C100877E8093C1008091C900877E0D |
:102940008093C9008091C80087FF03C08091CE00AA |
:10295000F9CF8091C00087FF03C08091C600F9CFF6 |
:10296000E091F402F091F502E081E13021F482E09F |
:102970008093E8022EC0E43611F421E830E081E0D3 |
:102980008093E802832F99278093CD002093CC0079 |
:102990008091CD008093C5008091CC008093C400CD |
:1029A0008091CA008F7D8093CA008091CA008F7E7B |
:1029B0008093CA008091C9008B7F8093C900809169 |
:1029C000CA0084608093CA008091CA0082608093AC |
:1029D000CA008091CA00877F8093CA008091C2009C |
:1029E000877F8093C2008091C9008E7F8093C90049 |
:1029F0008091C10088618093C1008091C900886185 |
:102A00008093C9008091C10080688093C10080914B |
:102A1000C90080688093C90010926E0010926F0008 |
:102A20001092700078948091CD0599278436910595 |
:102A300009F4BBC085369105ACF48136910509F4E3 |
:102A40006FC0823691052CF48B34910509F45DC07A |
:102A50000FC18236910509F470C08336910509F4DF |
:102A60007FC006C18C36910509F4EDC08D36910505 |
:102A70004CF48736910509F4F8C08836910509F4BD |
:102A8000B2C0F6C08437910529F08637910509F464 |
:102A9000E8C0EEC08091F602A091F402B091F50278 |
:102AA000803140F080E1E6EAF5E00D9001928A95F0 |
:102AB000E1F70DC08D919D910D90BC91A02D80935B |
:102AC000A6059093A705A093A805B093A9058091AA |
:102AD00007018823E1F31F92809104018F9384E51D |
:102AE0008F930E94F5108AEF8093F1028FEF80930D |
:102AF000050180EA9FE00E944F1A9093EA028093BA |
:102B0000E9020F900F900F90B3C0E091F402F091A2 |
:102B1000F5028081918190938B0180938A01A8C0F6 |
:102B2000E091F402F091F5028081809306018032F9 |
:102B300098F08FE1809306010FC0A091F402B0914C |
:102B4000F5028BE0EEEBF5E00D9001928A95E1F74E |
:102B50008091C7058093C7078FEF8093050188C0D8 |
:102B60008091ED029091EE02892B89F4E091F402BC |
:102B7000F091F502E081EE2351F08AE0E89FC00178 |
:102B800011240E944F1A9093990580939805E09123 |
:102B9000F402F091F50290818AE0989FC00111241F |
:102BA0009093EE028093ED0215C08FEF80930501A4 |
:102BB000E091F402F091F50290818AE0989FC001C3 |
:102BC00011249093F0028093EF02892B19F081E099 |
:102BD0008093FE0280EA9FE00E944F1A9093EA02DF |
:102BE0008093E90245C08FEF80930501E091F402E4 |
:102BF000F091F502908197FD08C082E08093FB027E |
:102C00001092EC021092EB021AC09095809155033D |
:102C1000892B8093550391818AE0989FC0011124EC |
:102C20009093EC028093EB0284E08093FB0280EAB5 |
:102C30009FE00E944F1A9093EA028093E90281E09C |
:102C40008093FF0215C08FEF80930501E091F4029D |
:102C5000F091F50280818093560381E08093000318 |
:102C600007C081E08093FD0203C081E080930103EF |
:102C70001092F9021092F5021092F4021092F302EF |
:102C8000E3E0CE5F0C94819D982F8091C00085FF7A |
:102C9000FCCF9093C60008950F931F9388E1809313 |
:102CA000C1008091C00082608093C0008091C1000B |
:102CB00080688093C1008091C10080648093C100CE |
:102CC00000E010E00093C5008AE290E08093C40029 |
:102CD0008091EF029091F0020E944F1A90939B0511 |
:102CE00080939A058CED90E00E944F1A9093CA054C |
:102CF0008093C90510929C058BE580939D058BE020 |
:102D00008093A00580939E0510929F051092A405C4 |
:102D1000809102018093A3051093F5020093F402C1 |
:102D20001092F3021F910F910895A0E1B0E0EBE93A |
:102D3000F6E10C94629D80910701882309F4C9C2D1 |
:102D40008091E9029091EA020E94581A882361F06A |
:102D50001092EC021092EB021092F0021092EF022D |
:102D60001092EE021092ED028091EB029091EC0233 |
:102D7000892B41F08091A7069091A8060E94581ACD |
:102D8000882329F48091FF02882309F460C0809190 |
:102D90000701882309F45BC08091FB020BED17E06B |
:102DA0008430A8F00E94922580E590E09F938F9355 |
:102DB0001F930F9381E08F938F9388E48F930E94EA |
:102DC000F5102DB73EB7295F3F4F2DBF34C010928D |
:102DD00057038FE494E09F938F9385E895E29F9348 |
:102DE0008F93E0918805F0918905099584E190E041 |
:102DF0009F938F931F930F9381E090E09F938F9306 |
:102E00008BEF92E09F938F9382E08F9381E08F937B |
:102E100088E48F930E94F5108091FB02982F8F5FBA |
:102E20008093FB022DB73EB7215F3F4F2DBF9430FB |
:102E300010F01092FB028091EB029091EC020E9444 |
:102E40004F1A9093A8068093A7061092FF028091D4 |
:102E50000003882351F180910701882331F10E94FA |
:102E6000922580E590E09F938F938BED97E09F9361 |
:102E70008F9321E030E03F932F9382E291E09F9384 |
:102E80008F933F932F9386E593E09F938F9383E0F7 |
:102E90008F9381E08F938CE48F930E94F5101092B2 |
:102EA00000038DB79EB70F968DBF8091FD028823DA |
:102EB000D1F0809107018823B1F08AE090E09F93E0 |
:102EC0008F938CE995E09F938F9381E08F938F93FD |
:102ED00086E58F930E94F5101092FD022DB73EB744 |
:102EE000295F3F4F2DBF809101038823D9F0809146 |
:102EF00007018823B9F08BE090E09F938F938EEBCE |
:102F000095E09F938F9381E08F93809104018F933D |
:102F100087E48F930E94F510109201038DB79EB73E |
:102F200007968DBF8091EF029091F002892B41F0BE |
:102F300080919A0590919B050E94581A882321F44C |
:102F40008091FE02882341F180910701882321F1BD |
:102F50000E942A3B82E490E09F938F9385E897E05C |
:102F60009F938F9381E08F938F9384E48F930E943C |
:102F7000F5101092FE022DB73EB7295F3F4F2DBFCF |
:102F80008091EF029091F002009731F00E944F1A69 |
:102F900090939B0580939A058091ED029091EE02AB |
:102FA000892B09F4B7C080919805909199050E94EA |
:102FB000581A882309F4AEC080910701882309F4C8 |
:102FC000A9C0809148089927880F991F880F991FD9 |
:102FD0007C010027F7FC0095102F809194049091BC |
:102FE0009504A0919604B0919704BC01CD01A8016D |
:102FF00097010E943B9D30938B0520938A05809119 |
:103000008C0490918D04A0918E04B0918F04BC012A |
:10301000CD01A80197010E943B9D30938D0520931F |
:103020008C052091500A3091510A4091520A5091DA |
:10303000530ADA01C90163E0880F991FAA1FBB1F59 |
:103040006A95D1F7820F931FA41FB51F820F931F9C |
:10305000A41FB51F20913C0130913D0140913E01DC |
:1030600050913F01BC01CD010E943B9D30938F05E3 |
:1030700020938E0580915C0490915D04A0915E0484 |
:10308000B0915F0459E0B595A795979587955A95A6 |
:10309000D1F7809390058091580490915904A091A4 |
:1030A0005A04B0915B0449E0B595A795979587952B |
:1030B0004A95D1F7809391058091640490916504BD |
:1030C000A0916604B091670439E0B595A7959795EE |
:1030D00087953A95D1F7809392058EE090E09F9383 |
:1030E0008F938AE895E09F938F9381E08F938F93DE |
:1030F00083E48F930E94F5108091ED029091EE028F |
:103100000E944F1A90939905809398058DB79EB7AA |
:1031100007968DBF809106018F3F79F1992724E0B2 |
:10312000880F991F2A95E1F7815B9D4F40E150E0A0 |
:10313000BC01CE0101960E94119B80E190E09F931B |
:103140008F93CE0101969F938F9381E090E09F93A0 |
:103150008F9386E091E09F938F9382E08F9381E03D |
:103160008F9381E48F930E94F5108FEF8093060177 |
:103170002DB73EB7255F3F4F2DBF8091C7078823EE |
:10318000C9F0809107018823A9F081E090E09F9326 |
:103190008F9387EC97E09F938F9381E08F938F932A |
:1031A00082E48F930E94F5101092C7078DB79EB7E7 |
:1031B00007968DBF8091FC028823D1F08091070192 |
:1031C0008823B1F086E490E09F938F9382E699E0A4 |
:1031D0009F938F9381E08F938F9380E58F930E94CD |
:1031E000F5101092FC022DB73EB7295F3F4F2DBF5F |
:1031F0008091C9059091CA050E94581A882309F444 |
:1032000068C080910701882309F463C08091480851 |
:103210009927880F991F880F991F7C010027F7FCB9 |
:103220000095102F8091940490919504A09196049C |
:10323000B0919704BC01CD01A80197010E943B9D6C |
:103240003093B7052093B60580918C0490918D043E |
:10325000A0918E04B0918F04BC01CD01A80197010B |
:103260000E943B9D3093B9052093B80580911604C8 |
:103270008093BA05809115048093BB0588E090E0A7 |
:103280009F938F9386EB95E09F938F9381E08F932D |
:1032900083E08F938BE68F930E94F5108091BC059D |
:1032A0002DB73EB7295F3F4F2DBF853018F086E020 |
:1032B0008093BC0580919E01882319F483E690E0F9 |
:1032C00002C087EE93E00E944F1A9093CA05809344 |
:1032D000C905E6E0C05F0C947E9D1F920F920FB669 |
:1032E0000F9211242F933F935F936F937F938F934C |
:1032F0009F93AF93BF93EF93FF9380911203882323 |
:1033000029F08091120381508093120380912A0545 |
:10331000882319F0815080932A0580911A038150E7 |
:1033200080931A038F3F09F04BC089E080931A0302 |
:10333000809118039091190301969093190380933B |
:103340001803809111018F5F817080931101882390 |
:1033500019F481E080931703349903C081E08093CE |
:1033600010038091130390911403892B11F1809124 |
:103370001303909114030B9750F0809113039091D5 |
:1033800014030A97909314038093130304C01092BC |
:10339000140310921303809113039091140320914E |
:1033A0000A0130910B0182239323892B41F0479A24 |
:1033B00007C08FEF9FEF90930B0180930A0147980E |
:1033C00080911003882309F45AC020919E01222382 |
:1033D00009F055C08091400A83FF51C086B19927FA |
:1033E000FC01E071F07084FF13C08091150390918F |
:1033F000160301969093160380931503809115038D |
:1034000090911603895E9340D0F12093100337C04A |
:103410008091150390911603892B69F18091150312 |
:10342000909116038A56914030F580911503909142 |
:10343000160369E270E00E94F29C8091150390915E |
:103440001603860F971F90931603809315038091A0 |
:103450001503909116030B9750F0809115039091EE |
:1034600016030A9790938B0180938A0104C0F0930E |
:103470008B01E0938A011092160310921503FF91BD |
:10348000EF91BF91AF919F918F917F916F915F91DC |
:103490003F912F910F900FBE0F901F901895209184 |
:1034A000180330911903280F391FC9010196089597 |
:1034B0002091180330911903821B930B892F9927B0 |
:1034C0008695807490700895CF93DF930E944F1A71 |
:1034D000EC01CE010E94581A8823D9F3DF91CF91D5 |
:1034E0000895CF93DF930E944F1AEC0109C0809199 |
:1034F0001201882329F0909312018FEC80937A00B7 |
:10350000CE010E94581A982F882389F3DF91CF911A |
:1035100008959FB7F8945F983E9A469A8091B000BC |
:103520008F708093B0008091B00083608093B00072 |
:103530008091B1008B738093B1008091B1008B605A |
:103540008093B1001092B2008FEF8093B30080910E |
:10355000B00080688093B000809170008A7F809373 |
:103560007000809170008260809370009FBF08950A |
:103570008AE090E00E944F1A9093C9078093C80791 |
:1035800082E085BD83EA84BD17BC84EB88BD86E0FC |
:1035900086BD80916E00816080936E000895809159 |
:1035A0009B082091690182FF30C090915C088CE3F8 |
:1035B000989FB001112490915B0880E5989FA0012D |
:1035C0001124922F905897FD9D5F9595959586E0D3 |
:1035D0009802C00111242091080130910901281B93 |
:1035E000390B3093090120930801421753072CF03F |
:1035F000509309014093080108952617370784F076 |
:1036000070930901609308010895822F992736E08D |
:10361000880F991F3A95E1F790930901809308016B |
:103620000895A0E0B0E0E7E1FBE10C94619D80919A |
:103630006308E82FFF27EE5BFE4F9681D0808091D4 |
:103640001001A92FBB27A7FDB095CB2FDB2F813011 |
:1036500009F017C12091940430919504409196048B |
:1036600050919704BD01CE010E94C79C97FF04C0F2 |
:1036700061587F4F8F4F9F4F7B018C01C7E015959D |
:103680000795F794E794CA95D1F78D2D992787FD73 |
:103690009095A92FB92F20918C0430918D044091E1 |
:1036A0008E0450918F04BC01CD010E94C79C97FFEE |
:1036B00004C061587F4F8F4F9F4FB7E09595879516 |
:1036C00077956795BA95D1F7F801E701C61BD70B37 |
:1036D000E80BF90B2091110530911205C901A3E007 |
:1036E000880F991FAA95E1F7821B930BAA2797FDD4 |
:1036F000A095BA2FC81BD90BEA0BFB0B8091670171 |
:103700009927AA27BB27BC01CD019E01AF010E94CA |
:10371000C79C97FF04C061507E4F8F4F9F4FFC01A5 |
:10372000EB0179E0F595E795D795C7957A95D1F7AF |
:1037300010919B08609108017091090112FF05C06A |
:1037400070930F0160930E0118C040910E015091CB |
:103750000F0180916208282F3327CB01841B950B22 |
:10376000B9010E94069D80910E0190910F01860F74 |
:10377000971F90930F0180930E0110FF14C080914A |
:103780000E0190910F0197FD0F9664E09595879536 |
:103790006A95E1F7AA2797FDA095BA2FC80FD91F00 |
:1037A000EA1FFB1F15C080910E0190910F0197FD3C |
:1037B0000F9654E0959587955A95E1F7AA2797FDBE |
:1037C000A095BA2F8C1B9D0BAE0BBF0BFD01EC011E |
:1037D00020919608222321F1332780910C039091A8 |
:1037E0000D03829FA001839F500D929F500D1124C5 |
:1037F000CA01AA2797FDA095BA2F8C0F9D1FAE1F57 |
:10380000BF1F2F5F3F4F442737FD4095542FBC010A |
:10381000CD010E943B9D30930D0320930C0304C007 |
:10382000D0930D03C0930C0380915B08282F33279E |
:10383000220F331F220F331F80910C0390910D0331 |
:10384000821793077CF080915C08282F3327220F82 |
:10385000331F220F331F80910C0390910D03281703 |
:10386000390724F430930D0320930C038091020157 |
:10387000843108F4F7C0809110018F5F80931001AC |
:10388000F3C020918C0430918D0440918E045091AE |
:103890008F04BD01CE010E94C79C97FF04C06158F0 |
:1038A0007F4F8F4F9F4F7B018C0187E015950795C8 |
:1038B000F794E7948A95D1F78D2D992787FD9095F8 |
:1038C000A92FB92F2091940430919504409196042A |
:1038D00050919704BC01CD010E94C79C9B01AC0193 |
:1038E00097FF04C021583F4F4F4F5F4FC7E055959A |
:1038F000479537952795CA95D1F72E0D3F1D401F47 |
:10390000511F809166019927AA27BB27BC01CD01D1 |
:103910000E94C79C97FF04C061507E4F8F4F9F4FFE |
:10392000FC01EB01B9E0F595E795D795C795BA95F8 |
:10393000D1F7809168019927A6E0880F991FAA9571 |
:10394000E1F740910C0150910D012091620833275D |
:10395000841B950BB9010E94069D80910C019091EA |
:103960000D01860F971F90930D0180930C0180919C |
:103970009B0881FF14C080910C0190910D0197FD6F |
:103980000F9674E0959587957A95E1F7AA2797FDAC |
:10399000A095BA2FC80FD91FEA1FFB1F15C0809131 |
:1039A0000C0190910D0197FD0F9664E09595879518 |
:1039B0006A95E1F7AA2797FDA095BA2F8C1B9D0B5E |
:1039C000AE0BBF0BFD01EC0120919708222321F1E2 |
:1039D000332780910A0390910B03829FA001839F5C |
:1039E000500D929F500D1124CA01AA2797FDA09552 |
:1039F000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442755 |
:103A000037FD4095542FBC01CD010E943B9D309362 |
:103A10000B0320930A0304C0D0930B03C0930A0343 |
:103A200080915F08282F3327220F331F220F331F67 |
:103A300080910A0390910B03821793077CF0809189 |
:103A40006008282F3327220F331F220F331F809146 |
:103A50000A0390910B032817390724F430930B03C2 |
:103A600020930A0310921001E7E0CDB7DEB70C9463 |
:103A70007D9D1F920F920FB60F9211242F933F93AB |
:103A80004F935F938F939F93EF93FF9380910201E6 |
:103A900090911B03843108F04CC0992309F029C18F |
:103AA0008091B00086FF24C08091B0008F7B80930E |
:103AB000B00080910C0390910D0387559E4F909319 |
:103AC0000F0380930E0325E08D3D920718F08CEDD7 |
:103AD00095E005C08757914030F487E791E09093D7 |
:103AE0000F0380930E0380910E0390910F03C2C0C9 |
:103AF0008091B00080648093B00080916108282F8D |
:103B000033278DED96E0289FA001299F500D389F07 |
:103B1000500D1124CA0120911C0330911D03821BFA |
:103B2000930B90930F0380930E0381E08093100119 |
:103B3000DDC0992309F0DDC08091B00086FF9FC0F1 |
:103B40008091B0008F7B8093B000E0911E032091A4 |
:103B50006108EE23D9F433278DED96E0289FA0016C |
:103B6000299F500D389F500D1124CA0120911C032C |
:103B700030911D03821B930B90930F0380930E03D0 |
:103B800010921D0310921C03469AB0C02E1738F4F1 |
:103B90008AE090E090930F0380930E03A7C089EA18 |
:103BA00093E090930F0380930E038E2F9927833019 |
:103BB0009105D9F08430910534F48130910549F0B4 |
:103BC000029761F020C08430910591F0059799F03B |
:103BD0001AC080910C0390910D0304C080910A03D8 |
:103BE00090910B0387559E4F1DC080911B0A05C005 |
:103BF0008091F40902C08091240A9927880F991FA7 |
:103C0000880F991FEFCFFF27EE0FFF1FEE59F64FDA |
:103C100020813181220F331F80910E0390910F0379 |
:103C2000820F931F90930F0380930E0380910E03D6 |
:103C300090910F0355E08D3D950718F08CED95E0C0 |
:103C400005C08757914030F487E791E090930F03C8 |
:103C500080930E0320910E0330910F032C5B3040B4 |
:103C600030930F0320930E0380911C0390911D034A |
:103C7000820F931F90931D0380931C0337C0809184 |
:103C8000B00080648093B0008CEB90E090930F03C1 |
:103C900080930E0380911C0390911D0384549F4FC9 |
:103CA00090931D0380931C0380911103882321F0BE |
:103CB00080913A04882321F480911103823011F419 |
:103CC000469801C0469A80911E038F5F80931E0321 |
:103CD000282F33278091610899270196821793072F |
:103CE0002CF481E08093100110921E0381E08093F8 |
:103CF0001B0320910E0330910F0341E02F3734074F |
:103D000030F08FEF8093B3002F5F30400FC02F3F14 |
:103D10003105C9F0C0F0A9014F5F50404F37510540 |
:103D200050F480E88093B3002058304030930F0364 |
:103D300020930E0312C08FEF8093B30050930F03B4 |
:103D400040930E030AC080910E038093B30010923B |
:103D50000F0310920E0310921B03FF91EF919F919E |
:103D60008F915F914F913F912F910F900FBE0F90C8 |
:103D70001F90189510927C008FEC80937A00089524 |
:103D8000CF93DF931092270386E987BD83E090E00D |
:103D90000E940B31C82F863E08F4C65FC8BD84E67A |
:103DA00090E00E94711A8091160190911701815242 |
:103DB000934010F0C0EF02C0C530F8F0C8BD82E3F8 |
:103DC00090E00E94711A84E694E09F938F9384E4BC |
:103DD00096E19F938F93E0918805F091890509956D |
:103DE00080911601909117010F900F900F900F90F6 |
:103DF0008152934010F4C550DFCF6C2F83E090E0E8 |
:103E00000E941331CF3018F0CCE8D0E002C0C0E0FF |
:103E1000D0E0CA3FD105F8F4C7BD82E390E00E942C |
:103E2000711A86E694E09F938F9384E496E19F93C2 |
:103E30008F93E0918805F09189050995809116018D |
:103E4000909117010F900F900F900F908052934018 |
:103E500010F02196DECFC093D8078091390880FFFB |
:103E600009C08C2F8A508B3E28F08091A105806478 |
:103E70008093A105C7BD8CE291E00E94711ADF9189 |
:103E8000CF910895EF92FF921F93CF9310E080EDB2 |
:103E900097E00E944F1A7C01CCE8133019F4CB3024 |
:103EA00008F0C9E010E080913603909137038C5FF1 |
:103EB000934024F48091150181500AC0809136030B |
:103EC000909137038750944034F0809115018F5FB3 |
:103ED0008093150101C011E0809134039091350366 |
:103EE0008C5F934024F48091140181500AC080912A |
:103EF0003403909135038750944034F0809114013D |
:103F00008F5F8093140101C01F5F809132039091F5 |
:103F100033038C5F934024F48091130181500AC0D5 |
:103F2000809132039091330387509440C4F0809184 |
:103F300013018F5F8093130113C088E694E09F9371 |
:103F40008F9384E496E19F938F93E0918805F0919D |
:103F5000890509950F900F900F900F905FC01F5F1C |
:103F600082E18093620380915C038E7F80935C0387 |
:103F700085EA8093BC00809115018A3040F48091DD |
:103F8000A10581608093A1058AE08093150180914D |
:103F90001501863F40F08091A10581608093A105C5 |
:103FA00085EF80931501809114018A3040F480914F |
:103FB000A10582608093A1058AE08093140180911D |
:103FC0001401863F40F08091A10582608093A10595 |
:103FD00085EF80931401809113018A3040F4809121 |
:103FE000A10584608093A1058AE0809313018091EC |
:103FF0001301863F40F08091A10584608093A10564 |
:1040000085EF8093130180916203882339F0C70103 |
:104010000E94581A882309F090CFF5CF1092120110 |
:104020008FEC80937A00809112018823E1F3CA30EB |
:1040300020F48AE090E00E94711AC15009F02DCF5F |
:1040400086E490E00E94711ACF911F91FF90EF904B |
:1040500008951F920F920FB60F921124EF92FF92C4 |
:104060000F931F932F933F934F935F936F937F9380 |
:104070008F939F93AF93BF93EF93FF9380913F03F1 |
:10408000282F3327442755278F5F80933F03F9015B |
:104090002231310508F00BC5EA5BFF4F0C948D9D72 |
:1040A000809178009091790046C08091780090913D |
:1040B0007900B8C180917800909179009093430382 |
:1040C00080934203E3C180919E0490919F042091CC |
:1040D000780030917900821B930B9093CB078093EB |
:1040E000CA078091CA079091CB0790934D038093A4 |
:1040F0004C03EAC180917800909179002091A0044E |
:104100003091A104821B930B9093D7078093D6071D |
:104110008091D6079091D70790934F0380934E03D9 |
:10412000C8C4809146039091470320917800309154 |
:104130007900820F931F909347038093460381E099 |
:10414000B9C4809144039091450320917800309147 |
:104150007900820F931F909345038093440384E07A |
:10416000A9C480919C0883FF1AC08091200190917E |
:1041700021019C01220F331F280F391F4091780025 |
:10418000509179008BE090E0489FB001499F700DFD |
:10419000589F700D1124CB016EE170E00FC080912B |
:1041A0002001909121019C01220F331F280F391FFC |
:1041B000809178009091790063E070E00E94F29C19 |
:1041C000260F371F36952795369527953093210171 |
:1041D0002093200185E06EC4809178009091790051 |
:1041E0009093CD078093CC078091CC079091CD0719 |
:1041F00040919A0450919B04841B950B6091990403 |
:10420000262F332727FD3095821B930B90932D0388 |
:1042100080932C038091F903882309F071C0809169 |
:104220002C0390912D0302977CF172E04E3E5707CC |
:104230000CF0A7C020914003309141032B5F3F4F0A |
:104240003093410320934003255030408091020475 |
:1042500090910304845F914030F4215F3F4F30938D |
:1042600041032093400380914003909141038536A0 |
:1042700091050CF486C04F5F5F4F50939B044093B1 |
:104280009A048456904037C080912C0390912D035E |
:104290008F5F9F4F0CF075C082E0473258070CF4D7 |
:1042A00070C020914003309141032550304030933D |
:1042B0004103209340032B5F3F4F80910204909174 |
:1042C0000304845F914030F42F5030403093410319 |
:1042D0002093400380914003909141037FEF8C39FC |
:1042E00097070CF04EC04150504050939B044093B0 |
:1042F0009A048C599F4F909341038093400341C08F |
:104300008091100A9091110A8F5C9F41D4F18091A5 |
:104310002C0390912D030297ACF020914003309133 |
:104320004103C9010196909341038093400389584A |
:1043300093413CF166301CF46F5F609399042758F9 |
:1043400033411BC080912C0390912D038F5F9F4FB1 |
:10435000C4F42091400330914103C9010197909327 |
:1043600041038093400388579C4E5CF46B3F1CF0E4 |
:1043700061506093990429573C4E30934103209338 |
:10438000400380912C0390912D039C01442737FD1D |
:104390004095542F8091540490915504A091560457 |
:1043A000B0915704820F931FA41FB51F809354042C |
:1043B00090935504A0935604B0935704209154044D |
:1043C00030915504409156045091570457FF04C052 |
:1043D00021503C4F4F4F5F4F7AE0559547953795A9 |
:1043E00027957A95D1F78091540490915504A09126 |
:1043F0005604B0915704821B930BA40BB50B80930A |
:10440000540490935504A0935604B09357042EC1BE |
:104410008091440390914503209178003091790078 |
:10442000820F931F909345038093440310923E03A1 |
:1044300043C3809102018A3071F480917800909199 |
:1044400079002091420330914303820F931F01961C |
:104450009695879517C0409142035091430384314C |
:1044600058F02091780030917900240F351F8FEF9C |
:1044700097E0821B930B06C08091780090917900A1 |
:10448000840F951F909333038093320386E012C309 |
:1044900080919E0490919F04209178003091790042 |
:1044A000821B930B9093CB078093CA078091CA0716 |
:1044B0009091CB0720914C0330914D03820F931FB5 |
:1044C000909331038093300387E0F4C280917800A9 |
:1044D000909179002091A0043091A104821B930B4C |
:1044E0009093D7078093D6078091D6079091D707EE |
:1044F00020914E0330914F03820F931F90932F030F |
:1045000080932E03D6C220914603309147038091B9 |
:10451000780090917900280F391F3093470320933A |
:104520004603809102018A3019F4220F331F04C020 |
:10453000220F331F220F331F30934703209346036C |
:104540002091460330914703C90137FD079643E0A8 |
:10455000959587954A95E1F79093370380933603B5 |
:104560008091480390914903820F931F97FD019614 |
:104570009595879590934903809348032091AA04C9 |
:104580003091AB04821B930B90931F0180931E010B |
:1045900020913C0330913D0380911E0190911F01B9 |
:1045A000280F391F37FF02C02F5F3F4F35952795E2 |
:1045B00030933D0320933C03C2CD209144033091BE |
:1045C00045038091780090917900280F391F30932E |
:1045D000450320934403809102018A3019F4220F8D |
:1045E000331F04C0220F331F220F331F30934503A4 |
:1045F000209344032091440330914503C90137FDC2 |
:104600000796B3E095958795BA95E1F790933503B2 |
:104610008093340380914A0390914B03820F931F40 |
:1046200097FD01969595879590934B0380934A0348 |
:104630002091A8043091A904821B930B90931D0133 |
:1046400080931C0120913A0330913B0380911C011F |
:1046500090911D01280F391F37FF02C02F5F3F4F78 |
:104660003595279530933B0320933A0383E022C28C |
:104670008091F903882309F180E00E94BA969B019A |
:10468000AC0120503F4F4F4F5F4F57FF06C09B017B |
:10469000AC0121503D4F4F4F5F4FE9E05595479595 |
:1046A00037952795EA95D1F720931F033093200380 |
:1046B000409321035093220310C0809134049091C1 |
:1046C0003504A0913604B091370480931F03909372 |
:1046D0002003A0932103B093220310923F0381E0B3 |
:1046E000809312018091230390912403019690936B |
:1046F0002403809323038091780090917900909314 |
:104700001701809316018091F903882309F47EC074 |
:1047100080911601909117017C010027112780914B |
:104720002703992787FD9095A92FB92FBC01CD01AB |
:104730002BE032E040E050E00E94C79CDC01CB015E |
:10474000E81AF90A0A0B1B0BE0925003F09251038E |
:1047500000935203109353032091180130911901D3 |
:1047600040911A0150911B0157FF04C0215F3F4F38 |
:104770004F4F5F4F74E055954795379527957A953C |
:10478000D1F78091180190911901A0911A01B0916F |
:104790001B01821B930BA40BB50B80931801909304 |
:1047A0001901A0931A01B0931B01809118019091F7 |
:1047B0001901A0911A01B0911B018E0D9F1DA01F20 |
:1047C000B11F8093180190931901A0931A01B0931F |
:1047D0001B018091CE079091CF07A091D007B09197 |
:1047E000D107209118013091190140911A0150917F |
:1047F0001B01821B930BA40BB50B80933404909385 |
:104800003504A0933604B093370453C18091160148 |
:1048100090911701AA27BB27209150033091510393 |
:104820004091520350915303280F391F4A1F5B1FB9 |
:1048300020935003309351034093520350935303FA |
:10484000809154038F5F80935403803108F431C109 |
:104850008091180190911901A0911A01B0911B014A |
:104860007C018D0163E0EE0CFF1C001F111F6A9597 |
:10487000D1F7E81AF90A0A0B1B0BE20EF31E041F0C |
:10488000151F80912703992787FD9095A92FB92F90 |
:10489000BC01CD0120EB30E240E050E00E94C79C1B |
:1048A000DC01CB01E81AF90A0A0B1B0BD801C7017E |
:1048B0000496A11DB11DB7FF05C0D801C7010B9615 |
:1048C000A11DB11D23E0B595A795979587952A95CC |
:1048D000D1F78093180190931901A0931A01B09316 |
:1048E0001B01E090CE07F090CF070091D007109108 |
:1048F000D1078091180190911901A0911A01B091EE |
:104900001B01E81AF90A0A0B1B0BE0923404F0921F |
:104910003504009336041093370420912803309116 |
:10492000290340912A0350912B0357FF04C0215FB4 |
:104930003F4F4F4F5F4F84E05595479537952795EB |
:104940008A95D1F78091280390912903A0912A0399 |
:10495000B0912B03821B930BA40BB50B8093280300 |
:1049600090932903A0932A03B0932B0380912803EB |
:1049700090912903A0912A03B0912B038E0D9F1DC6 |
:10498000A01FB11F8093280390932903A0932A03AB |
:10499000B0932B038091280390912903A0912A03BF |
:1049A000B0912B03B7FF03C00F96A11DB11D14E0FA |
:1049B000B595A795979587951A95D1F720913404C9 |
:1049C00030913504281B390B64E0213036071CF088 |
:1049D00020E034E006C07CEF2030370714F420E0FC |
:1049E0003CEF8091250390912603809125039091BF |
:1049F000260397FF03C0909581959F4FA901F3E08F |
:104A0000440F551FFA95E1F78D5B9240C4F08091F9 |
:104A10002503909126039C01E4E0220F331FEA95C1 |
:104A2000E1F7281B390B240F351F37FF02C0215F28 |
:104A30003F4F74E0359527957A95E1F717C080913F |
:104A40002503909126039C0165E0220F331F6A9590 |
:104A5000E1F7281B390B240F351F37FF02C0215EF9 |
:104A60003F4F45E0359527954A95E1F7309326036A |
:104A7000209325038091500390915103A0915203FC |
:104A8000B0915303B7FF03C00196A11DB11DB595A9 |
:104A9000A795979587958093500390935103A09382 |
:104AA0005203B093530388E08093540302C01092E2 |
:104AB0003F0382E080933E0380913E0380937C001D |
:104AC00080913F03882319F08FEC80937A00FF9147 |
:104AD000EF91BF91AF919F918F917F916F915F9176 |
:104AE0004F913F912F911F910F91FF90EF900F9059 |
:104AF0000FBE0F901F90189590E2EBEDF7E08FE45A |
:104B00009193815087FFFCCF089590915703903582 |
:104B100040F4E92FFF27E552F84F80839F5F909381 |
:104B200057030895AF92BF92CF92DF92FF920F93F7 |
:104B30001F93CF93DF932091550320FF0AC08091EC |
:104B40005603882311F0815002C080912201809386 |
:104B5000560321FF0CC090915603809122019817B3 |
:104B600019F41092560303C09F5F90935603822F4F |
:104B7000992780FF04C081FF02C0109256030E9453 |
:104B80007C2580915603282F332795E8C92E95E27E |
:104B9000D92EC0918805D09189058A3098F481E199 |
:104BA000809357033F932F938FE994E09F938F93C4 |
:104BB000DF92CF92FE0109952DB73EB72A5F3F4F96 |
:104BC0002DBF11C080E1809357033F932F9384EA58 |
:104BD00094E09F938F93DF92CF92FE0109958DB75A |
:104BE0009EB706968DBF20915603822F9927AA273C |
:104BF000BB27FC01419710F00C94E32EE85AFF4FBD |
:104C000005E8C02E05E2D02EC0918805D091890517 |
:104C10000C948D9D1092570389EA94E09F938F9393 |
:104C200005E815E2DF92CF92FE01099584E18093B9 |
:104C300057030F900F900F900F908CE690E09F938A |
:104C40008F938BE590E09F938F931F921F9280919B |
:104C500002016AE00E94E69C892F99279F938F9317 |
:104C6000809102010E94E69C99279F938F9389EB84 |
:104C700094E09F938F93DF92CF92E0918805F0911B |
:104C80008905099588E280935703EDB7FEB73E96F4 |
:104C9000EDBF8CEA98E09F938F9380910001992754 |
:104CA0009F938F9381ED94E09F938F93DF92CF92A8 |
:104CB000E0918805F091890509958091A2059927D1 |
:104CC0002DB73EB7285F3F4F2DBFEC01C071D070AC |
:104CD00084FF06C08CE3809357038FED94E0FEC001 |
:104CE00090911805992359F18CE380935703892FEC |
:104CF00099279F938F938CEE94E09F938F931F93AC |
:104D00000F93E0918805F09189050995DF93CF9382 |
:104D10009091180581E1989FC00111248358944F08 |
:104D20009F938F931F930F93E0918805F0918905CE |
:104D300009958DB79EB70C968DBF0C94EC2E909173 |
:104D4000A105992351F08CE380935703892F99276C |
:104D50009F938F9384EF94E038C190915D039923E2 |
:104D600071F08CE380935703892F99279F938F933A |
:104D70008BE095E09F938F931F930F93E6C48091F0 |
:104D8000360190913701069710F00C94EC2E8CE3CD |
:104D90008093570380E295E0A8C78091400A15E808 |
:104DA000C12E15E2D12EC0918805D091890580FFD2 |
:104DB00082C0109257038091340490913504A091E1 |
:104DC0003604B0913704BC01CD0125E030E040E06D |
:104DD00050E00E943B9D3F932F938DE295E09F937F |
:104DE0008F93DF92CF92FE01099584E18093570360 |
:104DF0008DB79EB706968DBF809130049091310497 |
:104E0000A0913204B0913304BC01CD0125E030E023 |
:104E100040E050E00E943B9D3F932F938AE395E052 |
:104E20009F938F93DF92CF92E0918805F09189054F |
:104E3000099588E280935703EDB7FEB73696EDBF2C |
:104E400080911601909117019F938F9387E495E0CD |
:104E50009F938F93DF92CF92E0918805F09189051F |
:104E600009958CE3809357032DB73EB72A5F3F4FD8 |
:104E70002DBF87B599279F938F9384E595E09F93E6 |
:104E80008F93DF92CF92E0918805F0918905099583 |
:104E90008DB79EB706968DBF8091F903882309F4DC |
:104EA0009BC78DE48093570387B599279F938F9372 |
:104EB00081E695E0CFC41092570385E695E09F9375 |
:104EC0008F93DF92CF92FE01099584E1809357037F |
:104ED0000F900F900F900F9084E795E09F938F9322 |
:104EE000DF92CF9206C7109257038DE795E09F930C |
:104EF0008F9305E815E2DF92CF92FE01099584E1D8 |
:104F0000809357030F900F900F900F90809194040F |
:104F100090919504A0919604B0919704B7FF04C0B6 |
:104F200081509C4FAF4FBF4FCAE0B595A79597955D |
:104F30008795CA95D1F7BF93AF939F938F938AE8D4 |
:104F400095E09F938F931F930F93E0918805F091C5 |
:104F50008905099588E2809357032DB73EB7285FEE |
:104F60003F4F2DBF80918C0490918D04A0918E04B1 |
:104F7000B0918F04B7FF04C081509C4FAF4FBF4F1B |
:104F8000FAE0B595A79597958795FA95D1F7BF93D0 |
:104F9000AF939F938F9389E995E09F938F931F938E |
:104FA0000F93E0918805F091890509958CE3809332 |
:104FB00057038DB79EB708968DBF8091FC099091DD |
:104FC000FD099F938F9388EA95E09F938F931F939A |
:104FD0000F9344C4E1E0FE2EC1E0D0E004E619E006 |
:104FE0009F2D969584E1989FC001112480935703CB |
:104FF000F801828193819F938F932196DF93CF93C2 |
:105000002197808191819F938F93DF93CF9387EB3B |
:1050100095E09F938F9385E895E29F938F93E0911E |
:105020008805F091890509952DB73EB7245F3F4F5C |
:105030002DBF32E0F30E22960C5F1F4F88E08F15D4 |
:1050400078F6CAC61092570380912E08E82FFF27E2 |
:10505000EE0FFF1FEE59F64F808191819F938F9342 |
:1050600080912D08E82FFF27EE0FFF1FEE59F64F16 |
:10507000808191819F938F9389EC95E09F938F938B |
:10508000DF92CF92FE01099584E180935703EDB73B |
:10509000FEB73896EDBF80913008E82FFF27EE0F5E |
:1050A000FF1FEE59F64F808191819F938F938091DE |
:1050B0002F08E82FFF27EE0FFF1FEE59F64F8081D4 |
:1050C000918181589F4F9F938F9389ED95E09F9396 |
:1050D0008F93DF92CF92E0918805F0918905099531 |
:1050E00088E2809357032DB73EB7285F3F4F2DBF0F |
:1050F00080913208E82FFF27EE0FFF1FEE59F64F81 |
:105100008081918181589F4F9F938F938091310827 |
:10511000E82FFF27EE0FFF1FEE59F64F8081918198 |
:1051200081589F4F9F938F9389EE95E09F938F9324 |
:10513000DF92CF92E0918805F091890509958CE383 |
:10514000809357038DB79EB708968DBF8091340822 |
:10515000E82FFF27EE0FFF1FEE59F64F8081918158 |
:1051600081589F4F9F938F9380913308E82FFF279B |
:10517000EE0FFF1FEE59F64F8081918181589F4FAE |
:105180009F938F9389EF95E06BC21092570389E04C |
:1051900096E09F938F9305E815E2DF92CF92FE0190 |
:1051A0000995809102010F900F900F900F908A3017 |
:1051B00009F0A9C084E1809357038091AA049091DB |
:1051C000AB049C0197FF02C0295F3F4F287F821BE1 |
:1051D000930B9F938F938091AA049091AB0497FDBA |
:1051E000079673E0959587957A95E1F79F938F934E |
:1051F0002091AA043091AB0437FF02C0295F3F4FD2 |
:1052000063E0359527956A95E1F780913603909193 |
:105210003703821B930B9F938F9387E196E09F93B5 |
:105220008F931F930F93E0918805F091890509955D |
:1052300088E2809357032DB73EB7265F3F4F2DBFBF |
:105240008091A8049091A9049C0197FF02C0295F56 |
:105250003F4F287F821B930B9F938F938091A804CD |
:105260009091A90497FD079653E0959587955A95D7 |
:10527000E1F79F938F932091A8043091A90437FF01 |
:1052800002C0295F3F4F43E0359527954A95E1F7E6 |
:105290008091340390913503821B930B9F938F93DE |
:1052A00088E296E09F938F931F930F93E091880578 |
:1052B000F091890509958CE3809357038DB79EB7CC |
:1052C0000A968DBF8091A6049091A7049F938F9317 |
:1052D0008091A6049091A70420913203309133036A |
:1052E000821B930B9F938F9389E396E09F938F93F9 |
:1052F0001F930F93E0918805F09189050995EDB70B |
:10530000FEB73896B3C28B3019F0843108F4A9C0C7 |
:1053100084E1809357038091AA049091AB049C018F |
:1053200097FF02C0215F3F4F207F821B930B97FDA9 |
:105330000196959587959F938F938091AA0490915C |
:10534000AB0497FD0F9624E0959587952A95E1F794 |
:105350009F938F932091AA043091AB0437FF02C032 |
:10536000295F3F4FC3E035952795CA95E1F78091B6 |
:10537000360390913703821B930B9F938F9387E49F |
:1053800096E09F938F931F930F93E0918805F09180 |
:105390008905099588E2809357032DB73EB7265FAC |
:1053A0003F4F2DBF8091A8049091A9049C0197FFC5 |
:1053B00002C0215F3F4F207F821B930B97FD019618 |
:1053C000959587959F938F938091A8049091A904B8 |
:1053D00097FD0F96A4E095958795AA95E1F79F9381 |
:1053E0008F932091A8043091A90437FF02C0295F50 |
:1053F0003F4FF3E035952795FA95E1F78091340317 |
:1054000090913503821B930B9F938F9389E596E0D0 |
:105410009F938F931F930F93E0918805F0918905D7 |
:1054200009958CE3809357038DB79EB70A968DBF7D |
:105430008091A6049091A70497FD01969595879574 |
:105440009F938F938091A6049091A704209132039B |
:1054500030913303821B930B9F938F938BE696E0DF |
:1054600045CF8D3009F0B8C484E180935703809113 |
:10547000150199279F938F938091AA049091AB0473 |
:1054800097FD0F9674E0959587957A95E1F79F9330 |
:105490008F932091AA043091AB0437FF02C0295F9B |
:1054A0003F4F63E0359527956A95E1F78091360384 |
:1054B00090913703821B930B9F938F938AE796E01B |
:1054C0009F938F931F930F93E0918805F091890527 |
:1054D000099588E2809357032DB73EB7265F3F4F6B |
:1054E0002DBF8091140199279F938F938091A804D9 |
:1054F0009091A90497FD0F9654E0959587955A953C |
:10550000E1F79F938F932091A8043091A90437FF6E |
:1055100002C0295F3F4F43E0359527954A95E1F753 |
:105520008091340390913503821B930B9F938F934B |
:105530008EE896E09F938F931F930F93E0918805D9 |
:10554000F091890509958CE3809357038DB79EB739 |
:105550000A968DBF8091130199279F938F93809115 |
:10556000A6049091A70497FD0196959587959F9322 |
:105570008F938091A6049091A704209132033091DB |
:105580003303821B930B9F938F9382EA96E09F9342 |
:105590008F931F930F93E0918805F09189050995EA |
:1055A000EDB7FEB73A9662C11092570386EB96E0CC |
:1055B0009F938F93DF92CF92FE01099584E18093B0 |
:1055C00057030F900F900F900F908091A00490912F |
:1055D000A1049F938F9380912E0390912F039F930B |
:1055E0008F9383EC96E09F938F93DF92CF92E0911D |
:1055F0008805F0918905099588E2809357032DB7B6 |
:105600003EB7285F3F4F2DBF80919E0490919F042D |
:105610009F938F9380913003909131039F938F9349 |
:1056200082ED96E09F938F93DF92CF92E091880571 |
:10563000F091890509958CE3809357038DB79EB748 |
:1056400008968DBF80919A0490919B049F938F93AD |
:1056500080912C0390912D039F938F9381EE96E080 |
:105660009F938F93DF92CF9245CE109257038091F4 |
:105670002001909121016AE070E00E94069D9F93B5 |
:105680008F9380912001909121016AE070E00E9447 |
:10569000069D7F936F9380EF96E09F938F93DF92A9 |
:1056A000CF92FE01099584E1809357032DB73EB751 |
:1056B000285F3F4F2DBF8091D50A9091D60A6AE0AE |
:1056C00070E00E94F29C9F938F938091D50A9091F5 |
:1056D000D60A6AE070E00E94F29C7F936F9384E0A8 |
:1056E00097E09F938F93DF92CF92E0918805F0919E |
:1056F0008905099588E2809357038DB79EB7089670 |
:105700008DBF8091D70A9091D80A9F938F9388E19B |
:1057100097E09F938F93DF92CF92E0918805F0916D |
:10572000890509958CE380935703EDB7FEB736964C |
:10573000EDBF8091D90A9091DA0A9F938F9388E206 |
:1057400097E09F938F93DF92CF92E0918805F0913D |
:10575000890509952DB73EB72A5F3F4F45C1109285 |
:1057600057038AE397E09F938F93DF92CF92FE01D6 |
:10577000099588E2809357030F900F900F900F9038 |
:1057800080913A0499279F938F9383E497E09F93A6 |
:105790008F93DF92CF92E0918805F091890509956A |
:1057A0008CE3809357038DB79EB706968DBF80918B |
:1057B0006109992701979F938F9383E597E04AC0EA |
:1057C0001092570383E697E09F938F93DF92CF92D7 |
:1057D000FE01099584E1809357030F900F900F907D |
:1057E0000F9080918A0190918B019F938F938BE60C |
:1057F00097E09F938F93DF92CF92E0918805F0918D |
:105800008905099588E2809357032DB73EB72A5F33 |
:105810003F4F2DBF8091FC099091FD099F938F937D |
:1058200089E797E09F938F93DF92CF92E09188056D |
:10583000F091890509958CE3809357038DB79EB746 |
:1058400006968DBF80915204909153049F938F933D |
:1058500087E897E09F938F93DF92CF92E09188053E |
:10586000F09189050995EDB7FEB73696EDBFB4C244 |
:10587000CBE3CC2EC4E0DC2E20E030E0E901B3E045 |
:10588000FB2EC0935703F60181916F0199279F93D7 |
:105890008F9389010F5F1F4F1F930F9385E997E047 |
:1058A0009F938F9385E895E29F938F93E09188056E |
:1058B000F091890509952DB73EB7285F3F4F2DBF61 |
:1058C000FA9464969801F7FEDCCF86C2AFE3CA2E45 |
:1058D000A4E0DA2EC0E0D0E08E01F3E0FF2E0093CA |
:1058E0005703F60181916F0199279F938F93259616 |
:1058F000DF93CF9382EA97E09F938F9385E895E2B9 |
:105900009F938F93E0918805F091890509952DB7B4 |
:105910003EB7285F3F4F2DBFFA940C5E1F4F249770 |
:10592000F7FEDDCF59C2109257038FEA97E09F939D |
:105930008F9305E815E2DF92CF92FE01099584E18D |
:10594000809357030F900F900F900F9080916901F3 |
:1059500099279F938F9387EB97E09F938F93DF9285 |
:10596000CF92E0918805F0918905099588E28093AE |
:1059700057038DB79EB706968DBF80910C0390910B |
:105980000D0397FD039695958795959587959F931C |
:105990008F9385EC97E09F938F931F930F93E091E4 |
:1059A0008805F091890509958CE380935703EDB73D |
:1059B000FEB73696EDBF80915C0899279F938F9331 |
:1059C00080915B0899279F938F9383ED97E09F9336 |
:1059D0008F931F930F93E0918805F09189050995A6 |
:1059E0002DB73EB7285F3F4F2DBFF6C1109257032A |
:1059F00081EE97E09F938F9375E8A72E75E2B72EFF |
:105A0000DF92CF92FE0109950F900F900F900F90AB |
:105A1000C1E0D9E000E010E062E0F62E802F8C5E5D |
:105A2000809357038B8D99278F7790709F938F93D7 |
:105A30008B8999278F7790709F938F938B85992768 |
:105A40008F7790709F938F938B8199278F7790702A |
:105A50009F938F9381EF97E09F938F93BF92AF9225 |
:105A6000E0918805F091890509958DB79EB70C9650 |
:105A70008DBFFA940C5E1F4FA096F7FECFCFACC13E |
:105A80001092570382E098E09F938F9355E8A52EDC |
:105A900055E2B52EDF92CF92FE0109950F900F903F |
:105AA0000F900F90C1E0D9E000E010E042E0F42E4A |
:105AB000802F8C5E809357038F8D992787FD90955B |
:105AC0009F938F938F89992787FD90959F938F93AD |
:105AD0008F85992787FD90959F938F938F81992725 |
:105AE00087FD90959F938F9381E198E09F938F938B |
:105AF000BF92AF92E0918805F09189050995EDB7C5 |
:105B0000FEB73C96EDBFFA940C5E1F4FA096F7FED1 |
:105B1000CFCF62C11092570382E298E09F938F9398 |
:105B200005E815E2DF92CF92FE01099584E18093AA |
:105B300057030F900F900F900F9080911C09881FB2 |
:105B40008827881F97E0899FC00111248D969F9315 |
:105B50008F9380911409881F8827881F96E0899F5A |
:105B6000C00111248D969F938F9380910C09881FFB |
:105B70008827881F95E0899FC00111248D969F93E7 |
:105B80008F9380910409881F8827881F9927880F81 |
:105B9000991F880F991F8D969F938F9381E398E0AB |
:105BA0009F938F93DF92CF92E0918805F0918905C2 |
:105BB000099588E2809357032DB73EB7245F3F4F86 |
:105BC0002DBF80913C09881F8827881F9BE0899FF3 |
:105BD000C00111248D969F938F9380913409881F63 |
:105BE0008827881F9AE0899FC00111248D969F9372 |
:105BF0008F9380912C09881F8827881F99E0899F9F |
:105C0000C00111248D969F938F9380912409881F42 |
:105C10008827881F992723E0880F991F2A95E1F785 |
:105C20008D969F938F9385E498E09F938F93DF9257 |
:105C3000CF92E0918805F091890509958CE38093D6 |
:105C400057038DB79EB70C968DBF80914409881F6E |
:105C50008827881F9CE0899FC00111248D969F93FF |
:105C60008F9389E598E09F938F93DF92CF92E09195 |
:105C70008805F0918905099580914C09EDB7FEB72B |
:105C80003696EDBF87FF12C080E4809357038AE603 |
:105C900098E09F938F93DF92CF92E0918805F091E7 |
:105CA000890509950F900F900F900F9080915409DE |
:105CB00087FF12C084E4809357038DE698E09F939A |
:105CC0008F931F930F93E0918805F09189050995B3 |
:105CD0000F900F900F900F9080915C0987FF7CC010 |
:105CE00088E48093570380E798E09F938F931F93F6 |
:105CF0000F93E0918805F091890509950F900F9019 |
:105D00000F900F9069C01092570383E798E09F931C |
:105D10008F93DF92CF92FE01099584E18093570320 |
:105D20000F900F900F900F908091E2029091E302FC |
:105D30009F938F9381E898E09F938F93DF92CF9208 |
:105D4000E0918805F0918905099588E280935703D1 |
:105D50002DB73EB72A5F3F4F2DBF8091E40290914F |
:105D6000E5029F938F938EE898E09F938F93DF9245 |
:105D7000CF92E0918805F0918905099589E4809397 |
:105D800057038DB79EB706968DBF8BE998E09F931A |
:105D90008F93DF92CF92E0918805F0918905099564 |
:105DA000809155030F900F900F900F9083FF14C0B8 |
:105DB0001092E5021092E40260E070E08EE090E064 |
:105DC0000E94243109C080912201281719F4215022 |
:105DD000209322011092560310925503DF91CF9128 |
:105DE0001F910F91FF90DF90CF90BF90AF900895DB |
:105DF000F999FECF92BD81BDF89A80B59927089593 |
:105E0000F999FECF1FBA92BD81BD60BD0FB6F8945F |
:105E1000FA9AF99A0FBE08954AEA20E030E0261770 |
:105E2000370740F4FC018191480F2F5F3F4F261741 |
:105E30003707C8F3842F99270895EAEA40E050E035 |
:105E40004617570778F49C01F999FECF32BD21BD62 |
:105E5000F89A80B5E80F4F5F5F4F2F5F3F4F4617AF |
:105E6000570790F38E2F9927089581E080932F088C |
:105E700082E080932E0883E080932D0884E0809355 |
:105E8000300885E08093310886E08093320887E00F |
:105E90008093330888E08093340889E08093350844 |
:105EA0008AE0809336088BE0809337088CE08093FB |
:105EB000380808958FE580932C088CE0EEE9F8E02F |
:105EC00011928A95E9F780910201843150F08AE0BD |
:105ED00080934C08109270088BE1809348088EE400 |
:105EE0000AC083E080934C0880E2809370088EE1C2 |
:105EF0008093480885E580936D0880936E0880E262 |
:105F000080936F0810929A088AE68093390882E697 |
:105F100080939C0886E0809353081092900810921A |
:105F20008D0848E04093460886EE8093470830E4A9 |
:105F3000309349082EE120933A0885E080933C088D |
:105F40009091F9039923A9F084E180933D0888E2B8 |
:105F500080933B0820933F0881E080934008109293 |
:105F600041088FE78093420830939D08209393085F |
:105F700012C08FE080933D0820933B0890933F0828 |
:105F80004093400884E18093410890934208309305 |
:105F90009D08909393088FE080933E081092980894 |
:105FA0008CE0809399081092550810925608109230 |
:105FB00057081092580810927208109273081092A5 |
:105FC00074081092750890E89093590842E3409342 |
:105FD0005A0872E070939B0888E180935B0886EE14 |
:105FE00080935C0884E0809361085DE750936408C7 |
:105FF000509365085093660890935D0865E560933B |
:106000005E0886E480935F088CED809360088CE3E3 |
:1060100080936208109263088FE58093760883EF7F |
:10602000809378088AEA80937A0880937B0898E2C4 |
:10603000909377089093790810927C0840936708B2 |
:106040002AE5209368084093690836E030937D087C |
:1060500084E680937E0880937F082093800888E7F9 |
:1060600080938108909385088BE4809382086093E5 |
:106070008308809384083093860888E0809387089B |
:10608000409388088AE28093890885EF80938A0884 |
:106090008CE880938B0870938C0810928E08109275 |
:1060A0008F0881E28093500881E480935108209307 |
:1060B0005208109291081092920886E980939408F1 |
:1060C00050936A0884E380936B08109295081092AD |
:1060D00096081092970808950E945A2F8AE080939C |
:1060E000430880E18093440826E0209345089AE520 |
:1060F00090934A0888E780934B0890934D088093CB |
:106100004E0820934F0880E2809354088CE38093DC |
:106110006C088BE48093710886E491E6A3E7B4E70A |
:1061200080939E0890939F08A093A008B093A10825 |
:106130006EE770E08CE298E00E940C2F8093AA0832 |
:106140000895CF93DF930E945A2F88E080934308ED |
:1061500030E13093440826E02093450894E690937C |
:106160004A0888E780934B0890934D0880934E0827 |
:1061700020934F083093540886E480936C088093F2 |
:106180007108AEE9B8E085E0E3E2F1E0ED010190ED |
:1061900009928A95E1F76EE770E0CD018257904051 |
:1061A0000E940C2F8093AA08DF91CF9108950E943E |
:1061B0005A2F26E0209343088AE08093440884E025 |
:1061C0008093450894E690934A0888E780934B08AB |
:1061D00090934D0880934E0820934F0880E1809360 |
:1061E000540886E480936C088093710885E491E6F6 |
:1061F000A3E7B9E780939E0890939F08A093A00817 |
:10620000B093A1086EE770E08CE298E00E940C2F3A |
:106210008093AA080895F999FECF92BD81BDF89A9E |
:1062200080B599270895F999FECF1FBA92BD81BD17 |
:1062300060BD0FB6F894FA9AF99A0FBE089568EF08 |
:106240007EE20E94559B089540E05FE20E948F9B92 |
:106250000895EF92FF920F931F93CF93C82F815011 |
:10626000853008F0C3E08FE7C89F8001112485EED8 |
:10627000E82E8FEFF82EE00EF11E6EE770E0C701FA |
:106280000E941D2F682F98012D593F4F8FB39927DA |
:10629000AC014270507081FDF9CF32BD21BDF89A3A |
:1062A00080B5861711F0CA0123C08FB399279C01CE |
:1062B0002270307081FDF9CFF2BCE1BCF89A80B554 |
:1062C0008F3511F0C90114C08FE7C89FC001112498 |
:1062D0004B9728EF3EE24FE750E0BC018CE298E09C |
:1062E0000E94309B0E943C750E94559581E090E091 |
:1062F000CF911F910F91FF90EF900895282F863036 |
:1063000010F025E003C0882309F421E02093000168 |
:10631000F999FECF1FBA82E090E092BD81BD20BD09 |
:106320000FB6F894FA9AF99A0FBE0895CF93C82F32 |
:1063300080912C088F3509F051C0C63010F0C5E0AF |
:1063400003C0CC2309F44AC00E94999980919D080A |
:1063500082FF07C080915108843618F080E5809351 |
:1063600051086EE770E08CE298E00E940C2F809359 |
:10637000AA088FE7C89FC001112420E03FE24FE741 |
:1063800050E06CE278E04B970E946D9B20E03FE28A |
:106390004CE050E06DE278E080E590E00E946D9B7B |
:1063A0006CE070E08DE298E00E940C2F282FF999A4 |
:1063B000FECF1FBA8CE590E092BD81BD20BD0FB627 |
:1063C000F894FA9AF99A0FBE8C2F0E947E310E949F |
:1063D0003C750E94559581E090E002C080E090E01D |
:1063E000CF9108956DE470E088EE93E00E941D2F38 |
:1063F000482F8FB399279C012270307081FDF9CF0F |
:1064000085E394E092BD81BDF89A80B5841779F454 |
:106410008FB399279C012270307081FDF9CF88EEEF |
:1064200093E092BD81BDF89A80B5813011F0C90129 |
:10643000089528EF3EE24EE450E068EE73E08BEA08 |
:1064400098E00E94309B81E090E008958091AB0835 |
:106450008130A9F46DE470E08BEA98E00E940C2F83 |
:106460008093F80820E03FE24EE450E06BEA78E0E9 |
:1064700088EE93E00E946D9B81E090E0089580E0BB |
:1064800090E00895CF93DF9381E08093AB08EBEA2F |
:10649000F8E08FE0158616861786108A81503496AC |
:1064A00087FFF8CF80E48093B8088093B9081092F2 |
:1064B000BA088093BB088093BC0890EC9093BD0809 |
:1064C0001092BE088093BF088093C0081092C10844 |
:1064D0009093C2089093C3088093C4081092C50893 |
:1064E0008093C6089093C708ACEAB8E08CE0E9E274 |
:1064F000F1E0ED01019009928A95E1F76DE470E019 |
:10650000CD0101970E940C2F8093F808DF91CF9165 |
:106510000895F999FECF82E090E092BD81BDF89A8E |
:1065200080B5282F863078F023E0322FF999FECFFE |
:106530001FBA82E090E092BD81BD30BD0FB6F894E5 |
:10654000FA9AF99A0FBE20930001822F9927089595 |
:106550001F93CF93C82F162F863010F0C5E003C0CD |
:10656000882309F4C1E08C2F99278230910541F0EE |
:106570008330910544F4019731F40E946C3005C0DA |
:106580000E94A13002C00E94D7301123E1F06CE0DC |
:1065900070E080E590E00E941D2F282FF999FECF32 |
:1065A0008CE590E092BD81BDF89A80B5821759F4D0 |
:1065B00028EF3EE24CE050E060E570E08DE298E0CC |
:1065C0000E94309B02C00E94352F8C2F0E94963172 |
:1065D000CF911F910895DF92EF92FF920F931F9337 |
:1065E000CF93FF24DF2CEF2C81E190E00E940B3150 |
:1065F00090910201981791F1963169F481E190E050 |
:106600000E940B31853139F44C9905C06F2D81E022 |
:1066100090E00E9413316091020181E190E00E94BC |
:10662000133188E190E028E00FB6F894A8958093A4 |
:1066300060000FBE2093600083EA98E09F938F93E1 |
:1066400084E496E19F938F93E0918805F09189050A |
:1066500009950F900F900F900F90FFCF81E090E081 |
:106660000E940B318F3511F031E0E32E6CE070E0C9 |
:1066700080E590E00E941D2FC82FF999FECF8CE590 |
:1066800090E092BD81BDF89A80B58C1711F421E09D |
:10669000D22EC1E001E010E0EE2029F48C2F0E9400 |
:1066A00029318823B9F591E0F92E1F930F938BECD4 |
:1066B00098E09F938F9384E496E19F938F93E0916A |
:1066C0008805F091890509952DB73EB72A5F3F4FA0 |
:1066D0002DBF0130110521F00230110521F006C057 |
:1066E0000E946C3005C00E94A13002C00E94D730C9 |
:1066F000DD2059F028EF3EE24CE050E060E570E02C |
:106700008DE298E00E94309B02C00E94352F8C2FB2 |
:106710000E949631CF5F0F5F1F4FC63008F4BCCF89 |
:10672000FF2019F083E00E947E310E948932C82F39 |
:106730000E9429318C2F99279F938F9381EF98E0A6 |
:106740009F938F9304E416E11F930F93E0918805C4 |
:10675000F0918905099581E090E00E940B312DB7F9 |
:106760003EB72A5F3F4F2DBF8F3F21F00E94F2318D |
:10677000882399F48AE099E09F938F931F930F9356 |
:10678000E0918805F091890509950E9442320E94A6 |
:1067900026320F900F900F900F90EE2029F06FE5AA |
:1067A00081E090E00E94133110922B0890E0E8EB1A |
:1067B000F8E0CFE08081349618160CF49F5FC1504A |
:1067C000C7FFF8CF90932B08892F99279F938F931A |
:1067D0008CEA98E09F938F938BE299E09F938F933D |
:1067E0001F930F93E0918805F091890509950E9408 |
:1067F000FB098DB79EB708968DBFCF911F910F9162 |
:10680000FF90EF90DF900895982F2FB7F894399864 |
:10681000389A88B1836088B98091B9008C7F809361 |
:10682000B9008AE28093B80010926203109260036C |
:1068300010925F03992379F0E1E0F9E08BE0108298 |
:10684000118212821382148215821682178281505D |
:10685000389687FFF4CF78942FBF08951092620383 |
:1068600084E98093BC0080E88093BC001092BD0056 |
:106870001092BA001092BB001092B9001092B800AA |
:1068800010925E0380E00E9404341092BB0085E801 |
:106890008093BC0080915C03826080935C030895C8 |
:1068A0001F920F920FB60F9211242F933F934F9385 |
:1068B0005F938F939F93EF93FF9380916203282FB1 |
:1068C0003327442755278F5F80936203F9012731CF |
:1068D000310508F0C2C2E759FF4F0C948D9D81E04D |
:1068E00080935E0309C0809160038C3090F48091A6 |
:1068F00060038F5F8093600380916003E82FFF2720 |
:10690000EE0FFF1FEE0FFF1FE555F74F8585181699 |
:1069100054F7809160038C3070F010925B031092FA |
:106920005A031092600385E08093620380915F03B5 |
:10693000880F8D5A04C080916003880F8E5A80930F |
:10694000BB0085E87FC280916003E82FFF2783E0CA |
:10695000EE0FFF1F8A95E1F7EF5FF64F818180937D |
:10696000BB0085E88093BC0080916003E82FFF277F |
:10697000EE0FFF1FEE0FFF1FEE0FFF1FEF5FF64F33 |
:10698000808180FF91C080916003E82FFF27EE0F88 |
:10699000FF1FEE0FFF1FEE0FFF1FEF5FF64F82810D |
:1069A000882329F080912B08873008F46CC28091ED |
:1069B0005A0390915B03892B09F065C280915803BB |
:1069C00090915903892B09F05EC26EC080916003DB |
:1069D00021E030E002C0220F331F8A95E2F7809158 |
:1069E00058039091590328233923232B79F0809160 |
:1069F0006003E82FFF27EE0FFF1FEE0FFF1FEE0FC4 |
:106A0000FF1FEF5FF64F80E184830DC0809160032C |
:106A1000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1FE8 |
:106A2000EF5FF64F148280916003E82FFF2753E059 |
:106A3000EE0FFF1F5A95E1F7EF5FF64F8481282F85 |
:106A4000332743E0220F331F4A95E1F7809160031B |
:106A5000E82FFF2793E0EE0FFF1F9A95E1F7EF5F16 |
:106A6000F64F82818770822B8093BB0085E88093EC |
:106A7000BC002091600381E090E002C0880F991F64 |
:106A80002A95E2F720915A0330915B0382239323E6 |
:106A9000892B51F089EF98E090936603809365030A |
:106AA00088E080936703EFC184E089C1E0916503CA |
:106AB000F091660381918093BB0085E88093BC00D0 |
:106AC000F0936603E09365038091670381508093A0 |
:106AD0006703882309F4D7C183E071C18091B900AD |
:106AE000803351F580916303882329F480916003FA |
:106AF0008F5F8093630380916003E82FFF2783E01B |
:106B0000EE0FFF1F8A95E1F7EF5FF64F838199271C |
:106B10008F7790708F3791057CF480916003E82F18 |
:106B2000FF27EE0FFF1FEE0FFF1FEE0FFF1FEF5FA0 |
:106B3000F64F83818F5F83831092620384E9809391 |
:106B4000BC008AE090E090933701809336018091F9 |
:106B500060038F5F80936003109262036DC1809128 |
:106B6000B9008034C9F180915F03E82FFF27EE0F51 |
:106B7000FF1FEE0FFF1FEE0FFF1FEF5FF64F83812A |
:106B80008F77838380915F038F5F80935F03809112 |
:106B90005F038C30A0F010925F03109259031092A3 |
:106BA0005803809164038F5F809364038C3038F0C6 |
:106BB0001092640380915C038D7F80935C038091CD |
:106BC0005C03816080935C031092620384E980938C |
:106BD000BC0010925E0373C080915F03E82FFF2713 |
:106BE000EE0FFF1FEE0FFF1FEE0FFF1FEF5FF64FC1 |
:106BF00083818068838380915F03E82FFF27EE0FF6 |
:106C0000FF1FEE0FFF1FEE0FFF1FEF5FF64F80819C |
:106C100080FF2FC080915F03E82FFF2753E0EE0F26 |
:106C2000FF1F5A95E1F7EF5FF64F84819927009790 |
:106C300051F04097D9F589EF98E0909366038093DF |
:106C4000650388E031C080915F03992743E0880F96 |
:106C5000991F4A95E1F78A5F964F90936603809358 |
:106C6000650390915F03809164039817E1F483E0DA |
:106C70001BC080915F03992733E0880F991F3A95D5 |
:106C8000E1F78A5F964F9093660380936503809146 |
:106C90005C0381FD06C090915F03809164039817A7 |
:106CA00011F482E001C081E0809367038091670363 |
:106CB000813011F485E801C085EC8093BC0080919F |
:106CC000630380935D0310926303DDC0E09165036D |
:106CD000F09166038091BB00808380916503909161 |
:106CE0006603019690936603809365038091670322 |
:106CF000815080936703823010F085EC5DC0813055 |
:106D000011F485E859C080915C0381FF2DC080910A |
:106D1000010480FD1DC080915F03E82FFF2723E061 |
:106D2000EE0FFF1F2A95E1F7EF5FF64F86818A3F4E |
:106D300079F480915F03E82FFF2793E0EE0FFF1FA8 |
:106D40009A95E1F7EF5FF64F8081816080830CC0F8 |
:106D500080915F03E82FFF2783E0EE0FFF1F8A95E6 |
:106D6000E1F7EF5FF64F108280915F038F5F8093B2 |
:106D70005F0380915F038C30A0F010925F0310924C |
:106D8000590310925803809164038F5F80936403CA |
:106D90008C3038F01092640380915C038D7F809377 |
:106DA0005C031092620384E98093BC0080915C03D1 |
:106DB000816080935C0365C08093BC0086E0809313 |
:106DC000620361C088E9BBCD80916103880F805F59 |
:106DD000B6CD8091610399278130910561F08230B1 |
:106DE00091051CF4892B21F04EC0029739F04BC05D |
:106DF00080911501A4CD80911401A1CD8091130142 |
:106E00009ECD80E89CCD1092620384E98093BC0003 |
:106E100010925E038AE090E09093370180933601F0 |
:106E200080916103823088F4809161038F5F809349 |
:106E3000610382E18093620380915C038E7F809383 |
:106E40005C0385EA8093BC001EC0109261038091B0 |
:106E50005C03816080935C0316C01092620384E936 |
:106E60008093BC0080915C03816080935C038AE026 |
:106E700090E0909337018093360110926003109256 |
:106E80005F0310925E03FF91EF919F918F915F914D |
:106E90004F913F912F910F900FBE0F901F9018951B |
:106EA0001F93CF93DF93182F80913904882321F407 |
:106EB0008091F102882319F081E090E097C01D30A5 |
:106EC00008F092C01123B1F0E12FFF2723E0EE0F6D |
:106ED000FF1F2A95E1F7EF5FF64F359780813596D2 |
:106EE00088230CF081C03897808180FD03C083E047 |
:106EF00090E07CC08091F908823019F084E090E045 |
:106F000075C067E070E089EF98E00E940C2F9091C7 |
:106F10000009891719F085E090E068C080ED97E0DE |
:106F20000E944F1AEC0180915C0380FD05C0CE01E8 |
:106F30000E94581A8823B9F3112319F48FEF90E0B7 |
:106F40000BC0212F33272150304081E090E002C058 |
:106F5000880F991F2A95E2F790935B0380935A0359 |
:106F6000A1E0B0E0E1E0F9E040E050E06BE0CD010D |
:106F7000042E02C0880F991F0A94E2F720915A0349 |
:106F800030915B0382239323892B11F011821282AB |
:106F900061504F5F5F4F389667FFE9CF10926003F3 |
:106FA0001092620380915C038E7F80935C0385EA7C |
:106FB0008093BC0080915C0380FD05C0CE010E94DF |
:106FC000581A8823B9F380915A0390915B03892B57 |
:106FD00029F0CE010E94581A882311F380915A0398 |
:106FE00090915B03009711F082E090E0DF91CF91E8 |
:106FF0001F9108950F931F93CF93DF93982F809144 |
:107000003904882321F48091F102882319F081E06A |
:1070100090E092C09D30A0F4992319F486E090E0AE |
:107020008BC0C92FDD27FE0133E0EE0FFF1F3A951D |
:10703000E1F7EF5FF64F35978081359687FD03C006 |
:1070400082E090E079C03897808180FD03C083E0C2 |
:1070500090E072C080ED97E00E944F1A8C01809101 |
:107060005C0380FD05C0C8010E94581A8823B9F34B |
:10707000219721E030E0C90102C0880F991FCA950D |
:10708000E2F79093590380935803D901E1E0F9E0C6 |
:1070900040E050E06BE0CD01042E02C0880F991F44 |
:1070A0000A94E2F7209158033091590382239323E5 |
:1070B000892B11F01182128261504F5F5F4F389619 |
:1070C00067FFE9CF10925F031092F9081092000950 |
:1070D0001092620380915C038E7F80935C0385EA4B |
:1070E0008093BC0080915C0380FD05C0C8010E94B4 |
:1070F000581A8823B9F38091580390915903892B2A |
:1071000029F0C8010E94581A882311F38091F908C8 |
:10711000823019F084E090E00FC067E070E089EF02 |
:1071200098E00E940C2F90910009891719F085E0D2 |
:1071300090E002C080E090E0DF91CF911F910F912D |
:107140000895CF93DF9380E021E83FEFC8EAD9E0CC |
:10715000E2E6F9E0DF01853020F411961C921E92E0 |
:1071600002C0318320831982188222968F5F129683 |
:107170003296833280F38FE790E09093A109809359 |
:10718000A00981E89FEF90939F0980939E09109238 |
:10719000A3091092A2091092A7041092A6041092BB |
:1071A000A9041092A8041092AB041092AA04DF91D3 |
:1071B000CF9108951F920F920FB60F9211240F9343 |
:1071C0001F932F933F934F935F936F937F938F936F |
:1071D0009F93AF93BF93CF93DF93EF93FF938091F0 |
:1071E0009C0882FDC2C0409186005091870080912A |
:1071F000690390916A03481B590B80918600909116 |
:10720000870090936A0380936903CA018D54944068 |
:10721000A0916B03B0916C03835F9A4158F4809105 |
:107220006B0380936109149714F010923A0181E086 |
:1072300090E096C0A131B1050CF0F7C1CA018B5F97 |
:107240009040845B914008F086C080913801909115 |
:107250003901481B590BE0919508EE2351F0FF27A7 |
:10726000EE0FFF1FEE59F64F808191818436910514 |
:10727000ECF4FD01EA0FFB1FEE59F64F808191817E |
:10728000FA01E81BF90BCF01F7FF03C09095819538 |
:107290009F4F06975CF480913A04883C20F48091DB |
:1072A0003A04865F01C088EC80933A04FD01EA0F3E |
:1072B000FB1FEE59F64F808191819C01220F331FF5 |
:1072C000280F391F240F351F37FF02C02D5F3F4F96 |
:1072D000E901D595C795D595C795CA0101968C1733 |
:1072E0009D0714F4219706C041505040C417D5079C |
:1072F0000CF4219680913A04833CE0F08D010A0F52 |
:107300001B1FF801EE59F64F808191819E01281BC9 |
:10731000390BC90163E070E00E94069DCB01880F24 |
:10732000991F860F971F0855164FD80111969C93E9 |
:107330008E9307C0AA0FBB1FA855B64F11961C927B |
:107340001E92E0916B03F0916C03EE0FFF1FEE595C |
:10735000F64FD183C08380916B0390916C030196AB |
:1073600090936C0380936B0360C1409186005091B1 |
:10737000870080916D0390916E03481B590B80919B |
:1073800086009091870090936E0380936D03CA01ED |
:107390008D5494406091F703835F9A4108F07AC05E |
:1073A0006093680380916803843008F453C090911F |
:1073B000610980916803981709F04CC05091F80357 |
:1073C0005B3008F43FC010923A011092F70340E09E |
:1073D0005F31C0F0E42FFF27EE0FFF1F9F012D54F8 |
:1073E0003C4FDF01AE59B64F8D919C91D9018D93E1 |
:1073F0009C93DF01A855B64F8D919C91EB52FC4FA9 |
:1074000091838083E42FFF27EE0FFF1F9F012E59EA |
:10741000364FDF01A159BC4F8D919C91D901119636 |
:107420009C938E93DF01AF56BC4F8D919C91E85594 |
:10743000F64F91838083842F8F5F482F813140F2F4 |
:107440008093F7038091F8038F3FB9F08F5F8093AB |
:10745000F80313C08091F803853620F08AE080930A |
:10746000F80302C01092F803809102018A3011F0F3 |
:10747000843110F0289A01C0289881E08093F703A6 |
:1074800080913904882309F0D0C0809168038093EB |
:107490006109CBC0613108F0A0C0CA018B5F904088 |
:1074A000845B914008F090C080913801909139013F |
:1074B000481B590BE62FFF27EE0FFF1FE159FC4F2A |
:1074C00080819181FA01E81BF90BCF0105960B979A |
:1074D00020F5E0919508EE2351F0FF27EE0FFF1FF6 |
:1074E000EE59F64F8081918184369105B4F48091F4 |
:1074F000F8038A3120F080913A04865F05C08B3012 |
:1075000028F080913A048E5F80933A0480913A0487 |
:10751000893C18F088EC80933A04E62FFF27EE0FA1 |
:10752000FF1FE159FC4F808191819C01220F331F85 |
:10753000280F391F240F351F37FF02C02D5F3F4F23 |
:10754000E901D595C795D595C795CA0101968C17C0 |
:107550009D0714F4219706C041505040C417D50729 |
:107560000CF4219680913A048E3BD8F0E62FFF2749 |
:10757000EE0FFF1FDF01A159BC4F8D919C919E0121 |
:10758000281B390BC90163E070E00E94069DCB0106 |
:10759000880F991F860F971FEF56FC4F91838083AA |
:1075A00008C0E62FFF27EE0FFF1FEF56FC4F11829A |
:1075B00010828091F703E82FFF27EE0FFF1FE1599C |
:1075C000FC4FD183C08309C0809102018A3011F041 |
:1075D000843110F0289A01C028988091F7038431F3 |
:1075E00020F48F5F8093F70320C08431F1F4809101 |
:1075F00002018A3011F0843110F0289A01C02898D5 |
:107600008EE18093F70320E1C8EAD9E0A3EBB3E071 |
:10761000E2E6F9E08D919D91918380833296198203 |
:1076200018822296215027FFF5CFFF91EF91DF912D |
:10763000CF91BF91AF919F918F917F916F915F910A |
:107640004F913F912F911F910F910F900FBE0F906F |
:107650001F901895EF92FF920F931F938091480807 |
:107660009927880F991F880F991F7C010027F7FC25 |
:107670000095102F8091940490919504A091960408 |
:10768000B0919704BC01CD01A80197010E943B9DD8 |
:10769000309388072093870780918C0490918D0404 |
:1076A000A0918E04B0918F04BC01CD01A801970177 |
:1076B0000E943B9D30938A07209389078091440A5A |
:1076C0009091450A97FD0396959587959595879591 |
:1076D00090938C0780938B078091540A9091550A60 |
:1076E00097FD0396959587959595879590938E0729 |
:1076F00080938D078091A6049091A7042091320376 |
:1077000030913303821B930B9093900780938F07E4 |
:107710008091340490913504A0913604B0913704DF |
:10772000BC01CD012AE030E040E050E00E943B9DEA |
:1077300030939207209391078091CC079091CD07C9 |
:10774000909394078093930780918A0190918B0185 |
:107750009093980780939707809120019091210141 |
:1077600090939A078093990780913A049927909370 |
:107770009C0780939B078091FC099091FD09909351 |
:107780009E0780939D078091020999279093A007F7 |
:1077900080939F0780910A0999279093A20780936D |
:1077A000A1078091120999279093A4078093A307BA |
:1077B00080911A0999279093A6078093A507809135 |
:1077C0000C0390910D039093B0078093AF078091C5 |
:1077D0001E0490911F049093B2078093B10780918B |
:1077E000D50A9091D60A9093B4078093B3078091FD |
:1077F000D90A9091DA0A9093B6078093B5078091E1 |
:10780000300490913104A0913204B0913304BC0152 |
:10781000CD012AE030E040E050E00E943B9D3093F3 |
:10782000B8072093B7078091520490915304909326 |
:10783000BE078093BD078091DB0A99279093C2070A |
:107840008093C1078091090590910A059093C40720 |
:107850008093C30780910705909108059093C60710 |
:107860008093C5078091A105882321F48091A2050A |
:10787000882321F080918607816003C0809186076C |
:107880008E7F809386071F910F91FF90EF90089550 |
:10789000EF92FF921F93CF93DF93182F7B0180917C |
:1078A0003904882391F5809102018C3010F08731E2 |
:1078B00011F4299801C0299A11501F3FE9F0F09264 |
:1078C0001403E0921303E7018091130390911403D2 |
:1078D000892B11F4209781F3809117038823A1F35A |
:1078E000109217038091130390911403892B09F4CC |
:1078F00021970E94AF99E8CF809102018C3010F05F |
:10790000873111F4299A01C02998DF91CF911F91F5 |
:10791000FF90EF900895CF93DF93809102018D3017 |
:1079200011F40E94421F10927A00809136039091C8 |
:1079300037039093070A8093060A8091340390914D |
:1079400035039093F8098093F70980913203909161 |
:10795000330390934A0A8093490A20912E03309171 |
:107960002F03C901880F991F880F991F820F931F3A |
:10797000820F931F9093450A8093440A209130030D |
:1079800030913103C901880F991F880F991F820F09 |
:10799000931F820F931F9093550A8093540A8FEC84 |
:1079A00080937A00ABE3B4E0C1E3D8E097E089913B |
:1079B000E82FFF27EE0FFF1FEE59F64F0190F081E1 |
:1079C000E02DE158FF4F1E161F061CF0E0E0F0E02E |
:1079D00005C0EF3FF10514F0EFEFF0E08C91282F98 |
:1079E0003327E217F30714F4815004C02E173F0722 |
:1079F00014F48F5F8C939150119697FFD8CF80919C |
:107A00006D089927AA27BB27BC01CD0124EC39E0DA |
:107A100040E050E00E94C79CDC01CB0180938201D2 |
:107A200090938301A0938401B093850180916E08A7 |
:107A30009927AA27BB27BC01CD010E94C79CDC0166 |
:107A4000CB0180937E0190937F01A0938001B0933E |
:107A50008101DF91CF910895A0E0B0E0E2E3FDE382 |
:107A60000C945A9D682EE1E07E2E00E010E0680143 |
:107A70005801E8011092A1051093A1040093A004FD |
:107A800010939F0400939E0410939B0400939A0408 |
:107A9000109299041093AB040093AA041093A904C4 |
:107AA0000093A8041093A7040093A6041092640105 |
:107AB00010926301109227030E948B3C84E690E0B1 |
:107AC0000E94711A0E948B3C8091390880FF10C07F |
:107AD0008091160190911701875B934038F4809153 |
:107AE0001601909117018E5E924010F40E94C01E04 |
:107AF0007FE1E72E8AE090E00E94711A80913203C4 |
:107B000090913303080F191F80913603909137032A |
:107B1000C80ED91E8091340390913503A80EB91E6A |
:107B20008091CC079091CD07C80FD91FEA94E7FE4A |
:107B3000E1CF9601205F3F4F3695279536952795E3 |
:107B40003093AB042093AA04C5014096969587957F |
:107B5000969587959093A9048093A804005F1F4F82 |
:107B600045E0169507954A95E1F71093A704009311 |
:107B7000A6046096B5E0D695C795BA95E1F7D0937F |
:107B80009B04C0939A049093A5048093A40430931B |
:107B9000A3042093A20482E06816C9F58091440AE8 |
:107BA0009091450A97FF03C0909581959F4F6CE097 |
:107BB00070E00E94069D9B017093A1046093A00455 |
:107BC0008091540A9091550A97FF03C09095819532 |
:107BD0009F4F6CE070E00E94069D70939F0460933D |
:107BE0009E04B90184E090E00E94243160919E04DB |
:107BF00070919F0486E090E00E94243160919A0485 |
:107C000070919B0488E090E00E9424314FC084E092 |
:107C100090E00E941F319093A1048093A00486E01D |
:107C200090E00E941F319C0190939F0480939E04DA |
:107C30008091A0049091A1048150984018F42150A3 |
:107C40003840A0F18CE499E09F938F9384E496E10F |
:107C50009F938F93E0918805F09189050995809114 |
:107C6000440A9091450A97FF03C0909581959F4FD4 |
:107C70006CE070E00E94069D7093A1046093A004E4 |
:107C80008091540A9091550A97FF03C09095819571 |
:107C90009F4F6CE070E00E94069D70939F0460937C |
:107CA0009E0477240F900F900F900F9012BC11BC80 |
:107CB0001092070A1092060A1092F8091092F7091A |
:107CC00010924A0A1092490A84E690E00E94711AC2 |
:107CD00080912E0390912F039C01220F331F220FBE |
:107CE000331F280F391F280F391F3093450A20935F |
:107CF000440A80913003909131038C01000F111FD1 |
:107D0000000F111F080F191F080F191F1093550A94 |
:107D10000093540A80914808C82EDD24EE24FF24E5 |
:107D2000442737FD4095542FC701B6010E94C79CD8 |
:107D30004B015C01609394047093950480939604C6 |
:107D4000909397049801442737FD4095542FC7011D |
:107D5000B6010E94C79CDC01CB0180938C049093F8 |
:107D60008D04A0938E04B0938F048092740490923B |
:107D70007504A0927604B092770480936C0490937B |
:107D80006D04A0936E04B0936F041092640410927B |
:107D90006504109266041092670480911801909116 |
:107DA0001901A0911A01B0911B018093CE07909305 |
:107DB000CF07A093D007B093D1071092260310925B |
:107DC0002503109228031092290310922A0310927F |
:107DD0002B031092540410925504109256041092E2 |
:107DE000570400918A0110918B0110935304009362 |
:107DF000520484E690E0909387018093860182E3A9 |
:107E000090E0909314038093130380916D08992759 |
:107E1000AA27BB27BC01CD0124EC39E040E050E0AB |
:107E20000E94C79CDC01CB018856954CAF4FBF4FD9 |
:107E30008093820190938301A0938401B093850184 |
:107E400080916E089927AA27BB27BC01CD010E940B |
:107E5000C79CDC01CB018856954CAF4FBF4F809338 |
:107E60007E0190937F01A0938001B09381011092D5 |
:107E7000410110924001C801AA2797FDA095BA2F91 |
:107E800020913C0130913D0140913E0150913F01D4 |
:107E9000BC01CD010E94C79CDC01CB018093500A3C |
:107EA0009093510AA093520AB093530A10924F0430 |
:107EB00010924E040E943C7580910104846080936E |
:107EC00001048FEF8093D00A1092D10A80E2809350 |
:107ED000D20ACBE3D4E0A1E3B8E0E7E0EE2E8D9147 |
:107EE000E82FFF27EE0FFF1FEE59F64F808191819B |
:107EF00081588993EA94E7FEF2CF84E680933A04AE |
:107F000080911103882311F0579A0DC080E091E110 |
:107F1000909309018093080181E0809310010E94F1 |
:107F2000111B0E94111B8091940490919504A091C3 |
:107F30009604B0919704E0903C01F0903D010091CF |
:107F40003E0110913F01BC01CD01A80197010E94A3 |
:107F50003B9D59016A0180918C0490918D04A09100 |
:107F60008E04B0918F04BC01CD01A80197010E943D |
:107F70003B9DB901C5010E94E79A8C010E949F7840 |
:107F80009C019093110A8093100A80919A04909119 |
:107F90009B04AA2797FDA095BA2F7DE0880F991F13 |
:107FA000AA1FBB1F7A95D1F78050904FAF43B040C6 |
:107FB000442737FD4095542FBC01CD010E943B9DC5 |
:107FC000C90180509E4F90939B0480939A04053181 |
:107FD00011050CF07724662079F08091F90388234D |
:107FE00059F0C90181599040C39730F08091A105A3 |
:107FF00080628093A10577248091AA049091AB04BC |
:1080000080569940815C9B4228F08091A105816057 |
:108010008093A1058091A8049091A904805699406D |
:10802000815C9B4228F08091A10582608093A1052C |
:108030008091A6049091A7048C5291408957954055 |
:1080400028F08091A10584608093A1058091A0040F |
:108050009091A1048C529140835C914028F08091D2 |
:10806000A10588608093A10580919E0490919F0452 |
:108070008C529140835C914028F08091A1058061F1 |
:108080008093A10580919A0490919B048050924026 |
:108090008355914028F08091A10580628093A105CD |
:1080A0008091A1058111772486E4809379010E9453 |
:1080B000559582E00E94BA96872D9927EEE0CDB7BC |
:1080C000DEB70C94769DA3E1B0E0E9E6F0E40C9411 |
:1080D000569D8091A6049091A7042091320330917F |
:1080E0003303821B930B90934A0A8093490A809131 |
:1080F0003C0390913D0397FD07969C0113E0359555 |
:1081000027951A95E1F73093070A2093060A809184 |
:108110003A0390913B0397FD0796B3E095958795B9 |
:10812000BA95E1F79093F8098093F7093093130A11 |
:108130002093120A90930A0A8093090A8091440AB4 |
:108140009091450AAC01440F551F480F591F2091CB |
:108150002E0330912F03C901880F991F880F991F93 |
:10816000820F931F820F931F480F591F57FF02C0A2 |
:108170004D5F5F4F55954795559547955093450AE7 |
:108180004093440A8091540A9091550AAC01440FDF |
:10819000551F480F591F2091300330913103C901F9 |
:1081A000880F991F880F991F820F931F820F931FAB |
:1081B000480F591F57FF02C04D5F5F4F55954795B8 |
:1081C000559547955093550A4093540A20912E0394 |
:1081D00030912F03C901880F991F880F991F820FB3 |
:1081E000931F820F931F9C01442737FD4095542F06 |
:1081F0008091840490918504A0918604B0918704B5 |
:10820000820F931FA41FB51F80938404909385044D |
:10821000A0938604B09387042091300330913103FA |
:10822000C901880F991F880F991F820F931F820F12 |
:10823000931F9C01442737FD4095542F8091800463 |
:1082400090918104A0918204B0918304820F931FC6 |
:10825000A41FB51F8093800490938104A09382048F |
:10826000B093830480911C0A90911D0A20912E03E3 |
:1082700030912F03820F931F90931D0A80931C0A45 |
:1082800080914C0A90914D0A209130033091310336 |
:10829000820F931F90934D0A80934C0A80919C0407 |
:1082A00090919D04019690939D0480939C048091ED |
:1082B000CC079091CD0720919A0430919B04821BAA |
:1082C000930B9C01442737FD4095542F80917C04EB |
:1082D00090917D04A0917E04B0917F04820F931F42 |
:1082E000A41FB51F80937C0490937D04A0937E040B |
:1082F000B0937F048FEC80937A001092120120914A |
:108300006C0430916D0440916E0450916F04298784 |
:108310003A874B875C8729543B46414050402CF0BC |
:1083200028E43BE641E050E00DC089859A85AB85A5 |
:10833000BC85885B9449AE4FBF4F4CF428EB34E9C1 |
:108340004EEF5FEF2D833E834F83588708C08985AA |
:108350009A85AB85BC858D839E83AF83B88720913A |
:1083600074043091750440917604509177042D8700 |
:108370003E874F87588B29543B46414050402CF054 |
:1083800028E43BE641E050E00DC08D859E85AF8539 |
:10839000B889885B9449AE4FBF4F4CF428EB34E961 |
:1083A0004EEF5FEF29833A834B835C8308C08D8552 |
:1083B0009E85AF85B88989839A83AB83BC83A0915E |
:1083C000490AB0914A0ABB8BAA8BFD01CF01AA27AB |
:1083D00097FDA095BA2FA0906404B0906504C0905A |
:1083E0006604D0906704A80EB91ECA1EDB1EA092B8 |
:1083F0006404B0926504C0926604D0926704E09071 |
:10840000500AF090510A0091520A1091530AE80E56 |
:10841000F91E0A1F1B1FE092500AF092510A0093A6 |
:10842000520A1093530AF0911D04F98BFF2309F0AF |
:1084300098C180911C04882309F093C18091400A5F |
:1084400086FF8FC18091F7099091F809AA2797FDBF |
:10845000A095BA2FBC01CD0129813A814B815C8165 |
:108460000E94C79C9B01AC0197FF04C02150384F6C |
:108470004F4F5F4FBBE05595479537952795BA9578 |
:10848000D1F780916301682E772488249924CA014A |
:10849000B901A40193010E94C79CDC01CB01809328 |
:1084A000B6049093B704A093B804B093B904B7FF8F |
:1084B00004C08150904FAF4FBF4F1C012D01ACE065 |
:1084C0005594479437942794AA95D1F72092B604EF |
:1084D0003092B7044092B8045092B9048091060AD1 |
:1084E0009091070AAA2797FDA095BA2FBC01CD014C |
:1084F0002D813E814F8158850E94C79C97FF04C003 |
:108500006150784F8F4F9F4FFBE0959587957795FA |
:108510006795FA95D1F7A40193010E94C79CDC01ED |
:10852000CB018093BA049093BB04A093BC04B09396 |
:10853000BD04B7FF04C08150904FAF4FBF4F9C01A7 |
:10854000AD01ECE05595479537952795EA95D1F71C |
:108550002093BA043093BB044093BC045093BD04F1 |
:108560008091B6049091B7049093EF098093EE093F |
:108570008091BA049091BB049093F3098093F2091F |
:1085800022193309440955092093BA043093BB04D6 |
:108590004093BC045093BD04E20EF31E041F151F4C |
:1085A000E092500AF092510A0093520A1093530A33 |
:1085B000809162018823B1F457FF04C02F5F3F4FC1 |
:1085C0004F4F5F4F5595479537952795A21AB30A98 |
:1085D000C40AD50AA0926404B0926504C0926604ED |
:1085E000D09267042A893B8979010027F7FC00951E |
:1085F000102F8091BA049091BB04A091BC04B0915B |
:10860000BD04E80EF91E0A1F1B1FC801B70129810E |
:108610003A814B815C810E94C79C9B01AC0197FF12 |
:1086200004C02150384F4F4F5F4F6BE05595479531 |
:10863000379527956A95D1F780916401A82EBB24C0 |
:10864000CC24DD24CA01B901A60195010E94C79C72 |
:10865000DC01CB018093AE049093AF04A093B004EF |
:10866000B093B104B7FF04C08150904FAF4FBF4FDC |
:108670003C014D013CE095948794779467943A953A |
:10868000D1F76092AE047092AF048092B0049092E1 |
:10869000B104C801B7012D813E814F8158850E94E8 |
:1086A000C79C97FF04C06150784F8F4F9F4F2BE0BE |
:1086B00095958795779567952A95D1F7A6019501A8 |
:1086C0000E94C79CDC01CB018093B2049093B30459 |
:1086D000A093B404B093B504B7FF04C08150904F89 |
:1086E000AF4FBF4FAC01BD010CE075956795579535 |
:1086F00047950A95D1F74093B2045093B304609321 |
:10870000B4047093B5042A893B8937FF03C03095C0 |
:1087100021953F4F21343105E4F1D401C30197FE87 |
:1087200007C0B095A095909581959F4FAF4FBF4FD3 |
:1087300081389105A105B10584F4DB01CA0177FFF9 |
:1087400007C0B095A095909581959F4FAF4FBF4FB3 |
:1087500081389105A105B105E4F081E080935004D2 |
:1087600018C01092F3091092F2091092EF091092BA |
:10877000EE091092B2041092B3041092B404109255 |
:10878000B5041092AE041092AF041092B00410928F |
:10879000B1048091B2049091B304A091B404B0915B |
:1087A000B504BC01CD0124E630E040E050E00E9479 |
:1087B0003B9DE090AE04F090AF04E21AF30AF09211 |
:1087C000050AE092040A8091AE049091AF04A09152 |
:1087D000B004B091B104BC01CD0124E630E040E02A |
:1087E00050E00E943B9DDA01C9012091B204309112 |
:1087F000B3048C01021B130B1093FA090093F909BF |
:1088000080913C0190913D01A0913E01B0913F01CA |
:10881000BC01CD0128E631E040E050E00E94C79C59 |
:108820002091500A3091510A4091520A5091530AB6 |
:10883000261737074807590764F0261B370B480BE4 |
:10884000590B2093500A3093510A4093520A509387 |
:10885000530A2091500A3091510A4091520A509186 |
:10886000530A57FF0CC0260F371F481F591F20936C |
:10887000500A3093510A4093520A5093530A609120 |
:10888000F7097091F8096E0D7F1D9B01442737FD94 |
:108890004095542F8091680490916904A0916A04D6 |
:1088A000B0916B04820F931FA41FB51F80936804BF |
:1088B00090936904A0936A04B0936B04809122049E |
:1088C00090912304681B790BCB01AA2797FDA095F3 |
:1088D000BA2F29853A854B855C85820F931FA41F8B |
:1088E000B51F80936C0490936D04A0936E04B093B5 |
:1088F0006F04C0907E01D0907F01E0908001F090E5 |
:108900008101C816D906EA06FB06C4F488EA91E696 |
:10891000A0E0B0E08C199D09AE09BF0980936C04FA |
:1089200090936D04A0936E04B0936F0480936804D9 |
:1089300090936904A0936A04B0936B0422273327B1 |
:10894000A9012C193D094E095F0980916C04909191 |
:108950006D04A0916E04B0916F0482179307A40771 |
:10896000B507B4F4D701C601885A9146A040B0407B |
:1089700080936C0490936D04A0936E04B0936F0485 |
:108980008093680490936904A0936A04B0936B0485 |
:108990006091060A7091070A600F711F9B014427BE |
:1089A00037FD4095542F8091700490917104A091EF |
:1089B0007204B0917304820F931FA41FB51F80939C |
:1089C000700490937104A0937204B0937304809127 |
:1089D000200490912104681B790BCB01AA2797FDF5 |
:1089E000A095BA2F2D853E854F855889820F931FFC |
:1089F000A41FB51F8093740490937504A09376040C |
:108A0000B0937704E0908201F0908301009184019B |
:108A100010918501E816F9060A071B07C4F488EAD5 |
:108A200091E6A0E0B0E08E199F09A00BB10B8093F6 |
:108A3000740490937504A0937604B09377048093A4 |
:108A4000700490937104A0937204B093730422276E |
:108A50003327A9012E193F09400B510B8091740453 |
:108A600090917504A0917604B091770482179307D2 |
:108A7000A407B507B4F4D801C701885A9146A040AD |
:108A8000B0408093740490937504A0937604B093DF |
:108A900077048093700490937104A0937204B09350 |
:108AA00073048091640490916504A0916604B09170 |
:108AB00067048093780490937904A0937A04B09328 |
:108AC0007B048091740490917504A0917604B09118 |
:108AD00077048093940490939504A0939604B093A4 |
:108AE000970480916C0490916D04A0916E04B091F4 |
:108AF0006F0480938C0490938D04A0938E04B093A4 |
:108B00008F048091700490917104A0917204B091CF |
:108B100073048093900490939104A0939204B09373 |
:108B200093048091680490916904A0916A04B091C3 |
:108B30006B048093880490938904A0938A04B09373 |
:108B40008B0480911E0190911F0197FD079613E001 |
:108B5000959587951A95E1F79093070A8093060AF1 |
:108B600080911C0190911D0197FD0796B3E09595AA |
:108B70008795BA95E1F79093F8098093F70980916A |
:108B80003603909137030F9734F488E19CEF90936C |
:108B9000070A8093060A809136039091370307975E |
:108BA00034F480E398EF9093070A8093060A2091AB |
:108BB00002012A30A9F48091360390913703835F34 |
:108BC000934034F088EE93E09093070A8093060A6E |
:108BD00080913603909137038A5F9340DCF014C094 |
:108BE0008091360390913703815D974034F088EE91 |
:108BF00093E09093070A8093060A80913603909140 |
:108C00003703805E974034F080ED97E09093070A39 |
:108C10008093060A80913403909135030F9734F4C2 |
:108C200088E19CEF9093F8098093F70980913403D1 |
:108C300090913503079734F480E398EF9093F80907 |
:108C40008093F7092A30A9F4809134039091350379 |
:108C5000835F934034F088EE93E09093F80980931B |
:108C6000F70980913403909135038A5F9340DCF0DB |
:108C700014C08091340390913503815D974034F0A6 |
:108C800088EE93E09093F8098093F709809134037C |
:108C900090913503805E974034F080ED97E090939B |
:108CA000F8098093F70960917101662309F4AFC058 |
:108CB00040911E0150911F018091BE049091BF040C |
:108CC000481B590B5093C5044093C40420911E01C6 |
:108CD00030911F01280F391F37FF02C02F5F3F4F10 |
:108CE000359527953093BF042093BE044138510534 |
:108CF0001CF080E890E005C040585F4F34F480E8F5 |
:108D00009FEF9093C5048093C40440911C0150913F |
:108D10001D018091C0049091C104481B590B5093D0 |
:108D2000C3044093C20420911C0130911D01280FFF |
:108D3000391F37FF02C02F5F3F4F3595279530937E |
:108D4000C1042093C004413851051CF080E890E034 |
:108D500005C040585F4F34F480E89FEF9093C30400 |
:108D60008093C204462F55278091C4049091C50476 |
:108D7000849FB001859F700D949F700D11249B01FD |
:108D800077FF02C0215F3F4FE4E035952795EA95D4 |
:108D9000E1F78091060A9091070A820F931F909342 |
:108DA000070A8093060A8091C2049091C304849FAD |
:108DB000D001859FB00D949FB00D1124AD019D0190 |
:108DC000B7FF02C0215F3F4F94E0359527959A95F4 |
:108DD000E1F78091F7099091F809820F931F909322 |
:108DE000F8098093F70980911E0190911F01860F69 |
:108DF000971F90931F0180931E0180911C019091F9 |
:108E00001D01840F951F90931D0180931C010091FB |
:108E1000090A10910A0A8091EE099091EF09101643 |
:108E200011065CF59C0197FF04C022273327281BFD |
:108E3000390BC901AA2797FDA095BA2F209162018D |
:108E4000332744275527BC01CD010E94C79C9B01B5 |
:108E5000AC0197FF04C0215C3F4F4F4F5F4F86E04E |
:108E600055954795379527958A95D1F78091040AAE |
:108E70009091050A820F931F27C097FF03C090951A |
:108E800081959F4FAA2797FDA095BA2F2091620147 |
:108E9000332744275527BC01CD010E94C79C9B0165 |
:108EA000AC0197FF04C0215C3F4F4F4F5F4FB6E0CE |
:108EB0005595479537952795BA95D1F78091040A2E |
:108EC0009091050A821B930B9093050A8093040AE4 |
:108ED000E090120AF090130A8091F2099091F30940 |
:108EE0001E141F045CF59C0197FF04C02227332742 |
:108EF000281B390BC901AA2797FDA095BA2F2091ED |
:108F00006201332744275527BC01CD010E94C79C2D |
:108F10009B01AC0197FF04C0215C3F4F4F4F5F4F57 |
:108F2000A6E05595479537952795AA95D1F7809155 |
:108F3000F9099091FA09820F931F27C097FF03C088 |
:108F4000909581959F4FAA2797FDA095BA2F2091C4 |
:108F50006201332744275527BC01CD010E94C79CDD |
:108F60009B01AC0197FF04C0215C3F4F4F4F5F4F07 |
:108F7000F6E05595479537952795FA95D1F7809165 |
:108F8000F9099091FA09821B930B9093FA09809347 |
:108F9000F9098091400A87FF44C0B989BB2309F0D1 |
:108FA00040C080911C048823E1F5E1E0EE16E1E089 |
:108FB000FE064CF08091060A9091070A8E0D9F1DC7 |
:108FC000805091400DC0F0E0EF16FFEFFF0664F413 |
:108FD0008091060A9091070A8E0D9F1D80509F4F29 |
:108FE0009093070A8093060A21E0013012074CF0A3 |
:108FF0008091F7099091F809800F911F805091405E |
:109000000CC03FEF0030130764F48091F709909192 |
:10901000F809800F911F80509F4F9093F80980931B |
:10902000F709E2E1CD5E0C94729D809139048823AA |
:1090300029F5809101048C7F8093010480910004C4 |
:109040008F7D80930004A6EAB5E0E1E0F9E09BE0C3 |
:109050008091F102882309F48C938D91818312828F |
:109060009150389697FFF4CF8091F102882359F000 |
:109070008091F10281508093F10205C0809101043A |
:1090800081608093010480915E03882319F010921F |
:109090005E030895809360038093620380915C0374 |
:1090A0008E7F80935C0385EA8093BC0008958823BB |
:1090B00019F480E090E00895E82FFF27EE0FFF1FDE |
:1090C000EE59F64F8081918181589F4F8F3F9105D6 |
:1090D00021F01CF08FEF90E004C097FF02C080E009 |
:1090E00090E099270895CF93DF93ABE3B4E0C1E319 |
:1090F000D8E057E08991E82FFF27EE0FFF1FEE59C8 |
:10910000F64F0190F081E02DE158FF4FEF3FF10560 |
:1091100021F01CF0EFEFF0E004C0F7FF02C0E0E048 |
:10912000F0E0893111F4EC931BC04C91242F3327CC |
:10913000E217F307A9F0CF01821B930B97FD03966B |
:109140009595879595958795242F280F2C93822F99 |
:109150009927E817F90714F4215001C02F5F2C93C9 |
:109160005150119657FFC6CF80913B08883F38F089 |
:10917000EFEFF0E0E81BF109E55CFB4F80818093A5 |
:10918000760180917601882329F0843618F084E6F0 |
:109190008093760180913D08883F38F0EFEFF0E052 |
:1091A000E81BF109E55CFB4F80818093750180919C |
:1091B0007501882329F0843618F084E680937501C0 |
:1091C00080914A08883F38F0EFEFF0E0E81BF109A2 |
:1091D000E55CFB4F808180937001809170018B3042 |
:1091E00010F48AE002C08F3F11F4809370018091E7 |
:1091F0007708883F38F0EFEFF0E0E81BF109E55C15 |
:10920000FB4F808180931E0A80911E0A863010F4E5 |
:1092100085E002C08F3F11F480931E0A8091790887 |
:10922000883F38F0EFEFF0E0E81BF109E55CFB4F19 |
:1092300080818093470A8091470A863010F485E048 |
:1092400002C08F3F11F48093470A80916408873FE2 |
:1092500019F4429905C006C0863F31F4439B02C011 |
:109260008CE815C086E413C0883F38F0EFEFF0E0DB |
:10927000E81BF109E55CFB4F808180931B0A80911C |
:109280001B0A893110F488E102C08F3F11F48093EA |
:109290001B0A80916508873F19F4429905C006C0F2 |
:1092A000863F31F4439B02C08CE815C086E413C0AE |
:1092B000883F38F0EFEFF0E0E81BF109E55CFB4F89 |
:1092C00080818093F4098091F409893110F488E158 |
:1092D00002C08F3F11F48093F40980916608883FA3 |
:1092E00038F0EFEFF0E0E81BF109E55CFB4F80811F |
:1092F0008093240A8091240A893110F488E102C005 |
:109300008F3F11F48093240A80913C080E945748B3 |
:109310008093170480913F08883F38F0EFEFF0E02A |
:10932000E81BF109E55CFB4F80818093740180911B |
:109330004108883F38F0EFEFF0E0E81BF109E55C09 |
:10934000FB4F80818093720180914908883F38F0FB |
:10935000EFEFF0E0E81BF109E55CFB4F80818093C3 |
:10936000730180914B08883F38F0EFEFF0E0E81B85 |
:10937000F109E55CFB4F808180936F0180914C087F |
:10938000883F38F0EFEFF0E0E81BF109E55CFB4FB8 |
:1093900080818093710180914D08883F38F0EFEF14 |
:1093A000F0E0E81BF109E55CFB4F808180936E01E2 |
:1093B00080914E08883F38F0EFEFF0E0E81BF109AC |
:1093C000E55CFB4F808180936D0180915408883F5C |
:1093D00038F0EFEFF0E0E81BF109E55CFB4F80812E |
:1093E00080936B0180915508883F38F0EFEFF0E0F3 |
:1093F000E81BF109E55CFB4F8081809316048091A6 |
:109400005608883F38F0EFEFF0E0E81BF109E55C23 |
:10941000FB4F80818093150480915708883F38F076 |
:10942000EFEFF0E0E81BF109E55CFB4F80818093F2 |
:10943000140480915808883F38F0EFEFF0E0E81B03 |
:10944000F109E55CFB4F80818093130480917208E1 |
:10945000883F38F0EFEFF0E0E81BF109E55CFB4FE7 |
:1094600080818093120480917308883F38F0EFEF79 |
:10947000F0E0E81BF109E55CFB4F8081809311046B |
:1094800080917408883F38F0EFEFF0E0E81BF109B5 |
:10949000E55CFB4F80818093100480917508883FC4 |
:1094A00038F0EFEFF0E0E81BF109E55CFB4F80815D |
:1094B00080930F0480915908883F38F0EFEFF0E077 |
:1094C000E81BF109E55CFB4F808180936901809185 |
:1094D0005D08883F38F0EFEFF0E0E81BF109E55C4C |
:1094E000FB4F80818093680180915A08883F38F053 |
:1094F000EFEFF0E0E81BF109E55CFB4F8081809322 |
:10950000670180915E08883F38F0EFEFF0E0E81BDC |
:10951000F109E55CFB4F80818093660180916708CB |
:10952000883F38F0EFEFF0E0E81BF109E55CFB4F16 |
:1095300080818093650180916A08883F38F0EFEF61 |
:10954000F0E0E81BF109E55CFB4F8081809364014A |
:1095500080916B08883F38F0EFEFF0E0E81BF109ED |
:10956000E55CFB4F80818093630180916C08883FAC |
:1095700038F0EFEFF0E0E81BF109E55CFB4F80818C |
:109580008093620180919408883F38F0EFEFF0E01B |
:10959000E81BF109E55CFB4F80818093030A909101 |
:1095A0001305992321F08091030A981720F08091E8 |
:1095B000030A882311F49093030A80913908809359 |
:1095C000400A80919C088093230A80917108883F0B |
:1095D00038F0EFEFF0E0E81BF109E55CFB4F80812C |
:1095E0008093610180918D08883F38F0EFEFF0E0C3 |
:1095F000E81BF109E55CFB4F80818093570A80915D |
:109600006B01282F33272F5F3F4F8CE398E2B9017E |
:109610000E94069D709378016093770180914708BE |
:109620008093480A8091460880930B0AE0918F0846 |
:10963000EE2309F449C081E080930E04FF27EE0F6A |
:10964000FF1FEE59F64F80819181805C9F4F14F48B |
:1096500010920E048091790120910E04821721F15D |
:109660008330F8F43091A601222351F08CED95E07F |
:109670009093140380931303332369F48EE209C09B |
:1096800088EC90E09093140380931303332319F430 |
:1096900087E18093A60185E08093240420937901DB |
:1096A00003C08150809379018091970A9091980A24 |
:1096B00097FF0FC080910E04882359F08091A10577 |
:1096C00080688093A10505C0E0930E048AE0809332 |
:1096D00079018091970A9091980A97FF1DC0809117 |
:1096E00039048823C9F080910E048823A9F0809161 |
:1096F0000A0190910B018F5F9F4F71F488E99AE303 |
:10970000909314038093130380E094EA90930B01E9 |
:1097100080930A0110920E0480910E04882321F098 |
:1097200080910004816003C0809100048E7F80934B |
:109730000004DF91CF910895A7E1B0E0E2EAFBE4F5 |
:109740000C94569D0E946340809101049927847176 |
:109750009070892B91F580919D0882FF27C08091A0 |
:109760001E0490911F040097F1F002E088359007E5 |
:10977000D4F49C0197FF02C02D5F3F4F359527958C |
:1097800035952795809151089927289FA001299FF9 |
:10979000500D389F500D1124CA0164E670E00E94FC |
:1097A000069DCB0106C08DE290E003C08091510878 |
:1097B00099279093FF038093FE032091FC0330913F |
:1097C000FD0355E72033350759F4109245041092F4 |
:1097D000440480910B0A99279093FF038093FE0322 |
:1097E00060914404709145047A83698380910B0AE7 |
:1097F00099270A966817790714F49A8389838091C8 |
:109800003A04843608F06AC08091000482FD66C084 |
:109810008091DA049091DB04009731F001979093E6 |
:10982000DB048093DA040BC0109239049093030494 |
:1098300080930204809101048D7E809301048091C5 |
:1098400002018A3011F0843110F0289A01C0289862 |
:109850008091020490910304895E9340E0F180912D |
:10986000DB0A8536C0F18091FE039091FF039A8355 |
:1098700089838091010480618093010480912D0887 |
:10988000A82FBB27AA0FBB1FFD01E855F64F118279 |
:10989000108280912E08282F3327220F331FC901F1 |
:1098A0008855964FFC0111821082AE59B64F119621 |
:1098B0001C921E922E59364FD90111961C921E925F |
:1098C00080913008E82FFF27EE0FFF1FEE59F64F6B |
:1098D0001182108277C51092390474C580913A04C0 |
:1098E0008D3808F445C590919808992309F445C02E |
:1098F00080919908882309F440C0E92FFF27EE0FD3 |
:10990000FF1FEE59F64F80819181C397BCF0809183 |
:109910008E01823361F48091000485FF08C080913C |
:10992000000480648093000480E38093A60180910A |
:1099300000048F778093000486E917C080819181AD |
:109940008E5C9F4FACF480918E01863941F48091FA |
:1099500000048068809300048FE28093A6018091C8 |
:1099600000048F7B8093000482E380938E0105C006 |
:10997000809100048F7380930004809101048F7E96 |
:10998000809301049091520882E3989FC0011124B2 |
:109990009093DB048093DA04E981FA81B9978CF023 |
:1099A00080913904882369F0809102049091030426 |
:1099B000FFEF8F3F9F0729F0019690930304809358 |
:1099C000020440910204509103044F3F510509F0F5 |
:1099D00048F510925C0410925D0410925E0410929F |
:1099E0005F04109258041092590410925A04109275 |
:1099F0005B041092C6041092C7041092C80410921F |
:109A0000C9041092640410926504109266041092C6 |
:109A100067048091000480628093000484E6809350 |
:109A20008E0135C180910104826080930104809190 |
:109A3000000485FF98C08091140599279C0124702B |
:109A4000307082FD04C08091000486FF2AC080919E |
:109A50003B018D3331F58091F903882311F180E5C5 |
:109A60008093290484EF91E0A0E0B0E080932A0481 |
:109A700090932B04A0932C04B0932D048093300476 |
:109A800090933104A0933204B093330488EE93E0B2 |
:109A900090938D0180938C01232B19F08DE080939E |
:109AA000A60180911F0390912003A0912103B09102 |
:109AB000220387399105A105B1058CF48091340406 |
:109AC00090913504A0913604B0913704825A9E4F8C |
:109AD000AF4FBF4F24F08091400A80FD21C088EE37 |
:109AE00093E090938D0180938C018091000486FF18 |
:109AF0000FC0109229048CE291E0A0E0B0E08093C6 |
:109B0000300490933104A0933204B093330403C023 |
:109B100080E38093A601809100048F7180930004FC |
:109B200010925C0410925D0410925E0410925F0427 |
:109B3000109258041092590410925A0410925B0427 |
:109B400010926404109265041092660410926704E7 |
:109B5000495E534008F49BC088EE93E09093030461 |
:109B60008093020494C08091000487FF1AC0809102 |
:109B70003B01863711F08D33A1F48091F9038823DE |
:109B800081F0809199088093290480EE91EBAFEFEA |
:109B9000BFEF80932A0490932B04A0932C04B093DE |
:109BA0002D0420918C0130918D0143E0283E340733 |
:109BB00008F048C02F5F3F4F30938D0120938C01F8 |
:109BC00010925C0410925D0410925E0410925F0487 |
:109BD000109258041092590410925A0410925B0487 |
:109BE0001092640410926504109266041092670447 |
:109BF00080911F0390912003A0912103B091220333 |
:109C00008C529140A040B040809330049093310436 |
:109C1000A0933204B0933304285E3340C1F58091A1 |
:109C2000000487FF34C080913B018B3281F1809129 |
:109C300000048F77809300048091000480628093F9 |
:109C4000000425C08091F903882309F180913B012C |
:109C5000863711F08D32D9F4809134049091350417 |
:109C6000A0913604B0913704885E9340A040B04084 |
:109C700074F48091CC079091CD078D5A93403CF0BD |
:109C800010928D0110928C018EE08093A60180913C |
:109C90002F08E82FFF27EE0FFF1FEE59F64F8081A8 |
:109CA0009181813591050CF454C12091390422230E |
:109CB00009F04FC180913008E82FFF27EE0FFF1FFA |
:109CC000EE59F64F808191818C3491050CF411C1CD |
:109CD0008091DC048F5F8093DC04893C08F439C1F7 |
:109CE0002093DC04109203041092020430912D089A |
:109CF000E32FFF27EE0FFF1FEE59F64F8081918172 |
:109D000087349105B4F480912E08E82FFF27EE0FD9 |
:109D1000FF1FEE59F64F808191810190F081E02D77 |
:109D2000F7FF03C0F095E195FF4FE734F1050CF420 |
:109D300078C041E020912E08A22FBB27AA0FBB1F9D |
:109D4000AE59B64F8D919C9111978734910544F08F |
:109D5000E32FFF27EE0FFF1FEE59F64F8081918111 |
:109D60008D919C918734910574F080912D08E82F96 |
:109D7000FF27EE0FFF1FEE59F64F80819181873448 |
:109D800091050CF042E0E22FFF27EE0FFF1FEE5986 |
:109D9000F64F808191818634910574F480912D086D |
:109DA000E82FFF27EE0FFF1FEE59F64F80819181BC |
:109DB000873491050CF043E0E22FFF27EE0FFF1FE1 |
:109DC000EE59F64F808191818A5B9F4F74F48091A8 |
:109DD0002D08E82FFF27EE0FFF1FEE59F64F808169 |
:109DE0009181873491050CF044E0E22FFF27EE0FBC |
:109DF000FF1FEE59F64F808191818A5B9F4F74F46B |
:109E000080912D08E82FFF27EE0FFF1FEE59F64F28 |
:109E100080819181863491050CF445E0842F0E9465 |
:109E20007E3180912E08E82FFF27EE0FFF1FEE599D |
:109E3000F64F808191810190F081E02DF7FF03C002 |
:109E4000F095E195FF4F7E97CCF480912D08E82F97 |
:109E5000FF27EE0FFF1FEE59F64F808191818A5B3D |
:109E60009F4F64F481E08093BC051092250488EE36 |
:109E700093E090931403809313036BC080910001CF |
:109E80000E94293180E00E943B0A809153080E9481 |
:109E90002E988091400A80FF10C080911601909109 |
:109EA0001701875B934038F4809116019091170158 |
:109EB0008E5E924010F40E94C01E81E00E942C3DF4 |
:109EC000982F8093250421E020931103579A8091C5 |
:109ED000A105882311F087E006C0992319F4209387 |
:109EE000A60103C088E18093A60185E08093420526 |
:109EF00027C080819181855B9F4F4CF58091DC0468 |
:109F00008F5F8093DC04893C20F1209339042093F7 |
:109F1000DC04109203041092020482E00E942C3DA3 |
:109F2000982F809325048091A105882311F087E064 |
:109F300005C0992311F481E001C088E18093A60156 |
:109F400068E770E0809100010E94483C02C02093C5 |
:109F5000DC0480912F08E82FFF27EE0FFF1FEE593A |
:109F6000F64F808191818C599F4F0CF0FAC120915E |
:109F70009008E22FFF27EF77F070EE0FFF1FE855F4 |
:109F8000F64F80819181069714F084E606C08081A7 |
:109F900091818B5F9F4F1CF48CE98093DF0480914B |
:109FA0003904E0913008882309F03EC1FF27EE0F05 |
:109FB000FF1FEE59F64F808191818C599F4F9CF481 |
:109FC00080919D0883FD0BC0E22FFF27EE0FFF1F3E |
:109FD000EE59F64F80819181855B9F4FDCF0809137 |
:109FE00090088823B9F080919D0883FF1AC1809161 |
:109FF0009008E82FFF27EE0FFF1FEE59F64F8081E4 |
:10A000009181875F9F4F0CF40CC18091DF048436EF |
:10A0100009F007C120912504222329F08091010431 |
:10A020008860809301048091180190911901A0919A |
:10A030001A01B0911B018093CE079093CF07A09394 |
:10A04000D007B093D10710921F03109220031092F3 |
:10A0500021031092220310923404109235041092BE |
:10A06000360410923704109228031092290310929C |
:10A070002A0310922B0380912D08E82FFF27EE0F63 |
:10A08000FF1FEE59F64F808191818D599F4FACF49F |
:10A0900080912E08E82FFF27EE0FFF1FEE59F64F95 |
:10A0A000808191810190F081E02DF7FF03C0F09550 |
:10A0B000E195FF4FE436F10534F480919008882350 |
:10A0C00011F48093DD048091DD048F5F8093DD04C3 |
:10A0D0008E3F08F438C11092DD048091A1058823D9 |
:10A0E00009F092C0222309F48FC0809118058823BB |
:10A0F00009F08AC081E090E0909303048093020409 |
:10A1000081E0809339041092C6041092C704109223 |
:10A11000C8041092C904109264041092650410924D |
:10A120006604109267041092600410926104109209 |
:10A1300062041092630480914808E82EFF240027EF |
:10A1400011278091440A9091450A9C01442737FDCC |
:10A150004095542FC801B7010E94C79CDC01CB0178 |
:10A160008093740490937504A0937604B09377045D |
:10A170008091540A9091550A9C01442737FD4095DF |
:10A18000542FC801B7010E94C79CDC01CB0180930A |
:10A190006C0490936D04A0936E04B0936F0480914F |
:10A1A000940490919504A0919604B09197048093A3 |
:10A1B000700490937104A0937204B093730480911F |
:10A1C0008C0490918D04A0918E04B0918F048093A3 |
:10A1D000680490936904A0936A04B0936B0410928E |
:10A1E0005C0410925D0410925E0410925F04109261 |
:10A1F00058041092590410925A0410925B0484E699 |
:10A200008093240484E39AC08CED95E0909314032A |
:10A210008093130380912504882309F094C081E082 |
:10A220008DC01092DD048FC0FF27EE0FFF1FEE5987 |
:10A23000F64F80819181853691059CF080919D0833 |
:10A2400083FD0BC0E22FFF27EE0FFF1FEE59F64FE5 |
:10A2500080819181855B9F4FDCF0809190088823FD |
:10A26000B9F080919D0883FF6CC080919008E82F21 |
:10A27000FF27EE0FFF1FEE59F64F808191818E5C14 |
:10A280009F4F0CF05EC08091DF048C3909F059C0FB |
:10A2900080912D08E82FFF27EE0FFF1FEE59F64F94 |
:10A2A000808191818D599F4FACF480912E08E82FC9 |
:10A2B000FF27EE0FFF1FEE59F64F8081918101902D |
:10A2C000F081E02DF7FF03C0F095E195FF4FE436F4 |
:10A2D000F1053CF480919008882319F48093DE0402 |
:10A2E00018C010925C0410925D0410925E041092EB |
:10A2F0005F04109258041092590410925A0410925C |
:10A300005B0410924B0410924A041092490410927C |
:10A3100048048091DE048F5F8093DE048B3F98F0C9 |
:10A32000109239041092DE04109203041092020479 |
:10A33000809100048F718093000486E28093A601CF |
:10A3400002C01092DE048091FC039091FD03F3E0C3 |
:10A35000883E9F07B8F501969093FD038093FC0318 |
:10A3600031C01092DF041092FD031092FC032AC04A |
:10A370002E5E324038F180915F0A9091600A8059D8 |
:10A38000914000F58091340490913504A0913604F9 |
:10A39000B09137048C5D9540A040B0409CF480E3C0 |
:10A3A00095E79093FD038093FC03809102049091C4 |
:10A3B00003048A5E934030F089EE93E090930304A7 |
:10A3C0008093020480913A01815080933A018091F8 |
:10A3D0003A018F3F21F08091010484FFA9C30E94BC |
:10A3E0007348B09043088091E8049091E9049C017F |
:10A3F000220F331F280F391FC0902D08AC2DBB270B |
:10A40000AA0FBB1FFD01EE59F64F4B2D552780813A |
:10A410009181849FB001859F700D949F700D1124D0 |
:10A42000260F371F37FF02C02D5F3F4FB9017595CB |
:10A43000679575956795A855B64F80914408082F84 |
:10A4400011278D919C91809FD001819FB00D909F8D |
:10A45000B00D11246A0F7B1F7093E9046093E80428 |
:10A460008091EA049091EB049C01220F331F280F86 |
:10A47000391FD0902E08AD2DBB27AA0FBB1FFD01A1 |
:10A48000EE59F64F80819181849FF001859FF00DF8 |
:10A49000949FF00D11242E0F3F1F37FF02C02D5F38 |
:10A4A0003F4FA9015595479555954795A855B64FE6 |
:10A4B0008D919C91809F7001819FF00C909FF00C7A |
:10A4C00011244E0D5F1D5093EB044093EA048091DC |
:10A4D0000E04882309F448C0CB0177FD0396DC0104 |
:10A4E000B595A795B595A795CA0157FD0396FC01AB |
:10A4F000F595E795F595E79580919F01682F77276A |
:10A5000067FD70956A9F90016B9F300D7A9F300DAB |
:10A51000112480911A05482F552747FD50954E9FCD |
:10A52000C0014F9F900D5E9F900D1124280F391F81 |
:10A5300037FF02C0295F3F4F93E0359527959A95E5 |
:10A54000E1F730934B0420934A046E9F90016F9F74 |
:10A55000300D7E9F300D11244A9FC0014B9F900DFE |
:10A560005A9F900D11243FC080918E08E82FFF273D |
:10A57000EE5BFE4F868180939F01908190931A0538 |
:10A58000A82FBB27A7FDB095A69F9001A79F300DD0 |
:10A59000B69F300D1124E92FFF27E7FDF095E49FCA |
:10A5A000C001E59F900DF49F900D1124280F391FD5 |
:10A5B00037FF02C0295F3F4F83E0359527958A9585 |
:10A5C000E1F730934B0420934A04A49F9001A59F88 |
:10A5D000300DB49F300D1124E69FC001E79F900D10 |
:10A5E000F69F900D1124281B390B37FF02C0295FFD |
:10A5F0003F4F03E0359527950A95E1F730934904DD |
:10A600002093480480913008E82FFF27EE0FFF1FAA |
:10A61000EE59F64F80819181909581959F4F90934F |
:10A620004704809346048530910514F0049705C0D3 |
:10A630000FEF8C3F900734F4049690934704809377 |
:10A64000460404C010924704109246048091060507 |
:10A65000882309F43EC0282F332780914A04909123 |
:10A660004B0497FD079613E0959587951A95E1F7AA |
:10A67000289FA001299F500D389F500D1124CA0119 |
:10A6800057FD0F96B4E095958795BA95E1F79093AD |
:10A690004B0480934A04809148049091490497FDAB |
:10A6A0000796A3E095958795AA95E1F7289FB001B5 |
:10A6B000299F700D389F700D1124CB0177FD0F96E7 |
:10A6C000F4E095958795FA95E1F790934904809386 |
:10A6D000480480904A0490904B0480910905909121 |
:10A6E0000A05881A990A90924B0480924A040091B4 |
:10A6F0004804109149048091070590910805081BB2 |
:10A70000190B109349040093480480912F08E82FF7 |
:10A71000FF27EE0FFF1FEE59F64FE080F1808FE725 |
:10A7200090E0E80EF91EF0924504E0924404809116 |
:10A7300070019927AA2797FDA095BA2FBC01CD01DA |
:10A740000E943B9CDC01CB0120E030E040E251E480 |
:10A75000BC01CD010E94A99BDC01CB01BC01CD0154 |
:10A760000E940D9CDC01CB0180934E0A80916F0109 |
:10A770008093250A80916E019927AA2797FDA095BD |
:10A78000BA2FBC01CD010E943B9CDC01CB0120E033 |
:10A7900030E040E251E4BC01CD010E94A99BDC0104 |
:10A7A000CB01BC01CD010E940D9CDC01CB0180934B |
:10A7B000FE0980916D018093140A8091C80580FF85 |
:10A7C00059C08091570A813808F454C08091C1055E |
:10A7D000992787FD90952B2D3327829FD001839F4A |
:10A7E000B00D929FB00D11248A0E9B1E90924B04C7 |
:10A7F00080924A048091C205992787FD9095829F97 |
:10A80000F001839FF00D929FF00D11240E0F1F1F7A |
:10A8100010934904009348048091C305282F3327DF |
:10A8200027FD30958091460490914704820F931F35 |
:10A8300090934704809346048091C505282F3327C1 |
:10A8400027FD309580913E089927289F8001299FF8 |
:10A85000100D389F100D11241093410100934001F9 |
:10A860008091C40599278E159F0524F49093450483 |
:10A8700080934404809144049091450497FF04C060 |
:10A8800010924504109244048091400A82FF02C055 |
:10A890001092250A40914A0450914B04CA0157FD79 |
:10A8A00003969C01359527953595279537FF03C06D |
:10A8B000309521953F4F80910604909107048217AF |
:10A8C0009307B4F4CA0157FF03C0909581959F4F39 |
:10A8D00097FD039695958795959587959093070491 |
:10A8E000809306048536910544F084E690E001C02B |
:10A8F0000197909307048093060440914804509177 |
:10A900004904CA0157FD03969C0135952795359555 |
:10A91000279537FF03C0309521953F4F8091040460 |
:10A920009091050482179307B4F4CA0157FF03C03E |
:10A93000909581959F4F97FD039695958795959551 |
:10A94000879590930504809304048536910544F01F |
:10A9500084E690E001C0019790930504809304047D |
:10A960008091010484FF08C010920704109206042D |
:10A970001092050410920404ED2DFF27EE0FFF1F27 |
:10A98000EE59F64F40916808242F3327808191813A |
:10A990002817390744F480919A0882FF04C081E0A7 |
:10A9A00080931B0413C0ED2DFF27EE0FFF1FEE5900 |
:10A9B000F64F842F992720916908821B91092081E5 |
:10A9C00031812817390714F410921B0440912E0886 |
:10A9D000E42FFF27EE0FFF1FEE59F64F5091680846 |
:10A9E000852F992722273327281B390B80819181B6 |
:10A9F0008217930744F480919A0883FF04C081E092 |
:10AA000080931A0416C080911A04882391F0E42FD1 |
:10AA1000FF27EE0FFF1FEE59F64F80916908992727 |
:10AA2000851B9109208131818217930714F41092BC |
:10AA30001A04EC2DFF27EE0FFF1FEE59F64F409141 |
:10AA40006808242F3327808191812817390744F41F |
:10AA500080919A0880FF04C081E08093180417C099 |
:10AA600080911804882399F0EC2DFF27EE0FFF1F2B |
:10AA7000EE59F64F842F992720916908821B91097E |
:10AA8000208131812817390714F41092180440915D |
:10AA90002D08E42FFF27EE0FFF1FEE59F64F5091C0 |
:10AAA0006808852F992722273327281B390B808197 |
:10AAB00091818217930744F480919A0881FF04C022 |
:10AAC00081E08093190416C080911904882391F0C5 |
:10AAD000E42FFF27EE0FFF1FEE59F64F8091690814 |
:10AAE0009927851B9109208131818217930714F4DE |
:10AAF0001092190480911B04882319F480911A0480 |
:10AB0000811181E080931C0480911804882321F432 |
:10AB100080911904882351F081E080931D041092E4 |
:10AB20001C0410921B0410921A0402C080931D048E |
:10AB300080911C04882321F480911D04882369F0EE |
:10AB400080916708992729813A818217930714F425 |
:10AB50009A83898381E0809350048091000499272F |
:10AB60009C012470307082FF2DC080910905909166 |
:10AB70000A05909581959F4F90934B0480934A04CA |
:10AB80008091070590910805909581959F4F90932E |
:10AB900049048093480480917C0190917D019093B9 |
:10ABA0004504809344048091400A8B778B668093A0 |
:10ABB000400A8091230A8C7B8093230A88EC80933F |
:10ABC00017041EC08091010484FF1AC0309347040B |
:10ABD0002093460430934B0420934A043093490455 |
:10ABE000209348049AE590934E0A88E78093250ABB |
:10ABF0009093FE098093140A10921C0410921D0475 |
:10AC00008091170A9091180AA091190AB0911A0A16 |
:10AC100020919404309195044091960450919704AA |
:10AC2000820F931FA41FB51F8093170A9093180AD1 |
:10AC3000A093190AB0931A0A80911F0A9091200AD2 |
:10AC4000A091210AB091220AE0908C04F0908D042A |
:10AC500000918E0410918F04EB82FC820D831E8381 |
:10AC60008E0D9F1DA01FB11F80931F0A9093200A75 |
:10AC7000A093210AB093220A80910C0A90910D0AA8 |
:10AC8000A0910E0AB0910F0AE0909004F090910408 |
:10AC90000091920410919304EF82F88609871A8735 |
:10ACA0008E0D9F1DA01FB11F80930C0A90930D0A5B |
:10ACB000A0930E0AB0930F0A8091FF099091000AA9 |
:10ACC000A091010AB091020AE0908804F0908904F2 |
:10ACD00000918A0410918B04EB86FC860D871E87F9 |
:10ACE0008E0D9F1DA01FB11F8093FF099093000A36 |
:10ACF000A093010AB093020AF0901D04FF86FF2082 |
:10AD000029F480911C04882309F460C01092840403 |
:10AD10001092850410928604109287041092800489 |
:10AD20001092810410928204109283041092170AE8 |
:10AD30001092180A1092190A10921A0A10921F0AF9 |
:10AD40001092200A1092210A1092220A10920C0AE4 |
:10AD500010920D0A10920E0A10920F0A1092FF091B |
:10AD60001092000A1092010A1092020A8091740453 |
:10AD700090917504A0917604B0917704809370044B |
:10AD800090937104A0937204B093730480916C0447 |
:10AD900090916D04A0916E04B0916F04809368044B |
:10ADA00090936904A0936A04B0936B0410922403F7 |
:10ADB0001092230310922104109220041092230475 |
:10ADC000109222040F85002309F0D0C180911C0449 |
:10ADD000882309F0CBC18091CC079091CD07815099 |
:10ADE00092402CF480913904882309F4BFC19090DB |
:10ADF000D00AA09048082090440A3090450A40901C |
:10AE0000540A5090550A19140CF0BBC0BB24CC2432 |
:10AE1000DD24CA01B901A60195010E943B9D79017B |
:10AE20008A018091990A90919A0A281A390AC101D7 |
:10AE3000AA2797FDA095BA2FE81AF90A0A0B1B0B4F |
:10AE40006B817C818D819E81A60195010E943B9D35 |
:10AE500059016A0180919B0A90919C0A481A590AEB |
:10AE6000C201AA2797FDA095BA2FA81AB90ACA0A43 |
:10AE7000DB0A292C332427FC3094432C532CC801A3 |
:10AE8000B701A20191010E94C79C97FF04C06150C5 |
:10AE90007E4F8F4F9F4F3B014C0109E09594879463 |
:10AEA000779467940A95D1F7C601B501A201910183 |
:10AEB0000E94C79C97FF04C061507E4F8F4F9F4FE9 |
:10AEC0005B016C0119E0D594C794B794A7941A95C7 |
:10AED000D1F78091060490910704813491053CF4E8 |
:10AEE000809104049091050481349105D4F0D4013B |
:10AEF000C30197FE03C00196A11DB11D3C014D0188 |
:10AF00009594879477946794D601C501D7FE03C0C2 |
:10AF10000196A11DB11D5C016D01D594C794B79434 |
:10AF2000A7948091D20A282F332727FD3095432FED |
:10AF3000532F261537054805590514F439014A01E0 |
:10AF4000992787FD9095909581959F4FAA2797FD0A |
:10AF5000A095BA2F681679068A069B0614F43C0160 |
:10AF60004D012A153B054C055D0514F459016A0194 |
:10AF7000A816B906CA06DB060CF0D0C05C016D014C |
:10AF8000CDC0EA2CFF2400271127CA01B901A8016E |
:10AF900097010E943B9D39014A01C101AA2797FDF3 |
:10AFA000A095BA2F681A790A8A0A9B0A6B817C815C |
:10AFB0008D819E81A80197010E943B9D59016A01E4 |
:10AFC000C201AA2797FDA095BA2FA81AB90ACA0AE2 |
:10AFD000DB0AD401C30197FE03C00F96A11DB11D6A |
:10AFE0003C014D01F4E09594879477946794FA9529 |
:10AFF000D1F7D601C501D7FE03C00F96A11DB11D23 |
:10B000005C016D01E4E0D594C794B794A794EA95E8 |
:10B01000D1F78091060490910704813491053CF4A6 |
:10B02000809104049091050481349105A4F0C40139 |
:10B03000B30123E030E040E050E00E943B9D390145 |
:10B040004A01C601B50123E030E040E050E00E9433 |
:10B050003B9D59016A0180913008E82FFF27EE0FD0 |
:10B06000FF1FEE59F64F808191810190F081E02D14 |
:10B07000F7FF03C0F095E195FF4F7A97A4F0C40164 |
:10B08000B30123E030E040E050E00E943B9D3901F5 |
:10B090004A01C601B50123E030E040E050E00E94E3 |
:10B0A0003B9D59016A0189E18093880121E2621682 |
:10B0B0007104810491042CF070E2672E712C812CB4 |
:10B0C000912C30EE63163FEF73063FEF83063FEFA0 |
:10B0D000930644F460EE662E6FEF762E6FEF862EA9 |
:10B0E0006FEF962E41E2A416B104C104D1042CF0F6 |
:10B0F00050E2A52EB12CC12CD12C50EEA5165FEF3D |
:10B10000B5065FEFC5065FEFD50644F440EEA42E0A |
:10B110004FEFB42E4FEFC42E4FEFD42E8091740416 |
:10B1200090917504A0917604B091770486199709DF |
:10B13000A809B9098093740490937504A0937604C8 |
:10B14000B093770480916C0490916D04A0916E048B |
:10B15000B0916F048A199B09AC09BD0980936C04F6 |
:10B1600090936D04A0936E04B0936F0480912303B9 |
:10B17000909124038F3F910509F008F4C4C56F85B1 |
:10B18000662309F04EC580911C04882309F049C547 |
:10B1900080915004882309F044C570917008788B21 |
:10B1A000772309F43EC58091170A9091180AA0915F |
:10B1B000190AB0911A0AB7FF04C081509F4FAF4FD0 |
:10B1C000BF4FE92EFA2E0B2F112707FD1A95E0929B |
:10B1D000170AF092180A0093190A10931A0A80911C |
:10B1E0001F0A9091200AA091210AB091220AB7FF6C |
:10B1F00004C081509F4FAF4FBF4F892F9A2FAB2F65 |
:10B20000BB27A7FDBA95898B9A8BAB8BBC8B8093A0 |
:10B210001F0A9093200AA093210AB093220A8091DA |
:10B220004808A82EBB24CC24DD242091840430912E |
:10B2300085044091860450918704C601B5010E949F |
:10B24000C79C97FF04C061507F4F8F4F9F4F672E61 |
:10B25000782E892E992487FC9A94609284047092A7 |
:10B260008504809286049092870420918004309116 |
:10B2700081044091820450918304C601B5010E946B |
:10B28000C79C97FF04C061507F4F8F4F9F4F272E61 |
:10B29000382E492E552447FC5A942092800430922F |
:10B2A0008104409282045092830480917C049091A6 |
:10B2B0007D04A0917E04B0917F04B7FF04C081504B |
:10B2C0009F4FAF4FBF4F892F9A2FAB2FBB27A7FDA3 |
:10B2D000BA9580937C0490937D04A0937E04B093F0 |
:10B2E0007F04D801C70186199709A809B909809375 |
:10B2F000D2049093D304A093D404B093D5042091A6 |
:10B300006F08E22EFF2400271127BC01CD01A80100 |
:10B3100097010E943B9D59016A012093E0043093FC |
:10B32000E1044093E2045093E30489899A89AB894C |
:10B33000BC8982199309A409B5098093D604909316 |
:10B34000D704A093D804B093D904BC01CD01A801BF |
:10B3500097010E943B9D2093E4043093E5044093C1 |
:10B36000E6045093E704D601C501D7FE04C081501E |
:10B370009F4FAF4FBF4F892F9A2FAB2FBB27A7FDF2 |
:10B38000BA95909321048093200457FF04C0215064 |
:10B390003F4F4F4F5F4FBB2757FDBA95A52F942FB7 |
:10B3A000832F90932304809322048091060490912C |
:10B3B000070481349105DCF4809104049091050424 |
:10B3C00081349105A4F480913008E82FFF27EE0F17 |
:10B3D000FF1FEE59F64F808191810190F081E02DA1 |
:10B3E000F7FF03C0F095E195FF4F7A97E4F0809165 |
:10B3F000D00A8F3FC1F4809120049091210497FDE1 |
:10B4000001969595879590932104809320048091CF |
:10B4100022049091230497FD01969595879590932A |
:10B4200023048093220480910C0A90910D0AA0912C |
:10B430000E0AB0910F0AB7FF04C081509F4FAF4F63 |
:10B44000BF4F892F9A2FAB2FBB27A7FDBA958093AB |
:10B450000C0A90930D0AA0930E0AB0930F0A8091E4 |
:10B46000FF099091000AA091010AB091020AB7FF6A |
:10B4700004C081509F4FAF4FBF4F892F9A2FAB2FE2 |
:10B48000BB27A7FDBA958093FF099093000AA0936C |
:10B49000010AB093020A8091940490919504A091BE |
:10B4A0009604B09197042F81388549855A85281BC9 |
:10B4B000390B4A0B5B0B2093CA043093CB044093A7 |
:10B4C000CC045093CD0480918C0490918D04A09174 |
:10B4D0008E04B0918F04EB84FC840D851E85E81AE0 |
:10B4E000F90A0A0B1B0BE092CE04F092CF040093F2 |
:10B4F000D0041093D1042093D2043093D30440930A |
:10B50000D4045093D504E092D604F092D70400936B |
:10B51000D8041093D9048091700490917104A09183 |
:10B520007204B0917304821B930BA40BB50B809330 |
:10B53000700490937104A0937204B093730480918B |
:10B54000680490916904A0916A04B0916B048E190B |
:10B550009F09A00BB10B8093680490936904A0939A |
:10B560006A04B0936B0488898823E1F020914E042B |
:10B5700030914F04213831054CF08091A604909110 |
:10B58000A70401969093A7048093A60420583F4FE8 |
:10B590004CF48091A6049091A70401979093A7047E |
:10B5A0008093A60410924F0410924E0481E090E024 |
:10B5B0009093ED048093EC04E090D204F090D304D7 |
:10B5C0000091D4041091D504D801C70117FF07C01A |
:10B5D00088279927DC018E199F09A00BB10B815098 |
:10B5E0009240A040B04034F084E090E09093ED04AD |
:10B5F0008093EC048091F2049091F304A091F40400 |
:10B60000B091F5042091170A3091180A4091190A57 |
:10B6100050911A0A821B930BA40BB50B815E914BC0 |
:10B62000AF4FBF4F8F539C49A040B04028F080914E |
:10B63000D10A89310CF4FFC021E0E21620E1F206C4 |
:10B6400020E0020720E012070CF473C08091EE04A2 |
:10B65000882309F46AC0D801C70117FF07C08827EB |
:10B660009927DC018E199F09A00BB10B9C01AD013C |
:10B67000B7FF04C021503E4F4F4F5F4FF9E0559543 |
:10B68000479537952795FA95D1F78091EC049091DD |
:10B69000ED04820F931F9093ED048093EC04D80186 |
:10B6A000C70117FF03C00796A11DB11DE3E0B595C3 |
:10B6B000A79597958795EA95D1F78093E0049093A5 |
:10B6C000E104A093E204B093E30489589341A040BD |
:10B6D000B04064F088E893E1A0E0B0E08093E0043B |
:10B6E0009093E104A093E204B093E3042091E0047A |
:10B6F0003091E1044091E2045091E30457FF04C00B |
:10B7000021503F4F4F4F5F4F232F342F452F552749 |
:10B7100047FD5A958091200490912104820F931F38 |
:10B72000909321048093200406C081E08093EE046E |
:10B7300002C01092EE0440E0E41640EFF4064FEF32 |
:10B7400004074FEF14070CF073C08091EF048823B7 |
:10B7500009F46AC0D801C70117FF07C088279927D5 |
:10B76000DC018E199F09A00BB10B9C01AD01B7FF45 |
:10B7700004C021503E4F4F4F5F4F69E055954795AC |
:10B78000379527956A95D1F78091EC049091ED0457 |
:10B79000820F931F9093ED048093EC04D801C701AE |
:10B7A00017FF03C00796A11DB11D23E0B595A7950E |
:10B7B000979587952A95D1F78093E0049093E104BB |
:10B7C000A093E204B093E30488579C4EAF4FBF4F61 |
:10B7D00064F488E79CEEAFEFBFEF8093E0049093B2 |
:10B7E000E104A093E204B093E3042091E0043091DB |
:10B7F000E1044091E2045091E30457FF04C021505A |
:10B800003F4F4F4F5F4F232F342F452F552747FD75 |
:10B810005A958091200490912104820F931F909358 |
:10B8200021048093200411C081E08093EF040DC0B7 |
:10B830001092EF040AC01092ED041092EC0484E61A |
:10B8400090E090938701809386016889262F3327A3 |
:10B850008091EC049091ED042817390724F430937B |
:10B86000ED042093EC041091D10A112379F0212FDB |
:10B87000332727FD30958091EC049091ED04281733 |
:10B88000390724F43093ED042093EC044091D20462 |
:10B890005091D3046091D4047091D504413851057E |
:10B8A0006105710574F08091AA049091AB04209118 |
:10B8B000EC043091ED04820F931F9093AB048093BE |
:10B8C000AA0440585F4F6F4F7F4F74F48091AA04D1 |
:10B8D0009091AB042091EC043091ED04821B930B0A |
:10B8E0009093AB048093AA0481E090E09093ED04E0 |
:10B8F0008093EC04C090D604D090D704E090D80494 |
:10B90000F090D904D701C601F7FE07C08827992710 |
:10B91000DC018C199D09AE09BF0981509240A040FD |
:10B92000B04034F084E090E09093ED048093EC0418 |
:10B930008091F6049091F704A091F804B091F90475 |
:10B9400020911F0A3091200A4091210A5091220A29 |
:10B95000821B930BA40BB50B815E914BAF4FBF4F76 |
:10B960008F539C49A040B04018F019310CF4FFC02F |
:10B9700001E0C01600E1D00600E0E00600E0F006BD |
:10B980000CF473C08091F004882309F46AC0D701D5 |
:10B99000C601F7FE07C088279927DC018C199D098D |
:10B9A000AE09BF099C01AD01B7FF04C021503E4F55 |
:10B9B0004F4F5F4F09E055954795379527950A9565 |
:10B9C000D1F78091EC049091ED04820F931F909336 |
:10B9D000ED048093EC04D701C601F7FE03C007967F |
:10B9E000A11DB11D13E0B595A795979587951A955B |
:10B9F000D1F78093E4049093E504A093E604B09318 |
:10BA0000E70489589341A040B04064F088E893E18E |
:10BA1000A0E0B0E08093E4049093E504A093E604F2 |
:10BA2000B093E7042091E4043091E5044091E604EA |
:10BA30005091E70457FF04C021503F4F4F4F5F4FD5 |
:10BA4000232F342F452F552747FD5A9580912204E7 |
:10BA500090912304820F931F9093230480932204D8 |
:10BA600006C081E08093F00402C01092F00420E050 |
:10BA7000C21620EFD2062FEFE2062FEFF2060CF0EF |
:10BA800073C08091F104882309F46AC0D701C6010C |
:10BA9000F7FE07C088279927DC018C199D09AE099C |
:10BAA000BF099C01AD01B7FF04C021503E4F4F4F6D |
:10BAB0005F4FE9E05595479537952795EA95D1F77A |
:10BAC0008091EC049091ED04820F931F9093ED040C |
:10BAD0008093EC04D701C601F7FE03C00796A11DB1 |
:10BAE000B11D73E0B595A795979587957A95D1F790 |
:10BAF0008093E4049093E504A093E604B093E704F4 |
:10BB000088579C4EAF4FBF4F64F488E79CEEAFEF71 |
:10BB1000BFEF8093E4049093E504A093E604B09310 |
:10BB2000E7042091E4043091E5044091E60450914B |
:10BB3000E70457FF04C021503F4F4F4F5F4F232F63 |
:10BB4000342F452F552747FD5A9580912204909117 |
:10BB50002304820F931F909323048093220411C027 |
:10BB600081E08093F1040DC01092F1040AC010929C |
:10BB7000ED041092EC0484E690E0909387018093AA |
:10BB800086014889242F33278091EC049091ED049D |
:10BB90002817390724F43093ED042093EC048091A6 |
:10BBA000D10A882379F0282F332727FD30958091FB |
:10BBB000EC049091ED042817390724F43093ED0438 |
:10BBC0002093EC044091D6045091D7046091D8049E |
:10BBD0007091D904413851056105710574F0809167 |
:10BBE000A8049091A9042091EC043091ED04820FF7 |
:10BBF000931F9093A9048093A80440585F4F6F4F00 |
:10BC00007F4FCCF48091A8049091A9042091EC047A |
:10BC10003091ED04821B930B9093A9048093A804A8 |
:10BC20000AC0109223041092220410922104109250 |
:10BC30002004109250048091250A882341F4109228 |
:10BC40002304109222041092210410922004809167 |
:10BC5000170A9091180AA091190AB0911A0A8093B4 |
:10BC6000F2049093F304A093F404B093F50480914C |
:10BC70001F0A9091200AA091210AB091220A809374 |
:10BC8000F6049093F704A093F804B093F90410928B |
:10BC900084041092850410928604109287041092F6 |
:10BCA00080041092810410928204109283041092F6 |
:10BCB0007C0410927D0410927E0410927F041092F6 |
:10BCC000170A1092180A1092190A10921A0A109262 |
:10BCD0001F0A1092200A1092210A1092220A109232 |
:10BCE0000C0A10920D0A10920E0A10920F0A10926E |
:10BCF000FF091092000A1092010A1092020A109293 |
:10BD0000240310922303E0904604F0904704C701F7 |
:10BD1000F7FE04C0882799278E199F0904973CF0E5 |
:10BD20008091400A84FD03C082E380932404109133 |
:10BD30004508A12EBB24CC24DD24B701882777FD3C |
:10BD40008095982F9701F7FE04C0222733272E19DC |
:10BD50003F09442737FD4095542F0E94C79C9B0103 |
:10BD6000AC01C601B5010E94C79C97FF04C0615099 |
:10BD70007E4F8F4F9F4F59E09595879577956795A3 |
:10BD80005A95D1F79B01812F99278E9DD0018F9DC8 |
:10BD9000B00D9E9DB00D1124CD01B7FD0396959574 |
:10BDA000879595958795280F391F8091FC03909171 |
:10BDB000FD038150924010F020E030E08091260495 |
:10BDC00090912704280F391F442737FD4095542FA1 |
:10BDD0002093C6043093C7044093C8045093C90409 |
:10BDE0008091640490916504A0916604B091670409 |
:10BDF000821B930BA40BB50B809364049093650492 |
:10BE0000A0936604B09367048155934CA040B04062 |
:10BE100064F080E593ECA0E0B0E08093640490933C |
:10BE20006504A0936604B0936704809164049091C4 |
:10BE30006504A0916604B0916704805B9C43AF4F9A |
:10BE4000BF4F64F480EB9CE3AFEFBFEF80936404DB |
:10BE500090936504A0936604B093670400918A01EF |
:10BE600010918B0117FDFCC08091400A83FFF8C040 |
:10BE700080918901815080938901882309F0F4C061 |
:10BE80008DE0809389018091940490919504A09114 |
:10BE90009604B0919704B7FF04C081509E4FAF4FF6 |
:10BEA000BF4F39E0B595A795979587953A95D1F706 |
:10BEB0007C0197FF04C0F094E194F108F394809121 |
:10BEC0008C0490918D04A0918E04B0918F04B7FFE3 |
:10BED00004C081509E4FAF4FBF4F29E0B595A79545 |
:10BEE000979587952A95D1F79C0197FF03C03095C8 |
:10BEF00021953F4FE216F3060CF47901B701F7FEE6 |
:10BF000002C0695F7F4F2B0183E0559447948A9567 |
:10BF1000E1F722E030E0420E531E6090500A70902C |
:10BF2000510A8090520A9090530A20913C0130911E |
:10BF30003D0140913E0150913F01C401B3010E9477 |
:10BF40003B9D59016A013093FD092093FC09021BB6 |
:10BF5000130BC801845E9D4F68E671E00E94069D48 |
:10BF60009C01245B3040809186019091870100976D |
:10BF700031F0019790938701809386011BC049E1BE |
:10BF8000E416F104BCF480914E0490914F04820FAA |
:10BF9000931F90934F0480934E0480912404882330 |
:10BFA00049F0815080932404882321F4B0925304F3 |
:10BFB000A09252048091860190918701892BF9F417 |
:10BFC000809188019927289FB001299F700D389F83 |
:10BFD000700D1124CB01B2010E94069DCB01AA274E |
:10BFE00097FDA095BA2F680E791E8A1E9B1E60923F |
:10BFF000500A7092510A8092520A9092530A80918C |
:10C000002404882369F5809152049091530420916F |
:10C01000FC093091FD09821B930B845E9D4F68E6FD |
:10C0200071E00E94069D9C01245B30408091730169 |
:10C0300086959927289FD001299FB00D389FB00D74 |
:10C0400011249D01B7FF02C0215F3F4F04E03595E9 |
:10C0500027950A95E1F7309327042093260404C01E |
:10C06000109227041092260480915004882381F0B6 |
:10C07000109258041092590410925A0410925B04C2 |
:10C0800010925C0410925D0410925E0410925F04A2 |
:10C09000F0901D04FF20F1F48091250A282F33270A |
:10C0A000442755278091940490919504A09196047B |
:10C0B000B0919704BC01CD010E94C79CDC01CB016B |
:10C0C000BC01CD0128EF3AE240E050E00E943B9DE8 |
:10C0D000390102C066247724E0901C04EE20F1F4BC |
:10C0E0008091250A282F33274427552780918C04D7 |
:10C0F00090918D04A0918E04B0918F04BC01CD016C |
:10C100000E94C79CDC01CB01BC01CD0128EF3AE2C3 |
:10C1100040E050E00E943B9D290102C04424552488 |
:10C120008091F9099091FA09893C91051CF088ECFD |
:10C1300090E005C088539F4F34F488E39FEF9093BD |
:10C14000FA098093F9098091040A9091050A893CC3 |
:10C1500091051CF088EC90E005C088539F4F34F4A3 |
:10C1600088E39FEF9093050A8093040A8091060A62 |
:10C170009091070AAA2797FDA095BA2F20914E0A01 |
:10C18000A22EBB24CC24DD24BC01CD01A601950147 |
:10C190000E94C79C9B01AC018091F9099091FA091A |
:10C1A000AA2797FDA095BA2F17E0880F991FAA1FFD |
:10C1B000BB1F1A95D1F7280F391F4A1F5B1F57FF66 |
:10C1C00004C0215C3F4F4F4F5F4FA6E05595479508 |
:10C1D00037952795AA95D1F78301020F131F109366 |
:10C1E000070A0093060A8091F7099091F809AA2797 |
:10C1F00097FDA095BA2FBC01CD01A60195010E9423 |
:10C20000C79C9B01AC018091040A9091050AAA2762 |
:10C2100097FDA095BA2FF7E0880F991FAA1FBB1FA3 |
:10C22000FA95D1F7280F391F4A1F5B1F57FF04C02B |
:10C23000215C3F4F4F4F5F4FE6E05595479537954F |
:10C240002795EA95D1F74201820E931E9092F80944 |
:10C250008092F7098091490A90914A0A880F991FA4 |
:10C26000AA2797FDA095BA2F2091FE0933274427CE |
:10C270005527BC01CD010E94C79C5B016C0197FF53 |
:10C2800008C02FE330E040E050E0A20EB31EC41E11 |
:10C29000D51E76E0D594C794B794A7947A95D1F734 |
:10C2A0008091140A282F332744275527809178043A |
:10C2B00090917904A0917A04B0917B04BC01CD01E6 |
:10C2C0000E94C79CDC01CB01BC01CD0120EF35E50C |
:10C2D00040E050E00E943B9DB501620F731F7093D8 |
:10C2E0004A0A6093490A0150104134F080E090E11D |
:10C2F0009093070A8093060A8091060A9091070A94 |
:10C300008050904F34F480E090EF9093070A809330 |
:10C31000060A51E0851650E1950634F080E090E180 |
:10C320009093F8098093F7098091F7099091F809A3 |
:10C330008050904F34F480E090EF9093F809809310 |
:10C34000F7096150704134F080E090E190934A0A1F |
:10C350008093490A8091490A90914A0A8050904FEF |
:10C3600034F480E090EF90934A0A8093490A8091D8 |
:10C370000101482F552780912001909121014817F4 |
:10C38000590794F4209120013091210109811A81EB |
:10C39000049FC001059F900D149F900D1124B901B9 |
:10C3A0000E94F29C7A83698329813A81220F331F8C |
:10C3B000220F331F3A8329838091400A80FD02C0F7 |
:10C3C0000C941B6CEE2011F00C941B6CFF2011F0F0 |
:10C3D0000C941B6C8091A10599278F779070009722 |
:10C3E00011F00C941B6C4C018091AC049091AD0445 |
:10C3F000892BD9F5809116019091170189599340A5 |
:10C4000058F087B5803F20F480912703815011C0F8 |
:10C4100081E08093050555C0809116019091170128 |
:10C4200084369105E8F487B58031B0F08091270318 |
:10C430008F5F809327039FE08902900111248091F0 |
:10C44000D807821B87BD8CE291E090931403809300 |
:10C4500013038EE591E031C081E08093040531C083 |
:10C46000F0920405F09205052CC09092260380926C |
:10C4700025038091F903882321F081E00E94BA9678 |
:10C4800017C08091340490913504A0913604B09186 |
:10C49000370454E0880F991FAA1FBB1F5A95D1F784 |
:10C4A0008093280390932903A0932A03B0932B032E |
:10C4B0008091AC049091AD0401979093AD0480936A |
:10C4C000AC048091400A2091170481FF3CC02233C4 |
:10C4D00048F580918F01815080938F018F3F09F043 |
:10C4E00052C08091A601882339F480915104882399 |
:10C4F00019F088E28093A6011092510480913404CF |
:10C5000090913504A0913604B091370480933004A3 |
:10C5100090933104A0933204B093330481E080936C |
:10C520008F0131C0273478F18091A601882339F436 |
:10C5300080915104882319F487E28093A60188EC46 |
:10C5400080938F011DC08091400190914101820F25 |
:10C55000911D20913E083327829FA001839F500D9B |
:10C56000929F500D1124CA01AA2797FDA095BA2FBA |
:10C570008093300490933104A0933204B093330439 |
:10C5800081E0809351048091940490919504A0914E |
:10C590009604B0919704E0903C01F0903D01009129 |
:10C5A0003E0110913F01BC01CD01A80197010E94FD |
:10C5B0003B9D59016A0180918C0490918D04A0915A |
:10C5C0008E04B0918F04BC01CD01A80197010E9497 |
:10C5D0003B9DB901C5010E94E79A9093110A80938F |
:10C5E000100ACC9734F08CE390E09093110A80937A |
:10C5F000100A8091100A9091110A0E949F789093DE |
:10C60000110A8093100A80E280933B0110922F045C |
:10C6100010922E0480915104882309F470C78091F0 |
:10C62000010499279C012071307084FD68C78091B6 |
:10C6300000048260809300047091230A872F992759 |
:10C6400041E0C42ED12CC822D92280FD04C08091A3 |
:10C65000400A81FD10C0E980FA803093FB042093EA |
:10C66000FA0430932F0420932E0480910104806CEF |
:10C6700080930104DFC28091010481FFAEC200916A |
:10C680007C0110917D01C8010F96A0904404B090E8 |
:10C6900045048A159B050CF06EC080910405882323 |
:10C6A00009F069C08091FC049091FD04459784F0E5 |
:10C6B00080911F0390912003A0912103B091220348 |
:10C6C0008093300490933104A0933204B0933304E8 |
:10C6D0008091010487FF15C0809101048F778093BA |
:10C6E000010480911F0390912003A0912103B09138 |
:10C6F00022038093300490933104A0933204B093CA |
:10C70000330480910104806480930104E090030A63 |
:10C71000EE20F1F08091300490913104A091320428 |
:10C72000B0913304BC01CD0124E630E040E050E09C |
:10C730000E943B9D8E2D9927AA27BB27821793071E |
:10C74000A407B5072CF4D0922F04C0922E0410C079 |
:10C75000C501801B910B0F9797FF03C090958195A2 |
:10C760009F4F90932F0480932E048BE280933B0184 |
:10C770001092280434C1C8010F97A816B906C4F551 |
:10C78000209105052223A1F58091010486FF15C0A3 |
:10C79000809101048F7B8093010480911F0390910D |
:10C7A0002003A0912103B091220380933004909341 |
:10C7B0003104A0933204B093330480910104806863 |
:10C7C00080930104C501801B910B0F9697FF03C056 |
:10C7D000909581959F4F909581959F4F90932F04B1 |
:10C7E00080932E048DE280933B0120932804F7C0B0 |
:10C7F0008DE380933B0160912904662371F12091C0 |
:10C800002A0430912B0440912C0450912D048091E6 |
:10C81000300490913104A0913204B0913304821716 |
:10C820009307A407B507CCF480910104806480933A |
:10C830000104862F992790932F0480932E048AE079 |
:10C84000809328048EE580933B018091010487FF4B |
:10C85000C6C0809101048F7733C0662309F443C0BA |
:10C8600020912A0430912B0440912C0450912D04E6 |
:10C870008091300490913104A0913204B09133043E |
:10C88000281739074A075B0774F58091010480680F |
:10C8900080930104862F9927909581959F4F9093BF |
:10C8A0002F0480932E0486EF8093280486E78093DC |
:10C8B0003B018091010486FF92C0809101048F7B2F |
:10C8C0008093010480911F0390912003A091210384 |
:10C8D000B09122038093300490933104A0933204EA |
:10C8E000B09333047CC080910104807C09F477C04C |
:10C8F00080912804882309F04CC080911F039091F7 |
:10C900002003A0912103B0912203885C9040A040B5 |
:10C91000B040209130043091310440913204509164 |
:10C92000330482179307A407B5076CF080911F03A7 |
:10C9300090912003A0912103B0912203885C904044 |
:10C94000A040B0401DC080911F0390912003A09192 |
:10C950002103B091220388539F4FAF4FBF4F281739 |
:10C9600039074A075B07BCF080911F0390912003B1 |
:10C97000A0912103B091220388539F4FAF4FBF4F27 |
:10C980008093300490933104A0933204B093330425 |
:10C9900002C010922804809101048F7380930104D7 |
:10C9A0001092FB041092FA0471FF06C084EF91E02C |
:10C9B000909314038093130380913804882379F4AF |
:10C9C0008091340490913504A0913604B0913704DD |
:10C9D000C397A105B1051CF081E0809338046091F4 |
:10C9E000FA047091FB0480912E0490912F04680F3B |
:10C9F000791F7093FB046093FA04CB0177FF04C0A6 |
:10CA000088279927861B970B855F91400CF4CEC031 |
:10CA100040912804442389F180912A0490912B04A9 |
:10CA20002091300430913104821B930B0996439777 |
:10CA300048F480912A0490912B04A0912C04B09189 |
:10CA40002D0412C0242F332727FD3095432F532F59 |
:10CA50008091300490913104A0913204B09133045C |
:10CA6000820F931FA41FB51F80933004909331044D |
:10CA7000A0933204B093330424C020913004309149 |
:10CA80003104409132045091330480913E081616CF |
:10CA9000170644F463E00E94E69C280F311D411DF7 |
:10CAA000511D07C063E00E94E69C281B3109410923 |
:10CAB0005109209330043093310440933204509351 |
:10CAC00033041092FB041092FA04E0903404F090C6 |
:10CAD00035040091360410913704D801C701805005 |
:10CAE0009440A040B04020913004309131044091F6 |
:10CAF00032045091330482179307A407B5075CF4FE |
:10CB0000D801C70180509C4FAF4FBF4F281739073E |
:10CB10004A075B0744F08093300490933104A0935C |
:10CB20003204B09333048091230A81FF06C084E667 |
:10CB300090E090931403809313038091420888231C |
:10CB4000A9F580912904882389F540911E0450910C |
:10CB50001F0457FF02C04D5F5F4F55954795559590 |
:10CB60004795809120019091210120910101332767 |
:10CB7000489FB001499F700D589F700D1124CB0143 |
:10CB8000B9010E94069D70937D0160937C0166341B |
:10CB900071051CF486E490E005C06739710534F036 |
:10CBA00086E990E090937D0180937C018091AC04B4 |
:10CBB0009091AD04892BD1F180911F0390912003B6 |
:10CBC000A0912103B091220380933004909331040B |
:10CBD000A0933204B093330429C08091340490911F |
:10CBE0003504A0913604B091370480599140A0409B |
:10CBF000B0408093300490933104A0933204B093FA |
:10CC0000330480914208882311F0992702C088E7F5 |
:10CC100090E090937D0180937C0189819A8190932B |
:10CC20001F0480931E048EE280933B01E0901E045B |
:10CC3000F0901F0480911F0390912003A091210385 |
:10CC4000B09122032091300430913104409132049C |
:10CC500050913304281739074A075B0724F0809165 |
:10CC6000230A80FD98C48091F9036091AC0470910F |
:10CC7000AD04882309F07CC2672B49F0E0901E04C4 |
:10CC8000F0901F041092FD041092FC04E1C080910A |
:10CC90001F0390912003A0912103B0912203821BD6 |
:10CCA000930BA40BB50B8093CA049093CB04A09371 |
:10CCB000CC04B093CD048230E0E89E07EFEFAE07DE |
:10CCC000EFEFBE072CF481E090E8AFEFBFEF09C0B3 |
:10CCD0008F5F9F47A040B04064F08FEF9FE7A0E0D8 |
:10CCE000B0E08093CA049093CB04A093CC04B0939B |
:10CCF000CD048091CA049091CB049093FD0480935D |
:10CD0000FC0480917501282F3327442755278091F3 |
:10CD1000CA049091CB04A091CC04B091CD04BC0185 |
:10CD2000CD010E94C79C97FF04C0615E7F4F8F4F6B |
:10CD30009F4F25E095958795779567952A95D1F72B |
:10CD40006093CA047093CB048093CC049093CD0479 |
:10CD500065300EEF70070FEF80070FEF90072CF490 |
:10CD600084E09EEFAFEFBFEF09C060507440804099 |
:10CD7000904064F080E094E0A0E0B0E08093CA04CA |
:10CD80009093CB04A093CC04B093CD048090CA04BC |
:10CD90009090CB04209125033091260337FF02C0E9 |
:10CDA000295F3F4F03E0359527950A95E1F74FEF4F |
:10CDB000223834071CF421E83FEF05C02038310544 |
:10CDC00014F020E830E0C901AA2797FDA095BA2FFA |
:10CDD00020917601332744275527BC01CD010E94BD |
:10CDE000C79C97FF04C06D5F7F4F8F4F9F4F12E02E |
:10CDF00095958795779567951A95D1F79B015FEF84 |
:10CE0000613075071CF420E03FEF06C06F3F7105ED |
:10CE100019F014F020E031E080910104807C49F0A9 |
:10CE2000C90137FD03969C013595279535952795C2 |
:10CE30000DC08091230A80FF09C0C90137FD079604 |
:10CE40009C01A3E035952795AA95E1F7820E931EE4 |
:10CE500020917401222309F454C06091540470910C |
:10CE60005504809156049091570497FF04C061586F |
:10CE70007F4F8F4F9F4FF7E09595879577956795F3 |
:10CE8000FA95D1F73327442755270E94C79C97FF6F |
:10CE900004C0615E7F4F8F4F9F4FE5E0959587956A |
:10CEA00077956795EA95D1F76093CA047093CB04A0 |
:10CEB0008093CC049093CD046138AFEF7A07AFEF45 |
:10CEC0008A07AFEF9A072CF480E89FEFAFEFBFEF30 |
:10CED0000AC06F3F71058105910569F064F080E03B |
:10CEE00091E0A0E0B0E08093CA049093CB04A093BB |
:10CEF000CC04B093CD048091CA049091CB04880EE9 |
:10CF0000991E80917201282F33278091D40A992786 |
:10CF100087FD9095289FF001299FF00D389FF00D17 |
:10CF200011249F01F7FF02C021583F4F220F232FEA |
:10CF3000221F330BFFEF21383F071CF420E83FEF9F |
:10CF400006C02F3F310519F014F020E031E0280D24 |
:10CF5000391DC901AA2797FDA095BA2F00911E047B |
:10CF600010911F049801442737FD4095542FBC01B0 |
:10CF7000CD010E94C79C97FF04C061507E4F8F4F28 |
:10CF80009F4F59E095958795779567955A95D1F775 |
:10CF9000E61AF70A80912E0490912F04892B09F04C |
:10CFA00064C0101611060CF060C02091FC04309192 |
:10CFB000FD04C90137FF03C0309521953F4F2D3344 |
:10CFC000310540F480914C0490914D048E159F05DD |
:10CFD00074F526C02C53304045E0369527954A9588 |
:10CFE000E1F72031310510F02FE030E040914C04A2 |
:10CFF00050914D0418161906E4F480E190E0821B6C |
:10D00000930B489F9001499F300D589F300D11247C |
:10D01000B4E036952795BA95E1F72E153F0520F532 |
:10D0200080917A0190917B01E816F906F4F07C0179 |
:10D030001CC0205F3F4F80917A0190917B01829FBD |
:10D04000B001839F700D929F700D11249B01A4E08D |
:10D0500036952795AA95E1F74E155F0514F07A01EC |
:10D0600004C0E216F30608F07901C701AA2797FD6C |
:10D07000A095BA2FFDE0880F991FAA1FBB1FFA9534 |
:10D08000D1F72091100A3091110A442737FD4095BD |
:10D09000542FBC01CD010E943B9D2093CE043093C0 |
:10D0A000CF044093D0045093D104E090CE04F0908C |
:10D0B000CF048091FE049091FF049C01220F331F46 |
:10D0C000280F391F2E0D3F1D37FF02C02D5F3F4F28 |
:10D0D000A90155954795559547955093FF04409361 |
:10D0E000FE0480913A08282F3327220F331F220F86 |
:10D0F000331F241735076CF48091480A282F3327F3 |
:10D10000220F331F220F331F205530404217530781 |
:10D1100024F03093FF042093FE048091230A80FFC3 |
:10D1200014C08091FE049091FF04A981BA818A17EE |
:10D130009B0724F0B093FF04A093FE04E091FE044B |
:10D14000F091FF04FA83E98326C229813A81201BEA |
:10D15000310B37FF02C02D5F3F4F35952795359531 |
:10D160002795E090FE04F090FF04E20EF31EC1C18B |
:10D17000672B49F0E0901E04F0901F041092FD040C |
:10D180001092FC0438C180911F0390912003A0915C |
:10D190002103B0912203821B930BA40BB50B809348 |
:10D1A000CA049093CB04A093CC04B093CD048230F6 |
:10D1B00000E890070FEFA0070FEFB0072CF481E015 |
:10D1C00090E8AFEFBFEF09C08F5F9F47A040B0402E |
:10D1D00064F08FEF9FE7A0E0B0E08093CA049093E3 |
:10D1E000CB04A093CC04B093CD048091CA04909159 |
:10D1F000CB049093FD048093FC0480917501282F4B |
:10D200003327442755278091CA049091CB04A091DD |
:10D21000CC04B091CD04BC01CD010E94C79C97FF06 |
:10D2200004C0615E7F4F8F4F9F4F05E095958795B6 |
:10D23000779567950A95D1F76093CA047093CB04EC |
:10D240008093CC049093CD04653028EF72072FEFC4 |
:10D2500082072FEF92072CF484E098EFAFEFBFEF37 |
:10D2600009C0605078408040904064F080E098E0D1 |
:10D27000A0E0B0E08093CA049093CB04A093CC04C8 |
:10D28000B093CD048090CA049090CB048091740137 |
:10D29000282F332780912C0390912D03829FA0018A |
:10D2A000839F500D929F500D11249A0157FF02C089 |
:10D2B00021503F4F232F330F330B80912503909143 |
:10D2C0002603820F931FAA2797FDA095BA2F80935C |
:10D2D000CA049093CB04A093CC04B093CD04809166 |
:10D2E000280420912E0430912F04882331F0B3E0DC |
:10D2F000220F331FBA95E1F71BC080913E08992792 |
:10D30000289FB001299F700D389F700D11249B013B |
:10D31000A3E0220F331FAA95E1F7260F371F37FF2F |
:10D3200002C0215E3F4FF5E035952795FA95E1F76C |
:10D330003093FB032093FA038091FA039091FB034F |
:10D340009C01442737FD4095542F8091CA04909149 |
:10D35000CB04A091CC04B091CD04821B930BA40B01 |
:10D36000B50B8093CA049093CB04A093CC04B093E4 |
:10D37000CD0420917601332744275527BC01CD01E8 |
:10D380000E94C79C97FF04C0615E7F4F8F4F9F4FE5 |
:10D39000E5E09595879577956795EA95D1F7609340 |
:10D3A000CA047093CB048093CC049093CD04653071 |
:10D3B000A8EF7A07AFEF8A07AFEF9A072CF484E063 |
:10D3C00098EFAFEFBFEF09C06050784080409040C9 |
:10D3D00064F080E098E0A0E0B0E08093CA0490930D |
:10D3E000CB04A093CC04B093CD048091CA04909157 |
:10D3F000CB04880E991EE818F90880914C0490918E |
:10D400004D048E159F053CF480917A0190917B012B |
:10D41000E816F9060CF07C01C701AA2797FDA09534 |
:10D42000BA2F5DE0880F991FAA1FBB1F5A95D1F72D |
:10D430002091100A3091110A442737FD4095542F4E |
:10D44000BC01CD010E943B9D2093CE043093CF04BC |
:10D450004093D0045093D104E090CE04F090CF04D8 |
:10D460008091FE049091FF049C01220F331F280F2E |
:10D47000391F2E0D3F1D37FF02C02D5F3F4FA90101 |
:10D4800055954795559547955093FF044093FE0455 |
:10D4900080913A08282F3327220F331F220F331F82 |
:10D4A000241735076CF48091480A282F3327220F60 |
:10D4B000331F220F331F205530404217530724F0EB |
:10D4C0003093FF042093FE048091230A2091FE04F0 |
:10D4D0003091FF0480FF10C0E981FA812E173F07C9 |
:10D4E00024F0F093FF04E093FE04E090FE04F0903B |
:10D4F000FF04FA82E9824FC03A8329834CC08091AD |
:10D500004208882301F560911E0470911F0477FF83 |
:10D5100002C06D5F7F4F75956795759567954091D2 |
:10D5200020015091210180910101282F3327649F10 |
:10D53000C001659F900D749F900D1124B9010E9448 |
:10D54000069DCB0101C0992790937D0180937C01BA |
:10D5500080917C0190917D01873491051CF486E4D3 |
:10D5600090E005C08639910534F086E990E090930B |
:10D570007D0180937C0109811A811093FF0400933F |
:10D58000FE0480910104806C80930104809100046A |
:10D590008D7F809300048091010499279C01227063 |
:10D5A000307081FF39C18091000590910105A091F3 |
:10D5B0000205B09103050097A105B10521F0809106 |
:10D5C00038048130B9F480911E0490911F04AA2779 |
:10D5D00097FDA095BA2F1EE0880F991FAA1FBB1FA9 |
:10D5E0001A95D1F78093000590930105A093020549 |
:10D5F000B093030580913804813019F482E0809360 |
:10D60000380429813A8179010027F7FC0095102F11 |
:10D610008091100A9091110A9C01442737FD409592 |
:10D62000542FC801B7010E94C79CDC01CB01809335 |
:10D63000CE049093CF04A093D004B093D104B7FF4D |
:10D6400004C08150904EAF4FBF4F7C018D01ADE0C3 |
:10D6500015950795F794E794AA95D1F7E092CE0433 |
:10D66000F092CF040093D0041093D104609102048F |
:10D67000709103043FE0603A730750F58091000514 |
:10D6800090910105A0910205B09103059C01AD01A7 |
:10D69000FAE05695479537952795FA95D1F7821B6D |
:10D6A000930BA40BB50BA8019701E4E0220F331FE5 |
:10D6B000441F551FEA95D1F7820F931FA41FB51F72 |
:10D6C0008093000590930105A0930205B093030594 |
:10D6D00060547F4118F58091000590910105A0915B |
:10D6E0000205B09103059C01AD016CE0569547958C |
:10D6F000379527956A95D1F7821B930BA40BB50B31 |
:10D70000A8019701F2E0220F331F441F551FFA951D |
:10D71000D1F7820F931FA41FB51F41C0809125032D |
:10D7200090912603809125039091260397FF03C0D3 |
:10D73000909581959F4F84369105CCF580911F037C |
:10D7400090912003A0912103B09122039C0180912C |
:10D75000300490913104281B390B37FF03C03095FA |
:10D7600021953F4F2F3F310509F00CF580910005C1 |
:10D7700090910105A0910205B09103059C01AD01B6 |
:10D78000EEE05695479537952795EA95D1F7821B98 |
:10D79000930BA40BB50B8E0D9F1DA01FB11F809383 |
:10D7A000000590930105A0930205B09303058091B5 |
:10D7B000000590910105A0910205B09103057EE05E |
:10D7C000B695A795979587957A95D1F790931F046D |
:10D7D00080931E0440914008442399F055279C01F2 |
:10D7E000BA010E94069DC901861B970B90934D04B8 |
:10D7F00080934C04260F371F30937B0120937A01CE |
:10D800001FC010924D0410924C048FEF93E0909340 |
:10D810007B0180937A0114C01092380410920005A5 |
:10D8200010920105109202051092030530931F0417 |
:10D8300020931E0405C080910104806C8093010434 |
:10D840008091140581FF37C089819A8197FD0396E5 |
:10D8500095958795959587952091FE033091FF03C7 |
:10D860002817390760F480911E0490911F04892BBA |
:10D8700031F0220F331F220F331F3A832983809107 |
:10D880001F0390912003A0912103B0912203809364 |
:10D89000300490933104A0933204B093330488E9A8 |
:10D8A0009AE3909314038093130380E09EE0909397 |
:10D8B0000B0180930A0120910B0A822F9927880F70 |
:10D8C000991F880F991F889669817A818617970713 |
:10D8D00014F09A8389837091480A7D8B872F99274A |
:10D8E000880F991F880F991F80559040A981BA8190 |
:10D8F0008A179B0714F49A83898380915D03882398 |
:10D9000041F48091DB0A8F3F21F480911805882330 |
:10D91000E9F080910204909103040297C097B0F45B |
:10D92000E981FA811E161F068CF481E090E0909345 |
:10D93000030480930204E22EFF24EE0CFF1CEE0C85 |
:10D94000FF1C8701085D1F4F1A83098329813A81D3 |
:10D9500030939607209395078091C6049091C70451 |
:10D96000A091C804B091C90412E0880F991FAA1FA2 |
:10D97000BB1F1A95D1F70091490A10914A0A081B5A |
:10D98000190B213A31058CF0C90137FD01969595A7 |
:10D990008795801791070CF48C01909581959F4F86 |
:10D9A000081719076CF48C010BC00135110514F030 |
:10D9B00000E510E03FEF003B130714F400EB1FEF0E |
:10D9C0004D89242F3327220F331F220F331FC90104 |
:10D9D00069817A81861B970B801791070CF48C0163 |
:10D9E00089819A81821B930B081719070CF48C010B |
:10D9F0008091060A9091070A60914A0470914B0445 |
:10DA0000861B970B9093160A8093150AD090250ACF |
:10DA100020915C0430915D0440915E0450915F045C |
:10DA2000DD2041F0661A770AC301AA2797FDA09569 |
:10DA3000BA2F04C0AA2797FDA095BA2F280F391F27 |
:10DA40004A1F5B1F20935C0430935D0440935E0487 |
:10DA500050935F0480915C0490915D04A0915E04FA |
:10DA6000B0915F0481509A4FA040B04064F080E0D4 |
:10DA70009AEFA0E0B0E080935C0490935D04A093E3 |
:10DA80005E04B0935F0480915C0490915D04A0916A |
:10DA90005E04B0915F0480509640AF4FBF4F64F476 |
:10DAA00080E096E0AFEFBFEF80935C0490935D045D |
:10DAB000A0935E04B0935F04C0904F082091150AB4 |
:10DAC0003091160A78E0E72EEC1498F08C2D992707 |
:10DAD000829FA001839F500D929F500D1124CA0177 |
:10DAE00057FD07967C0163E0F594E7946A95E1F7AA |
:10DAF00012C08C2D86959927829FB001839F700D4F |
:10DB0000929F700D1124CB0177FD03967C01F59453 |
:10DB1000E794F594E794A0907701B090780195018F |
:10DB2000442737FD4095542F80915C0490915D040B |
:10DB3000A0915E04B0915F04BC01CD010E943B9DA9 |
:10DB4000E20EF31E90906101692D772788279927AF |
:10DB5000980117FF04C022273327201B310B37FF02 |
:10DB600002C02F5F3F4F35952795A981BA812A0FB3 |
:10DB70003B1F442737FD4095542F0E94C79C97FFB9 |
:10DB800004C0615C7F4F8F4F9F4F26E0959587952E |
:10DB9000779567952A95D1F79B016E157F050CF453 |
:10DBA0007B01309521953F4FE216F3060CF4790185 |
:10DBB0008091F7099091F8096091480470914904A7 |
:10DBC000861B970B9093F6098093F50920915804D2 |
:10DBD0003091590440915A0450915B04DD2041F08A |
:10DBE000461A570AC201AA2797FDA095BA2F04C06A |
:10DBF000AA2797FDA095BA2F280F391F4A1F5B1F30 |
:10DC0000209358043093590440935A0450935B0472 |
:10DC10008091580490915904A0915A04B0915B04EA |
:10DC200081509A4FA040B04064F080E09AEFA0E0AD |
:10DC3000B0E08093580490935904A0935A04B09391 |
:10DC40005B048091580490915904A0915A04B091BA |
:10DC50005B0480509640AF4FBF4F64F480E096E085 |
:10DC6000AFEFBFEF8093580490935904A0935A04E8 |
:10DC7000B0935B042091F5093091F60948E04C150A |
:10DC800098F08C2D9927829FB001839F700D929FF1 |
:10DC9000700D1124CB0177FD07966C01B3E0D5948C |
:10DCA000C794BA95E1F712C0C6948C2D9927829F2C |
:10DCB000D001839FB00D929FB00D1124CD01B7FD0F |
:10DCC00003966C01D594C794D594C79495014427C5 |
:10DCD00037FD4095542F8091580490915904A0919C |
:10DCE0005A04B0915B04BC01CD010E943B9DC20E61 |
:10DCF000D31E692D772788279927980117FF04C01D |
:10DD000022273327201B310B37FF02C02F5F3F4FE5 |
:10DD100035952795E981FA812E0F3F1F442737FD5E |
:10DD20004095542F0E94C79C97FF04C0615C7F4FB1 |
:10DD30008F4F9F4FE6E09595879577956795EA9584 |
:10DD4000D1F79B016C157D050CF46B013095219585 |
:10DD50003F4FC216D3060CF4690180910B0A282E9E |
:10DD600033245090910861E0862E69E0962E58EB9E |
:10DD7000A52E58E0B52E4BE0442E36E2632E3AE055 |
:10DD8000732ED5012C9112160CF029C1203429F4E0 |
:10DD9000E981FA81FF8BEE8B1FC049815A81CA014C |
:10DDA000AA2797FDA095BA2F332727FD3095432F3B |
:10DDB000532FBC01CD010E94C79C97FF04C0615C3A |
:10DDC0007F4F8F4F9F4F26E0959587957795679565 |
:10DDD0002A95D1F77F8B6E8BF5012181203439F4A0 |
:10DDE0002E893F892E0D3F1D3F8B2E8B2AC0203C54 |
:10DDF00039F44E895F894E195F095F8B4E8B21C0C4 |
:10DE0000C701AA2797FDA095BA2F332727FD309584 |
:10DE1000432F532FBC01CD010E94C79C97FF04C024 |
:10DE2000615C7F4F8F4F9F4FB6E0959587957795B3 |
:10DE30006795BA95D1F7AE89BF89A60FB71FBF8B7B |
:10DE4000AE8BF5012281203439F42E893F892C0DC7 |
:10DE50003D1D3F8B2E8B2AC0203C39F44E895F89B3 |
:10DE60004C195D095F8B4E8B21C0C601AA2797FD17 |
:10DE7000A095BA2F332727FD3095432F532FBC0190 |
:10DE8000CD010E94C79C97FF04C0615C7F4F8F4FFC |
:10DE90009F4FA6E09595879577956795AA95D1F7B9 |
:10DEA000AE89BF89A60FB71FBF8BAE8BF50123814B |
:10DEB000203439F42E893F89200F311F3F8B2E8B60 |
:10DEC0002AC0203C39F44E895F89401B510B5F8B7F |
:10DED0004E8B21C0C801AA2797FDA095BA2F3327E2 |
:10DEE00027FD3095432F532FBC01CD010E94C79CC5 |
:10DEF00097FF04C0615C7F4F8F4F9F4FF6E0959571 |
:10DF0000879577956795FA95D1F7AE89BF89A60F62 |
:10DF1000B71FBF8BAE8BF301808191812E893F8922 |
:10DF20008217930764F4B901680F791F77FF02C065 |
:10DF30006F5F7F4F759567957F8B6E8B1DC05520EA |
:10DF400049F44E895F89440F551F481B590B5F8B5D |
:10DF50004E8B12C051E0551578F4252D33276E896C |
:10DF60007F89861B970BB9010E94069DAE89BF89E8 |
:10DF7000A60FB71FBF8BAE8BC101880F991F880FEB |
:10DF8000991FEE89FF898E179F0764F4FD898F2FF3 |
:10DF90009927880F991F880F991F2E893F89281765 |
:10DFA000390714F09F8B8E8B8E899F8997FD03967E |
:10DFB0009595879595958795F4018183880F991F8D |
:10DFC000880F991F2E893F89281B390BC901880F9B |
:10DFD0008283EE89FF89D301ED93FC9303C0F401A2 |
:10DFE000118212824A9422E030E0620E731E44E0F5 |
:10DFF00050E0A40EB51E68E070E0860E971E47FE46 |
:10E00000C0CEE2E1C95E0C94729D84B1806A84B98D |
:10E010003D9A82E58CBD1DBC459A81E080935A0AE9 |
:10E020008AEA80936B0A83E880936C0A8AE0809383 |
:10E030006D0A10926F0A10926E0A1092710A109275 |
:10E04000700A1092D30A10928F0A089530915A0ADA |
:10E05000332309F070C00DB407FE6DC083E08093D8 |
:10E060001203459A2EB580911B05992781309105A1 |
:10E0700089F0823091051CF4892B21F03EC0029773 |
:10E08000B9F03BC030938E0A20931C052138A9F5C6 |
:10E0900081E008C0253549F480911C05820F8093EA |
:10E0A0001C0582E080931B0528C030931B0525C00A |
:10E0B00080918E0AE82FFF27E055F54F20838F5F70 |
:10E0C00080938E0A90911C058032A0F0291769F484 |
:10E0D00080E2A0EBBAE0E0E9FAE00D9001928A95C7 |
:10E0E000E1F781E080938F0A02C030938F0A10928B |
:10E0F0001B0503C0920F90931C0520916A0A2232DF |
:10E10000A0F445980000000000000000E091630AC0 |
:10E11000F091640AE20FF11D80818EBD80918C0A1E |
:10E120009081890F80938C0A03C081E080935A0A02 |
:10E130002F5F20936A0A0895EF92FF920F931F9327 |
:10E14000809148089927880F991F880F991F7C0193 |
:10E150000027F7FC0095102F80919404909195046E |
:10E16000A0919604B0919704BC01CD01A80197013C |
:10E170000E943B9D30936F0A20936E0A80918C041D |
:10E1800090918D04A0918E04B0918F04BC01CD01BB |
:10E19000A80197010E943B9D3093710A2093700A59 |
:10E1A0002091500A3091510A4091520A5091530ADD |
:10E1B000DA01C90173E0880F991FAA1FBB1F7A9566 |
:10E1C000D1F7820F931FA41FB51F820F931FA41FA7 |
:10E1D000B51F20913C0130913D0140913E0150918D |
:10E1E0003F01BC01CD010E943B9D3093770A2093F3 |
:10E1F000760A8091A6049091A70420913203309171 |
:10E200003303821B930B90937D0A80937C0AE091E9 |
:10E210009C04F0919D0480911C0A90911D0ABF01FD |
:10E220000E94069DCB019B01220F331F220F331F3B |
:10E23000280F391F280F391F37FF02C02D5F3F4FAE |
:10E2400035952795359527953093730A2093720A53 |
:10E2500080914C0A90914D0ABF010E94069D9B013E |
:10E26000220F331F220F331F260F371F260F371F92 |
:10E2700037FF02C02D5F3F4F359527953595279580 |
:10E280003093750A2093740A10929D0410929C0496 |
:10E2900010921D0A10921C0A10924D0A10924C0AFC |
:10E2A00080916D0A9927AA27BB27FC013A97E8308D |
:10E2B000F10508F02AC2E058FF4F0C948D9D809123 |
:10E2C00016048093800A809115048093810A8091BE |
:10E2D00014048093820A809113048093830A8091AE |
:10E2E00012048093840A809111048093850A80919E |
:10E2F00010048093860A80910F048093870A80918E |
:10E3000001048093880A80910104837F8093010433 |
:10E31000809100018093890A8091920880938A0AF3 |
:10E320008091000480938B0A4299EFC18091000490 |
:10E33000877F80930004E9C18091D50A9091D60A25 |
:10E340009093810A8093800A8091D90A9091DA0A89 |
:10E350009093830A8093820A8091200190912101F9 |
:10E360008093840A80917D080E9457488093850A93 |
:10E3700080913B018093860A90911D059093870AB6 |
:10E38000E92FFF2713E0EE0FFF1F1A95E1F7EF5F6C |
:10E39000F64F86818093880A83818093890A8781DA |
:10E3A00080938A0A858180938B0A9F5F90931D05D5 |
:10E3B000E92FFF27EE0FFF1FEE0FFF1FE555F74F69 |
:10E3C0008585882309F0A1C1992309F49EC1892F6D |
:10E3D000992701966CE070E00E94069D9C01982FA1 |
:10E3E000E82FFF27EE0FFF1FEE0FFF1FE555F74F3A |
:10E3F0008585882311F4222351F720931D0585C1BB |
:10E40000809101018093800A80917E088093810A27 |
:10E4100080917F088093820A809180088093830A8C |
:10E42000809181088093840A809185088093850A71 |
:10E43000809186088093860A809187088093870A56 |
:10E4400080918A088093880A809188088093890A3D |
:10E450008091890880938A0A80918B0854C18091A9 |
:10E460007C088093800A80915308863081F08091E7 |
:10E47000DE02823451F00E94537DE82FFF27E551E0 |
:10E48000FE4E84918093DE0202C00E94537D8091F3 |
:10E4900043058093810A809199088093820A35C14F |
:10E4A000F89480912F08E82FFF27EE0FFF1FEE59F9 |
:10E4B000F64F0190F081E02DE038F1051CF0EFE718 |
:10E4C000F0E006C02FEFE138F20714F4E1E8FFEFC7 |
:10E4D000E093800A80913008E82FFF27EE0FFF1F9E |
:10E4E000EE59F64F0190F081E02DE038F1051CF077 |
:10E4F000EFE7F0E006C07FEFE138F70714F4E1E85A |
:10E50000FFEFE093810A80912E08E82FFF27EE0F9E |
:10E51000FF1FEE59F64F0190F081E02DE038F10534 |
:10E520001CF0EFE7F0E006C08FEFE138F80714F4D5 |
:10E53000E1E8FFEFE093820A80912D08E82FFF27A2 |
:10E54000EE0FFF1FEE59F64F0190F081E02DE038FD |
:10E55000F1051CF0EFE7F0E006C02FEFE138F2071D |
:10E5600014F4E1E8FFEF7894E093830A80913B0490 |
:10E570008093840A80913C048093850A80913D04B5 |
:10E580008093860A80913E048093870A80913F049D |
:10E590008093880A809140048093890A8091410485 |
:10E5A00080938A0A80914204AEC08091BC05863077 |
:10E5B00018F01092BC0585E08093800A80918C0849 |
:10E5C0008093810A8091340490913504A09136049F |
:10E5D000B0913704BC01CD0125E030E040E050E0CF |
:10E5E0000E943B9D3093830A2093820A80913004DD |
:10E5F00090913104A0913204B0913304BC01CD015B |
:10E6000025E030E040E050E00E943B9D3093850AD9 |
:10E610002093840A809182088093860A80918308DF |
:10E620008093870A809184088093880A80913A04B5 |
:10E630008093890A10928A0A809195079091960793 |
:10E6400097FD039695958795959587955CC0109253 |
:10E65000800A8BE58093810A8BE08093820A87E3AE |
:10E660008093830A809102018093840A8091A1059E |
:10E670008093850A9091A2059093860A8F77809364 |
:10E68000A10590719093A2051092870A8091400A8B |
:10E690008093880A8091230A8093890A80918E084A |
:10E6A00080938A0A80919D082EC080916108809392 |
:10E6B000800A80919B088093810A809169018093F0 |
:10E6C000820A80915A088093830A80915B08809324 |
:10E6D000840A80915C088093850A80916801809308 |
:10E6E000860A80915E088093870A80915F088093F4 |
:10E6F000880A809160088093890A8091DB0A809360 |
:10E700008A0A8091BF0780938B0A80918F0A8823A1 |
:10E7100009F47DC16091900A8091A001681719F0F9 |
:10E720008AEF80939E016093A00181E0809389012C |
:10E730004091910A5091920ACA0181509E4F8F5F79 |
:10E740009340B0F42091930A3091940AC90181500A |
:10E750009E4F8F5F934060F48091390885FF08C019 |
:10E7600050930A0540930905309308052093070547 |
:10E770008091970A9091980A21E08936920724F4B3 |
:10E7800090938B0180938A012091A10A3091A20A73 |
:10E7900080911303909114038217930740F48091A2 |
:10E7A000E602882321F43093140320931303862F69 |
:10E7B00099278936910509F4A5C08A36910544F454 |
:10E7C0008736910571F08836910509F462C027C13A |
:10E7D0008A36910509F414C18B36910509F4E2C01B |
:10E7E0001EC18091A30A8093D00A8091A40A8093CD |
:10E7F000D20A8091A50A8093D10A8091A60A8093BB |
:10E8000088018091A70A8093D40A8091A80A8093F6 |
:10E810009F018091A90A80931A058091AA0A80938A |
:10E82000060580910E048823F9F02091AB0A3091FF |
:10E83000AC0A37FD19C030935304209352049091D1 |
:10E840006308992389F08FE0989FC0011124281B49 |
:10E85000390BC90188599E4F68E671E00E94069DF8 |
:10E860009093530480935204209111053091120526 |
:10E870008091AD0A9091AE0A280F391F37FF02C070 |
:10E880002F5F3F4F35952795309312052093110543 |
:10E89000C6C08091A30A8093650A8091A40A8093E0 |
:10E8A000660A8091A50A8093670A8091A60A8093E0 |
:10E8B000680A8091A70A8093690A809185079091E0 |
:10E8C000A80A892B80938507909186079370809181 |
:10E8D000A90A8C70982B909386078091AA0A80933E |
:10E8E00018058091AB0A809390018091AC0A8093C7 |
:10E8F000D30A8091AD0A809314058091AE0A80936B |
:10E9000013058DC08091A30A80935B0A8091A40AAD |
:10E9100080935C0A8091A50A80935D0A8091A60A83 |
:10E9200080935E0A8091A70A9091A80A9093600A4A |
:10E9300080935F0A8091A90A9091AA0A9093620A33 |
:10E940008093610A8091AB0A992787FD90959093F7 |
:10E950009D0980939C098091AC0A80932904809141 |
:10E96000AD0A9091AE0A9C01442737FD4095542F83 |
:10E97000DA01C90163E0880F991FAA1FBB1F6A95BE |
:10E98000D1F7820F931FA41FB51F820F931FA41FDF |
:10E99000B51F80932A0490932B04A0932C04B0936A |
:10E9A0002D043DC08091A30A809317058091A40A8D |
:10E9B000809316058091A50A809315059091A60A6B |
:10E9C000992349F08091A601882319F08151833061 |
:10E9D00010F49093A6018091A70A80934805809136 |
:10E9E000A80A809347058091A90A9091AA0A90935A |
:10E9F0004505809344058091AB0A809346050FC07E |
:10EA000080915308863059F40E94AC7D08C0109262 |
:10EA10000A051092090510920805109207051F912A |
:10EA20000F91FF90EF90089580915A0A882319F171 |
:10EA300045988BE69AE09093640A8093630A9091DC |
:10EA40001905E92FFF27EF56FE4F9F5F9093190599 |
:10EA5000808180936D0A9D3010F0109219051092FC |
:10EA60005A0A0E949C7081E080936A0A80916B0A26 |
:10EA700080938C0A8EBD089587B18C6087B94298C7 |
:10EA8000439810921F0580E88093A20110921E0502 |
:10EA90008093A101089580919C0990919D098158CE |
:10EAA0009F4F39F080919C0990919D0981588093E6 |
:10EAB0002905809124058150809324058F3F09F01A |
:10EAC00043C189E0809324058091010499278073D4 |
:10EAD0009070892B21F48091A20580FF1DC0809148 |
:10EAE0007A08882351F080912705882319F484E05F |
:10EAF00080931F0581E08093270580917B08882300 |
:10EB0000B9F080912805882319F484E080931E05CC |
:10EB100081E0809328050CC01092270510922805EB |
:10EB2000809176088093250580917808809326054A |
:10EB300080912705882309F073C080919A08282FB7 |
:10EB4000332724FF07C080913904882319F425FD59 |
:10EB500080C081C090917708983F48F080911E0A4C |
:10EB60008D3D28F08091250588236CF00AC0983FE0 |
:10EB700068F080911E0A853049F48091250587FF51 |
:10EB800002C0429801C0429A81E032C080911F05C4 |
:10EB9000815080931F058F3F09F05EC080919D08D2 |
:10EBA00085FF29C090912905892F869580931F059F |
:10EBB000992351F48091250587FF02C0429801C036 |
:10EBC000429A1092A20148C08091A201909125051D |
:10EBD000882341F48093290580E88093A20199233A |
:10EBE000D4F137C0982311F0429A01C0429886951B |
:10EBF0008093A20131C080911E0A869580931F05E3 |
:10EC00008091A201813021F41092290580E801C091 |
:10EC100086958093A2018091A2019091250517C04D |
:10EC200080911F05815080931F058F3FA9F489E0D3 |
:10EC300080931F058091A201813011F480E801C00A |
:10EC400086958093A2018091A20190917A088923F0 |
:10EC500011F0429A01C0429880912805882309F05A |
:10EC600043C090919A0897FF07C080913904882388 |
:10EC700019F496FD52C053C090917908983F48F01E |
:10EC80008091470A8D3D28F08091260588236CF0FD |
:10EC90000AC0983F78F08091470A853059F48091F6 |
:10ECA000260587FF02C0439801C0439A81E0809304 |
:10ECB000A10136C080911E05815080931E058F3FB3 |
:10ECC00079F58091470A869580931E058091A10170 |
:10ECD000813011F480E801C086958093A101809174 |
:10ECE000A1019091260517C080911E058150809347 |
:10ECF0001E058F3FA9F489E080931E058091A10134 |
:10ED0000813011F480E801C086958093A101809143 |
:10ED1000A10190917B08892311F0439A01C0439887 |
:10ED2000429B05C080910004886080930004439B4F |
:10ED300006C0809100048061809300040895809152 |
:10ED400000048F7E8093000408954FB724E130E0E3 |
:10ED5000F8948091C9008F778093C9008091C90091 |
:10ED60008F7B8093C9008091C9008F7D8093C900FB |
:10ED7000832F99278093CD002093CC008091C800E9 |
:10ED800082608093C80080E18093C9008091CA00AE |
:10ED90008F778093CA008091CA008F7B8093CA00CE |
:10EDA0008091CA008F7D8093CA008091CA008F7EB7 |
:10EDB0008093CA008091CA00877F8093CA008091A7 |
:10EDC000C9008B7F8093C9008091CA0084608093C2 |
:10EDD000CA008091CA0082608093CA008091C800F6 |
:10EDE00087FF03C08091CE00F9CF8091C900806871 |
:10EDF0008093C9004FBF0895EF92FF920F931F9326 |
:10EE0000CF93DF93482F00E010E08091A301813081 |
:10EE100061F41092A30184E480932A0510922C05DA |
:10EE200010922B0510922D0539C180912A05882357 |
:10EE300019F421E030E001C0980190912B0599234D |
:10EE400071F4232B11F081E010C084E480932A0533 |
:10EE500090932C0590932B0590932D0508C191302C |
:10EE600069F4232B09F0F9C082E080932B0580918F |
:10EE70002C058F5F80932C0583E0F7C09230D1F48E |
:10EE8000232B09F0EAC083E080932A0540932D05E7 |
:10EE900090912C05923039F410922E0547FF03C053 |
:10EEA00081E080932E0583E080932B059F5F9093F4 |
:10EEB0002C05DDC0933009F0D0C0232B09F0CDC064 |
:10EEC00090932A0582E080932B0580912C058F5F1B |
:10EED00080932C0520912D05822F9927782F662766 |
:10EEE000842F9927682B792B80915308813049F41E |
:10EEF0007370CB018050924063E070E00E94069DE9 |
:10EF000017C0823061F47770CB018050944066E086 |
:10EF100070E00E94069D2695269526950BC073707D |
:10EF200068567140CB0177FD0196BC0175956795D8 |
:10EF300026952695022F11270F7010700F5F1F4F17 |
:10EF40000D30110508F082C07801E00EF11EF701C6 |
:10EF5000EE59F64F808191819B01281B390BC90125 |
:10EF600037FF03C0909581959F4F069704F5E09178 |
:10EF70009508EE2351F0FF27EE0FFF1FEE59F64FD5 |
:10EF8000808191818436910594F480913A04883C83 |
:10EF900030F480913A04865F80933A0408C088EC8C |
:10EFA00080933A0480916F008F7D80936F00F7010A |
:10EFB000EE59F64F808191819C01220F331F280F5B |
:10EFC000391F260F371F37FF02C02D5F3F4FE90162 |
:10EFD000D595C795D595C795CB0101968C179D07FB |
:10EFE00014F4219706C061507040C617D7070CF47F |
:10EFF000219680913A04843BD0F0F701EE59F64F08 |
:10F0000080819181FE01E81BF90BCF0163E070E084 |
:10F010000E94069DCB01880F991F860F971F28EA33 |
:10F0200039E0E20EF31EF7019183808307C028EADE |
:10F0300039E0E20EF31EF70111821082000F111F5A |
:10F040000E59164FF801D183C08311C0023111054A |
:10F0500070F081E08093A3010AC081E08093A30156 |
:10F0600010922C0510922E0584E480932A0580913D |
:10F070002C05803198F080912E05882331F4809101 |
:10F08000A301882311F480933A0110922C05109269 |
:10F090002E0510922B0584E480932A05E6E0CDB777 |
:10F0A000DEB70C947E9DCF93FC0197FF05C0CFEF98 |
:10F0B000F095E195FF4F01C0C1E028E631E0CF01B6 |
:10F0C000B9010E94069DFC018B35910554F08B55CA |
:10F0D00090408A35910538F484EB90E08E1B9F0BAD |
:10F0E000FC0141E00DC0CF01855B90408A35910560 |
:10F0F00018F4E45BF04003C02E1B3F0BF9014FEF07 |
:10F10000EE0FFF1FEC59F64F259134918C2F992764 |
:10F1100087FD9095289FB001299F700D389F700D35 |
:10F120001124842F992787FD9095689FA001699FDE |
:10F13000500D789F500D1124CA01CF9108952AE5F2 |
:10F1400030E0281B390BC9010E9453780895CF93F2 |
:10F15000DF9380E00E94A78F809120019091210190 |
:10F160006AE070E00E94069D9F938F93809120013A |
:10F17000909121016AE070E00E94069D7F936F9359 |
:10F1800088E39AE09F938F93CAE9DFE8DF93CF93F8 |
:10F19000E0918805F091890509952DB73EB7285F64 |
:10F1A0003F4F2DBF80919E01882361F186E00E9430 |
:10F1B000A78F8091900199279F938F9380915F0AE9 |
:10F1C0009091600A6AE070E00E94F29C7F936F93D6 |
:10F1D0008FED90E09F938F938091FC099091FD09B2 |
:10F1E0009F938F9381E49AE09F938F93DF93CF93C4 |
:10F1F000E0918805F091890509958DB79EB70C9629 |
:10F200008DBF12C086E00E94A78F8FE49AE09F9383 |
:10F210008F93DF93CF93E0918805F091890509954D |
:10F220000F900F900F900F9080911805882309F48C |
:10F2300052C080912F05909130050E94581A882362 |
:10F2400091F08091A401882319F01092A40103C0C9 |
:10F2500081E08093A4018CED95E00E944F1A909379 |
:10F26000300580932F058091A4018823E1F080E090 |
:10F270000E94A78F1F921F929091180581E1989F7D |
:10F28000C00111248358944F9F938F93DF93CF93A2 |
:10F29000E0918805F091890509952DB73EB72A5F61 |
:10F2A0003F4F2DBF3BC086E00E94A78F809118057D |
:10F2B00099279F938F9386E59AE09F938F93DF938F |
:10F2C000CF93E0918805F091890509958DB79EB798 |
:10F2D00006968DBF23C0809142058823F9F00E94D5 |
:10F2E000AD8F80E10E94A78F8EE998E09F938F9366 |
:10F2F0008091000199279F938F9382E69AE09F93D4 |
:10F300008F93DF93CF93E0918805F091890509955C |
:10F310002DB73EB7285F3F4F2DBF5CC080E10E94F4 |
:10F32000A78F8091E0029091E1026CE370E00E946F |
:10F33000F29C9F938F938091E0029091E1026CE3A5 |
:10F3400070E00E94F29C7F936F938091D90A909114 |
:10F35000DA0A9F938F938DE69AE09F938F93CAE981 |
:10F36000DFE8DF93CF93E0918805F0918905099557 |
:10F370008091400A2DB73EB7265F3F4F2DBF80FFDB |
:10F3800029C08AE10E94A78F80913B0199279F9312 |
:10F390008F938091340490913504A0913604B091FC |
:10F3A0003704BC01CD0124E630E040E050E00E948B |
:10F3B0003B9D3F932F938AE79AE09F938F93DF9330 |
:10F3C000CF93E0918805F091890509958DB79EB797 |
:10F3D00008968DBFDF91CF910895CF93DF9380E0A2 |
:10F3E0000E94A78F80912009992787FD90959F9370 |
:10F3F0008F9380911809992787FD90959F938F93FC |
:10F4000080911009992787FD90959F938F93809104 |
:10F410000809992787FD90959F938F9381E89AE03B |
:10F420009F938F93CAE9DFE8DF93CF93E09188053C |
:10F43000F0918905099580E10E94A78F2DB73EB70D |
:10F44000245F3F4F2DBF80914009992787FD9095FC |
:10F450009F938F9380913809992787FD90959F936B |
:10F460008F9380913009992787FD90959F938F9373 |
:10F4700080912809992787FD90959F938F9381E923 |
:10F480009AE09F938F93DF93CF93E0918805F0915B |
:10F490008905099580912B082DB73EB7245F3F4F12 |
:10F4A0002DBF853098F480E10E94A78F81EA9AE011 |
:10F4B0009F938F93DF93CF93E0918805F091890517 |
:10F4C00009950F900F900F900F9018C08730B0F4EF |
:10F4D00088E10E94A78F8FED90E09F938F9382EB3E |
:10F4E0009AE09F938F93DF93CF93E0918805F091FB |
:10F4F000890509958DB79EB706968DBFDF91CF918F |
:10F5000008950F931F9380E00E94A78F2AE030E0B8 |
:10F510008091D50A9091D60AB9010E94F29C9F93DE |
:10F520008F938091D50A9091D60AB9010E94F29CDE |
:10F530007F936F938091200190912101B9010E94E6 |
:10F54000069D9F938F938091200190912101B90195 |
:10F550000E94069D7F936F938BEB9AE09F938F930E |
:10F560000AE91FE81F930F93E0918805F091890540 |
:10F57000099580E10E94A78F8DB79EB70C968DBF2D |
:10F580008091D90A9091DA0A9F938F938091D70A3C |
:10F590009091D80A9F938F938DEC9AE09F938F93CD |
:10F5A0001F930F93E0918805F091890509958DB718 |
:10F5B0009EB708968DBF1F910F910895EF92FF920D |
:10F5C0000F931F9380E00E94A78F8FEDE82EF12C00 |
:10F5D000FF92EF9280918A0190918B019F938F937C |
:10F5E0008091170599279F938F9389ED9AE09F93B8 |
:10F5F0008F930AE91FE81F930F93E0918805F0911C |
:10F600008905099580E10E94A78F8DB79EB70A965C |
:10F610008DBF8091150599279F938F93FF92EF924D |
:10F620008091160599279F938F938CEE9AE09F9374 |
:10F630008F931F930F93E0918805F09189050995A9 |
:10F640008DB79EB70A968DBF1F910F91FF90EF90D7 |
:10F6500008950F931F93CF93DF9380919E01CAE982 |
:10F66000DFE8882309F47DC080E00E94A78F8091A5 |
:10F670005C0A99279F938F9380915E0A99279F93A5 |
:10F680008F938FEF9AE09F938F938E01DF93CF93A9 |
:10F69000E0918805F091890509958DB79EB7089688 |
:10F6A0008DBF80915D0A833031F48CE00E94A78F7A |
:10F6B0008EE09BE005C08CE00E94A78F83E19BE079 |
:10F6C0009F938F93DF93CF93E0918805F091890505 |
:10F6D00009950F900F900F900F9080915B0A81FF1A |
:10F6E00012C08CE00E94A78F88E19BE09F938F93CC |
:10F6F0001F930F93E0918805F091890509950F906C |
:10F700000F900F900F9080E10E94A78F8091900141 |
:10F7100099279F938F938FED90E09F938F93809184 |
:10F72000610A9091620A9F938F9380915F0A9091F2 |
:10F73000600A6AE070E00E94F29C7F936F938DE113 |
:10F740009BE09F938F938AE99FE89F938F93E0912B |
:10F750008805F091890509958DB79EB70C968DBFE8 |
:10F7600012C082E00E94A78F80E39BE09F938F935B |
:10F77000DF93CF93E0918805F091890509950F906B |
:10F780000F900F900F90DF91CF911F910F910895DF |
:10F79000CF93C82F209131052093320599278F32BE |
:10F7A0009105E1F0803391051CF44F9779F027C063 |
:10F7B0008F349105D9F08F38910509F586E0289F9F |
:10F7C000F0011124E65EF54F849117C086E0289F72 |
:10F7D000F0011124E55EF54F84910FC086E0289F6B |
:10F7E000F0011124E45EF54F849107C086E0289F64 |
:10F7F000F0011124E35EF54F8491809331059091DF |
:10F800003105809132059813C0E08091A501282F21 |
:10F8100033278F5F8093A50120FF0FC00E94AD8F1B |
:10F820009091310586E0989FF0011124E25EF54F3A |
:10F83000259134918C2FF901099580E090E0CF91CA |
:10F8400008951092D60A1092D50A1092DA0A1092F0 |
:10F85000D90A1092D80A1092D70A1092DB0A8AE0CD |
:10F8600090E00E944F1A90933405809333050895D9 |
:10F87000CF93DF9380913305909134050E94581AFD |
:10F88000882309F4AFC080913305909134050A961E |
:10F890009093340580933305E0E0F0E09F0190E021 |
:10F8A0005FEFA1E0B9E04BE0ED018B8187FF0BC07A |
:10F8B0009F5F8D81E80FF11D8981280F311D8E8199 |
:10F8C000851708F4582F4150189647FFEDCF5093F5 |
:10F8D000DB0A232B41F52091390530913A054091FF |
:10F8E0003B0550913C05BB27A52F942F832F909368 |
:10F8F000380580933705AA27BB27281B390B4A0BED |
:10F900005B0BCF01AA27BB27280F391F4A1F5B1F9C |
:10F910002093390530933A0540933B0550933C05BD |
:10F92000E5E0F0E013C020913705309138052E173F |
:10F930003F0718F4E21BF30B02C0E0E0F0E0892F70 |
:10F940009927880F991FE80FF91F3596F093D60A6B |
:10F95000E093D50AEF3FF10578F480912001909172 |
:10F9600021018E9F90018F9F300D9E9F300D11249D |
:10F97000C90164E670E013C0CF019695879596950E |
:10F9800087952091200130912101289FA001299F76 |
:10F99000500D389F500D1124CA0169E170E00E949A |
:10F9A000F29C7093D80A6093D70A20913505309164 |
:10F9B00036052E0F3F1F30933605209335055EE048 |
:10F9C0002131350778F08091D90A9091DA0A0196B1 |
:10F9D0009093DA0A8093D90A20513E40309336053D |
:10F9E00020933505DF91CF91089530914905E32F9C |
:10F9F000FF2783E0EE0FFF1F8A95E1F7EF5FF64FD9 |
:10FA00002781422F552747FD509580914A05992718 |
:10FA1000841795072CF420934A0530934C050AC0AF |
:10FA2000222341F080914B0599274817590714F478 |
:10FA300020934B05832F8F5F809349058D30D0F045 |
:10FA40001092490580914B058F3F19F080933E0538 |
:10FA500002C010923E0580914A0580933F05809137 |
:10FA60004C0580933D058FEF80934B0510924A051E |
:10FA700010924C05089595E1899F802D11240E94D4 |
:10FA8000509580ED9DE09F938F9382E295E99F933F |
:10FA90008F93E0918805F091890509950F900F905B |
:10FAA0000F900F900895CF93C0E02091A60120936E |
:10FAB00043058091010485FF02C0C0E123C09091FD |
:10FAC00018059923B1F080913904882349F4E92F6E |
:10FAD000FF27EE0FFF1FE25CF44F8491882349F467 |
:10FAE000E92FFF27EE0FFF1FE35CF44FC491CC23F7 |
:10FAF00049F480919D0886FD03C01092A60104C0C0 |
:10FB0000C22F02C0C093430580914D058C1771F43C |
:10FB100080914E0590914F050E94581A882319F440 |
:10FB200080E090E017C088E893E102C080ED97E0A4 |
:10FB30000E944F1A90934F0580934E05CC2331F0CD |
:10FB40008091A601C81711F41092A601C0934D052B |
:10FB50008C2F9927CF91089540E050E030E08091BC |
:10FB6000AE0A99278A38910589F08B38910524F4DB |
:10FB70008938910541F013C08D38910569F08E38B0 |
:10FB8000910539F00CC044E35BE008C04CE05CE058 |
:10FB900005C04CED5AE002C048E05BE03CE29091C9 |
:10FBA000A30A20E08091A40A281770F4931760F448 |
:10FBB000DA01A90FB11DE22FFF27E057F54F858924 |
:10FBC0008C939F5F2F5FEECF089520E335E7809100 |
:10FBD0003B018B3211F08D32F9F480913E08282FD1 |
:10FBE000332780912E0490912F04829FA001839F40 |
:10FBF000500D929F500D1124CA0163E070E00E94E5 |
:10FC0000069DCB019B01205D3A48C196C19708F043 |
:10FC10003FC02EEF34E73CC0803229F580910104CB |
:10FC200081FF36C02091400530914105205D3A4862 |
:10FC300055E72133350748F085E72439380718F4AC |
:10FC400020E335E702C02456304045E7203334072F |
:10FC5000F8F454E72D3C350718F020E335E718C0D9 |
:10FC60002C593F4F15C08E3549F4909129048AE0F4 |
:10FC7000989F90011124205D3A480AC0863741F4CC |
:10FC8000909129048AE0989FC0011124281B390B08 |
:10FC9000C9010895EF92FF920F931F9399278A3815 |
:10FCA000910509F478C18B38910524F489389105C0 |
:10FCB00051F023C38D38910509F462C28E38910545 |
:10FCC00009F4BDC11AC30E94537D182F80930E0CF6 |
:10FCD0008091340490913504A0913604B09137049A |
:10FCE000BC01CD0124E630E040E050E00E943B9DA5 |
:10FCF000DA01C9018C509E4F90933A0B8093390BD7 |
:10FD0000112319F40E94E57D02C080E395E79093EA |
:10FD1000400B80933F0B80913F0B9091400B909351 |
:10FD2000420B8093410B9093440B8093430B2091A3 |
:10FD3000390B30913A0B80913D0B90913E0B281777 |
:10FD4000390724F430933E0B20933D0B80913B0BFD |
:10FD500090913C0B8217930724F430933C0B209333 |
:10FD60003B0B1092360B84E39BE0909360058093ED |
:10FD70005F0580913B0180935A0B8091000480FFC6 |
:10FD800002C083E401C080E280935B0B20911805E0 |
:10FD9000222309F1822F6AE00E94E69C805D809315 |
:10FDA000450B822F0E94E69C892F805D8093460B35 |
:10FDB0008AE38093470B81E1289FF0011124A8E496 |
:10FDC000BBE0E358F44F9FE084918D9391503196BE |
:10FDD00097FFFACF8FC28091010485FF0CC0A5E484 |
:10FDE000BBE0E4EAFDE094E184918D93915031967B |
:10FDF00097FFFACF7FC280914205882311F1A5E4D5 |
:10FE0000BBE0EDE9FDE096E084918D939150319651 |
:10FE100097FFFACF80910001805D8093490BACE49D |
:10FE2000BBE0EEE9F8E09BE081918D93915097FF64 |
:10FE3000FBCF80E28093570B8093580B8093590B34 |
:10FE400059C230914705332309F499C087E580935F |
:10FE5000450B80E58093460B40E24093470B209191 |
:10FE60004805822F6AE00E94E69C805D8093480BE3 |
:10FE7000822F0E94E69C892F805D8093490B8FE240 |
:10FE800080934A0B832F0E94E69C805D80934B0BEE |
:10FE9000832F0E94E69C892F805D80934C0B4093BA |
:10FEA0004D0B209144053091450583E0293E3807EC |
:10FEB00080F0C90168EE73E00E94F29CCB01805D86 |
:10FEC00080934E0BC90168EE73E00E94F29C9C0186 |
:10FED00002C040934E0B2536310580F0C90164E61F |
:10FEE00070E00E94F29CCB01805D80934F0BC901B2 |
:10FEF00064E670E00E94F29C9C0103C080E2809363 |
:10FF00004F0BC9016AE070E00E94F29CCB01805D5A |
:10FF10008093500BC9016AE070E00E94F29C805D02 |
:10FF20008093510B8DE68093520B80E28093530BAC |
:10FF300020914605253660F0822F64E60E94E69CFB |
:10FF4000805D8093540B822F0E94E69C292F02C073 |
:10FF50008093540B822F6AE00E94E69C805D809320 |
:10FF6000550B822F0E94E69C892F805D8093560B53 |
:10FF700083E78093570B80E28093580BBBC1A5E4C5 |
:10FF8000BBE0EAEBFDE094E184918D9391503196D2 |
:10FF900097FFFACFAFC18091340490913504A091BE |
:10FFA0003604B0913704BC01CD0124E630E040E0D6 |
:10FFB00050E00E943B9DDA01C9018C509E4F909306 |
:10FFC000220C8093210C80910E0C882319F40E943E |
:10FFD000E57D02C080E395E79093240C8093230C89 |
:10FFE00088E78093250C80915C0A8093260C809191 |
:10FFF0005B0A81FF02C084E407C080915D0A833000 |
:020000021000EC |
:1000000011F480E201C081E28093270C8CE09CE037 |
:100010009093600580935F05809190018093330CED |
:100020008091270C8093350C8091610A9091620A2F |
:1000300097FD0196959587958093280C5BC10E944A |
:10004000F57C8091340490913504A0913604B091F0 |
:100050003704BC01CD0124E630E040E050E00E94CE |
:100060003B9DDA01C9018C509E4F9093F70A809313 |
:10007000F60A80912001909121019093F10A8093DA |
:10008000F00A80912001909121019093F30A8093CE |
:10009000F20A8091FC099091FD0997FD01969595D2 |
:1000A00087958093E20A8093E90A2091610A309152 |
:1000B000620A37FF02C02F5F3F4F35952795209387 |
:1000C000E70A80915F0A9091600A64E170E00E9403 |
:1000D000F29C6093E80A2093EE0A6093EF0A809105 |
:1000E0000E0C882319F40E94E57D02C080E395E799 |
:1000F0009093FF0A8093FE0A88E78093000B80911B |
:100100002001909121019093FB0A8093FA0A80913B |
:100110003E058C5E8093F40A80913F058C5E80934F |
:10012000F50A8091D90A9091DA0A6AE070E00E949B |
:10013000F29C7093FD0A6093FC0A1092DE0A809193 |
:10014000D50A9091D60A9093F90A8093F80A8CED1B |
:100150009AE09093600580935F052091E0023091D2 |
:10016000E102C9016CE370E00E94F29C6093030B12 |
:10017000C9016CE370E00E94F29C8093040BBAC04A |
:100180000E94F57C80915F0A9091600A64E670E0BD |
:100190000E94F29C70931E0B60931D0B8091FC09D2 |
:1001A0009091FD0997FD01969595879580930E0B8B |
:1001B0008091610A9091620A97FD019695958795C5 |
:1001C0008093130B80910101482F55279A012B5FD3 |
:1001D0003F4F80912001909121012817390784F425 |
:1001E0008091200190912101841B950B9C01220F8D |
:1001F000331F280F391F822F825180931A0B02C0A0 |
:1002000010921A0BE0903404F090350400913604FB |
:1002100010913704C801B70124E630E040E050E017 |
:100220000E943B9D30931C0B20931B0B37FF04C097 |
:1002300010921C0B10921B0BC801B70124E630E092 |
:1002400040E050E00E943B9DDA01C9018C509E4F76 |
:100250009093200B80931F0B80912001909121019E |
:100260009093150B8093140B8091200190912101A4 |
:100270009093170B8093160B80910E0C882319F422 |
:100280000E94E57D02C080E395E79093220B809366 |
:10029000210B88E78093230B80912001909121010D |
:1002A0009093270B8093260B80913E058C5E809364 |
:1002B000180B80913F058C5E8093190B8091D90AB1 |
:1002C0009091DA0A6AE070E00E94F29C7093290B28 |
:1002D0006093280B10920A0B8091D50A9091D60A50 |
:1002E0009093250B8093240B88E09BE0909360050E |
:1002F00080935F052CE230E002C020E030E0C901CD |
:100300001F910F91FF90EF900895EF92FF920F933E |
:100310001F93CF93DF9380914005909141059C01FD |
:1003200053E0220F331F5A95E1F7281B390B8091B8 |
:10033000250390912603280F391F37FF02C0295F3C |
:100340003F4F43E0359527954A95E1F730934105B6 |
:100350002093400590915105992309F026C380917F |
:100360005005282F3327442755278F5F809350054A |
:10037000F9012131310508F015C3E857FF4F0C94FE |
:100380008D9D8091010485FF2AC080E00E945095D8 |
:1003900080912001909121016AE070E00E94069D09 |
:1003A0009F938F9380912001909121016AE070E0EA |
:1003B0000E94069D7F936F9386EE9DE09F938F939F |
:1003C00083E495E99F938F93E0918805F0918905E7 |
:1003D00009952DB73EB7285F3F4F2DBF28C080E05D |
:1003E0000E94509580912001909121016AE070E077 |
:1003F0000E94069D9F938F938091200190912101EF |
:100400006AE070E00E94069D7F936F9383EF9DE00A |
:100410009F938F9382E295E99F938F93E091880554 |
:10042000F091890509958DB79EB708968DBF80918B |
:10043000400A80FF3FC0809151048823E9F08AE0A0 |
:100440000E94509580913B0199279F938F938091B3 |
:10045000340490913504A0913604B0913704BC0166 |
:10046000CD0124E630E040E050E00E943B9D3F9308 |
:100470002F9380E09EE09BC68AE00E945095809179 |
:10048000340490913504A0913604B0913704BC0136 |
:10049000CD0124E630E040E050E00E943B9D3F93D8 |
:1004A0002F938CE09EE09F938F9382E295E99F9338 |
:1004B0008F93A4C78AE00E94509587E19EE09F93A6 |
:1004C0008F9382E295E90C94298B8091010485FF3A |
:1004D0002AC085E10E9450958091E0029091E1024E |
:1004E0006CE370E00E94F29C9F938F938091E002F6 |
:1004F0009091E1026CE370E00E94F29C7F936F9315 |
:1005000081E29EE09F938F9383E495E99F938F937D |
:10051000E0918805F091890509952DB73EB7285FD0 |
:100520003F4F2DBF28C085E10E9450958091E00289 |
:100530009091E1026CE370E00E94F29C9F938F9394 |
:100540008091E0029091E1026CE370E00E94F29CE5 |
:100550007F936F938EE29EE09F938F9382E295E963 |
:100560009F938F93E0918805F091890509958DB748 |
:100570009EB708968DBF8FE10E94509580E690E06F |
:100580009F938F938091FC099091FD099F938F9386 |
:100590008BE39EE09F938F93C2E2D5E9DF93CF93E5 |
:1005A000E0918805F09189050995809100042DB7A7 |
:1005B0003EB7285F3F4F2DBF80FF06C089E20E94F3 |
:1005C000509586E49EE06FC389E20E94509588E4CE |
:1005D0009EE0B5C68091010485FF1BC08AE20E949F |
:1005E00050958091D90A9091DA0A9F938F938AE46B |
:1005F0009EE09F938F9383E495E99F938F93E0917F |
:100600008805F091890509958DB79EB706968DBF2F |
:100610001BC08AE20E9450958091D90A9091DA0A13 |
:100620009F938F9382E59EE09F938F9382E295E95B |
:100630009F938F93E0918805F091890509952DB7D7 |
:100640003EB72A5F3F4F2DBF86E30E9450958091B1 |
:10065000D50A9091D60A6AE070E00E94F29C9F93BE |
:100660008F938091D50A9091D60A6AE070E00E943B |
:10067000F29C7F936F938AE59EE09F938F9382E233 |
:1006800095E99F938F93E0918805F09189050995ED |
:100690008DB79EB70896BAC689E00E94509586E647 |
:1006A0009EE09F938F9302E215E91F930F93E091D1 |
:1006B0008805F091890509958EE10E9450950F906B |
:1006C0000F900F900F9088E69EE09F938F931F935B |
:1006D0000F93E0918805F0918905099583E30E94C5 |
:1006E00050950F900F900F900F908AE69EE09F9389 |
:1006F0008F931F930F93E0918805F09189050995D9 |
:100700008FE30E9450950F900F900F900F908CE602 |
:100710009EE09F938F931F930F93E0918805F09134 |
:10072000890509958EE70E9450950F900F900F90C4 |
:100730000F9082E89EE09F938F931F930F938BC738 |
:1007400080919E01882309F462C08DE50E94509536 |
:1007500088E99EE09F938F93C2E2D5E9DF93CF9320 |
:10076000E0918805F0918905099584E50E945095EE |
:100770000F900F900F900F9080915C0A99279F9394 |
:100780008F938AE99EE09F938F93DF93CF93E091BD |
:100790008805F091890509958EE50E9450952DB741 |
:1007A0003EB72A5F3F4F2DBF80915F0A9091600A4C |
:1007B0006AE070E00E94F29C7F936F9383EA9EE070 |
:1007C0009F938F93DF93CF93E0918805F0918905F4 |
:1007D00009958DB79EB706968DBF80915D0A8330CF |
:1007E00081F480915B0A81FF06C08BE50E945095E1 |
:1007F0008DEA9EE0A4C58BE50E94509580EB9EE0BB |
:100800009EC58BE50E94509583EB9EE01EC784E059 |
:10081000CFC380919E01882309F47AC0809153054B |
:1008200092E2E92E95E9F92E882309F44BC089E676 |
:100830000E9450958091170599279F938F9386EB7F |
:100840009EE09F938F93FF92EF92E0918805F09145 |
:100850008905099585E70E9450952DB73EB72A5F17 |
:100860003F4F2DBF8091900199279F938F9300E672 |
:1008700010E01F930F938091610A9091620A9F93F9 |
:100880008F9381EC9EE09F938F93FF92EF92E09184 |
:100890008805F0918905099582E70E9450958DB7EA |
:1008A0009EB70A968DBF8091150599279F938F93C8 |
:1008B0001F930F938091160599279F938F938DEC2B |
:1008C0009EE064C689E60E94509580919001992728 |
:1008D0009F938F9380E690E09F938F938091610A1E |
:1008E0009091620A9F938F9380915E0A99279F93BC |
:1008F0008F938DED9EE09F938F93FF92EF92E09107 |
:100900008805F091890509958DB79EB70C967EC52F |
:1009100085E04EC3909118059923D1F080915C0534 |
:10092000882381F0903270F487E00E943B7D83E958 |
:100930000E9450958091180599279F938F9386EF79 |
:100940009EE0A0C383E90E94509581E09FE0AFC381 |
:100950008091010402E2E02E05E9F02E85FF06C039 |
:1009600084E90E94509587E09FE0D6C383E90E9406 |
:1009700050958AE19FE0D0C38091710C863059F484 |
:1009800080915305882319F0109253058BC681E09E |
:100990008093530587C6883009F084C60E94559518 |
:1009A00081E0D7C39093500585C6913009F0DCC330 |
:1009B00080915005282F3327442755278F5F809338 |
:1009C0005005F9012131310508F06FC6E756FF4F98 |
:1009D0000C948D9D8091010485FF43C080E00E94AE |
:1009E00050958091D90A9091DA0A9F938F938091C4 |
:1009F0002001909121016AE070E00E94069D9F9382 |
:100A00008F9380912001909121016AE070E00E9413 |
:100A1000069D7F936F938091E0029091E1026CE3D9 |
:100A200070E00E94F29C9F938F938091E0029091DE |
:100A3000E1026CE370E00E94F29C7F936F9380E38D |
:100A40009FE09F938F9383E495E99F938F93E09129 |
:100A50008805F091890509952DB73EB7225F3F4F74 |
:100A6000A2C580E00E9450958091D90A9091DA0A3F |
:100A70009F938F9380912001909121016AE070E013 |
:100A80000E94069D9F938F93809120019091210158 |
:100A90006AE070E00E94069D7F936F938091E00270 |
:100AA0009091E1026CE370E00E94F29C9F938F931F |
:100AB0008091E0029091E1026CE370E00E94F29C70 |
:100AC0007F936F938BE49FE0BEC285E10E945095B7 |
:100AD00080E690E09F938F9380918A0190918B01A3 |
:100AE0009F938F9386E69FE09F938F93C2E2D5E911 |
:100AF000DF93CF93E0918805F09189050995809166 |
:100B0000400A2DB73EB7285F3F4F2DBF80FF51C031 |
:100B100080915104882339F18FE10E945095809192 |
:100B2000340490913504A0913604B0913704BC018F |
:100B3000CD0124E630E040E050E00E943B9D3F9331 |
:100B40002F9380E79FE09F938F9382E395E99F9394 |
:100B50008F93E0918805F091890509958DB79EB72F |
:100B600006968DBF38C08FE10E9450958091340465 |
:100B700090913504A0913604B0913704BC01CD01A9 |
:100B800024E630E040E050E00E943B9D3F932F93ED |
:100B900089E79FE09F938F93DF93CF93E091880540 |
:100BA000F091890509952DB73EB72A5F3F4F2DBFBC |
:100BB00012C08FE10E94509582E89FE09F938F932F |
:100BC000DF93CF93E0918805F091890509950F9007 |
:100BD0000F900F900F9089E20E94509580913B01F9 |
:100BE00099279F938F938CE89FE004C480919E0186 |
:100BF0008823F9F08BE20E9450958091900199270B |
:100C00009F938F9380915F0A9091600A6AE070E0F1 |
:100C10000E94F29C7F936F9380E690E09F938F9366 |
:100C20008091610A9091620A9F938F938FE89FE071 |
:100C300058C182E0BDC18FE30E9450958091D70AD0 |
:100C40009091D80A9F938F938091D50A9091D60A5C |
:100C50006AE070E00E94F29C9F938F938091D50A86 |
:100C60009091D60A6AE070E00E94F29C7F936F93A5 |
:100C700086EA9FE09F938F93C2E2D5E9DF93CF93FB |
:100C8000E0918805F09189050995809100042DB7C0 |
:100C90003EB7265F3F4F2DBF80FF0AC082E50E940E |
:100CA00050958AEB9FE09F938F9382E395E9D1C49F |
:100CB00082E50E9450958DEB9FE041C380919E019B |
:100CC00012E2E12E15E9F12E882309F449C084E5EA |
:100CD0000E94509580915C0A99279F938F938091F1 |
:100CE0005E0A99279F938F9380EC9FE09F938F9349 |
:100CF000E701FF92EF92E0918805F091890509954F |
:100D00008DB79EB708968DBF80915D0A833051F4F0 |
:100D100084E60E94509583ED9FE09F938F93FF920E |
:100D2000EF920BC084E60E94509589ED9FE09F935F |
:100D30008F9383E495E99F938F93E0918805F091D9 |
:100D4000890509950F900F900F900F9080915B0A85 |
:100D500081FFB0C484E60E9450958FED9FE0EFC202 |
:100D600084E50E94509585EE9FE0D6C180915205A2 |
:100D7000C2E2EC2EC5E9FC2E882309F450C089E6B6 |
:100D80000E94509580911E096AE00E94E69C892F7E |
:100D900099279F938F9380911E090E94E69C992723 |
:100DA0009F938F93809116090E94E69C892F992723 |
:100DB0009F938F93809116090E94E69C99279F9399 |
:100DC0008F9380910E090E94E69C892F99279F930B |
:100DD0008F9380910E090E94E69C99279F938F9391 |
:100DE000809106090E94E69C892F99279F938F93F3 |
:100DF000809106090E94E69C99279F938F938BEF21 |
:100E00009FE09F938F93FF92EF92E0918805F0917E |
:100E1000890509952DB73EB72C5E3F4FC4C389E6BF |
:100E20000E94509580E690E09F938F9380912009D7 |
:100E3000992787FD90959F938F9380911809992703 |
:100E400087FD90959F938F9380911009992787FD37 |
:100E500090959F938F9380910809992787FD90958E |
:100E60009F938F9388E190E19F938F93FF92EF92EE |
:100E7000E0918805F091890509958DB79EB70E968A |
:100E8000C5C28091520590912B08882309F48DC02A |
:100E9000943009F48CC09630A1F58EE70E945095ED |
:100EA00080912E096AE00E94E69C892F99279F93E2 |
:100EB0008F9380912E090E94E69C99279F938F9390 |
:100EC000809126090E94E69C892F99279F938F93F2 |
:100ED000809126090E94E69C99279F938F938BE22D |
:100EE00090E19F938F9382E295E99F938F93E09196 |
:100EF0008805F091890509952DB73EB7245F3F4FCE |
:100F000052C3973008F4D6C38EE70E945095809163 |
:100F10003E096AE00E94E69C892F99279F938F9350 |
:100F200080913E090E94E69C99279F938F93809120 |
:100F300036090E94E69C892F99279F938F93809171 |
:100F400036090E94E69C99279F938F9380912E09E2 |
:100F50000E94E69C892F99279F938F9380912E0959 |
:100F60000E94E69C99279F938F93809126090E9467 |
:100F7000E69C892F99279F938F93809126090E9441 |
:100F8000E69C99279F938F938AE390E19F938F9399 |
:100F900082E295E99F938F93E0918805F09189050E |
:100FA00009958DB79EB7449631C2943021F486E0FE |
:100FB0000E943B7D7FC39630F1F48EE70E945095EE |
:100FC00080E690E09F938F9380913009992787FD69 |
:100FD00090959F938F9380912809992787FD9095ED |
:100FE0009F938F9387E590E19F938F9382E295E99A |
:100FF0009F938F93CFC2973008F45CC38EE70E9413 |
:10100000509580E690E09F938F93809140099927B7 |
:1010100087FD90959F938F9380913809992787FD3D |
:1010200090959F938F9380913009992787FD909594 |
:101030009F938F9380912809992787FD90959F937F |
:101040008F938AE690E19F938F9382E295E99F9335 |
:101050008F930ECF90911805992309F44AC080917F |
:101060005C058823F9F09032E8F487E00E943B7D2C |
:1010700083E90E9450958091180599279F938F933B |
:101080008DE790E19F938F9382E395E99F938F93F0 |
:10109000E0918805F091890509952DB73EB72A5F43 |
:1010A0003F4F81C283E90E94509588E890E19F9369 |
:1010B0008F9302E215E91F930F93E0918805F09159 |
:1010C000890509951F921F929091180581E1989FBB |
:1010D000C00111248358944F9F938F931F930F93B4 |
:1010E000E0918805F091890509958DB79EB70A961C |
:1010F0008DC180910104B2E2EB2EB5E9FB2E85FF94 |
:1011000006C084E90E9450958EE890E105C083E90D |
:101110000E94509581EA90E19F938F93FF92EF9206 |
:101120009AC28091710C863079F48091520588239F |
:1011300019F01092520503C081E08093520585E0BA |
:101140000E943B7D86E0A3C2883031F40E94559511 |
:1011500082E080935105A4C2813009F0A3C20E94AD |
:101160005595109251059CC2923009F0A1C2809110 |
:101170005005282F3327442755278F5F809350052C |
:10118000F9012131310508F090C2E655FF4F0C946A |
:101190008D9D80E00E9450958EE998E09F938F93FB |
:1011A0008091000199279F938F9387EB90E19F9304 |
:1011B0008F9382E395E99F938F93E0918805F09157 |
:1011C000890509952DB73EB7285F3F4FECC185E1F2 |
:1011D0000E9450958CEA98E09F938F938091010133 |
:1011E0006AE00E94E69C892F99279F938F938091B4 |
:1011F00001010E94E69C99279F938F9386EC90E1D2 |
:101200009F938F9382E295E99F938F93E091880556 |
:10121000F0918905099569CF8AE20E94509587ED82 |
:1012200090E19F938F93C2E2D5E9DF93CF93E09152 |
:101230008805F091890509958091400A0F900F90DB |
:101240000F900F9080FF41C0809139089091170452 |
:1012500081FD0BC0892F99279F938F938CED90E18F |
:101260009F938F93DF93CF9313CFE0918805F091F5 |
:101270008905933318F086EE90E102C08DEE90E17F |
:101280009F938F93DF93CF9309950F900F900F90BB |
:101290000F908091230AE0918805F0918905909143 |
:1012A000170480FF0BC0892F99279F938F9384EF9A |
:1012B00090E19F938F93DF93CF93A4C0892F9927B9 |
:1012C0009F938F938AEF90E1C4C080E091E137C093 |
:1012D0008FE30E94509589E091E19F938F93C2E242 |
:1012E000D5E9DF93CF93E0918805F09189050995C1 |
:1012F0000F900F900F900F9080918F08882319F412 |
:101300008DE091E11CC080910E04E0918805F09180 |
:101310008905882319F086E191E102C08DE191E110 |
:101320009F938F93DF93CF9309950F900F900F901A |
:101330000F9080919C0886FFBDC184E291E19F934C |
:101340008F93DF93CF9387C184E50E9450958BE202 |
:1013500091E19F938F93C2E2D5E9DF93CF93E09120 |
:101360008805F091890509958091400A0F900F90AA |
:101370000F900F9085FD03C080E391E108C080913C |
:101380007D080E945748823358F489E391E19F9386 |
:101390008F93DF93CF93E0918805F091890516C074 |
:1013A000843B18F080E491E1F2CF80919C08E091B9 |
:1013B0008805F091890585FF03C087E491E102C0AB |
:1013C0008EE491E19F938F93DF93CF9309950F90D4 |
:1013D0000F900F900F9080919308882309F46AC1B1 |
:1013E0008EE50E9450958091930899279F938F9343 |
:1013F00085E591E19F938F93DF93CF93E0918805EB |
:10140000F091890509958DB79EB706968DBF52C19B |
:1014100089E60E94509580E691E19F938F93C2E206 |
:10142000D5E9DF93CF93E0918805F091890509957F |
:101430000F900F900F900F9080919208E091880587 |
:10144000F0918905882351F099279F938F938AE61D |
:1014500091E19F938F93DF93CF931ECE8EE691E120 |
:101460009F938F93DF93CF93FAC080915405A2E2AC |
:10147000EA2EA5E9FA2E882309F053C08EE70E94D0 |
:1014800050958091690199279F938F9380912E08A1 |
:10149000E82FFF27EE0FFF1FEE59F64F8081918155 |
:1014A0009F938F9380912D08E82FFF27EE0FFF1F4A |
:1014B000EE59F64F808191819F938F9384E791E15C |
:1014C0009F938F93FF92EF92E0918805F0918905A9 |
:1014D000099583E90E9450958DB79EB70A968DBFF6 |
:1014E00080913008E82FFF27EE0FFF1FEE59F64FCF |
:1014F000808191819F938F9380912F08E82FFF2700 |
:10150000EE0FFF1FEE59F64F8081918181589F4F5A |
:101510009F938F9388E891E19F938F93FF92EF922F |
:101520004CCE8EE70E94509580913D0499279F9361 |
:101530008F9380913C0499279F938F9380913B04D4 |
:1015400099279F938F9387E991E19F938F93FF92C0 |
:10155000EF92E0918805F0918905099583E90E9451 |
:1015600050958DB79EB70A968DBF809140049927FC |
:101570009F938F9380913F0499279F938F9380919E |
:101580003E0499279F938F938BEA91E19F938F93CA |
:10159000FF92EF92E0918805F091890509952DB7AA |
:1015A0003EB7265F3F4F2DBF85C080915C058823E5 |
:1015B00009F480C08EE70E9450958091400A86FD14 |
:1015C00011C08FEB91E19F938F9383E495E99F93F3 |
:1015D0008F93E0918805F091890509950F900F9000 |
:1015E0000F900F9080919A0899278F709070892B97 |
:1015F00089F08EEC91E19F938F9383E495E99F931B |
:101600008F93E0918805F091890509950F900F90CF |
:101610000F900F908091400A82FF11C088ED91E1F8 |
:101620009F938F9383E495E99F938F93E09188052F |
:10163000F091890509950F900F900F900F90809170 |
:10164000400A83FD37C08DED91E19F938F9383E432 |
:1016500095E99F938F93E0918805F091890509950D |
:101660000F900F900F900F9025C00091710C0630D5 |
:1016700089F480915405882319F01092540503C011 |
:1016800081E08093540586E00E943B7D87E00E94C4 |
:101690003B7D08C0013031F40E94559500935105FF |
:1016A000109250051092710C05C01092500502C0A6 |
:1016B00010925105E6E0CDB7DEB70C947E9D4FB792 |
:1016C00028E130E0F8948091C9008F778093C900B9 |
:1016D0008091C9008F7B8093C9008091C9008F7D64 |
:1016E0008093C900832F99278093CD002093CC004D |
:1016F0008091C80082608093C80080E18093C90017 |
:101700008091CA008F778093CA008091CA008F7B36 |
:101710008093CA008091CA008091CA008F7E809316 |
:10172000CA008091CA0088608093CA008091C90075 |
:101730008B7F8093C9008091CA0084608093CA0027 |
:101740008091CA0082608093CA008091C80087FFA0 |
:1017500003C08091CE00F9CF8091C900806880934A |
:10176000C90080914F0C846080934F0C4FBF089547 |
:1017700090912A05992341F48F3031F490935605C6 |
:1017800080E580932A050895E0915605EF5FE09388 |
:101790005605E83121F481E0809355050895E9313B |
:1017A00020F089E1809356050895FF27E85CF34F08 |
:1017B00080830895A0E0B0E0E0EEFBE80C945E9D2D |
:1017C00091E0D92E82E0A82EBD2CE12C01E0F02E74 |
:1017D00080914F0C82FDB5C080916F008F7D80930A |
:1017E0006F00E0919508EE2351F0FF27EE0FFF1FE9 |
:1017F000EE59F64F80819181843691055CF4809199 |
:101800003A04883C20F480913A048C5E01C088EC54 |
:1018100080933A048091390C682F7727809157057F |
:101820008150809357058F3F31F41CE7C12E82E031 |
:101830008093570502C0C4E2CC2E40E04C1508F05E |
:101840007EC0EA2DFF27E85CF34F80818D2111F0E7 |
:101850006E297F298D2D9927880F991FD82E8823CF |
:1018600019F4B1E0DB2EAD0CEE0CFF1C20E0E2160B |
:1018700028E0F20609F061C0A1E0EA2EF12CCB01CC |
:101880008050944065E070E00E94069DAB2DBB2720 |
:10189000FD01EA0FFB1FEE59F64F808191819C01FB |
:1018A000220F331F280F391F260F371F37FF02C0A3 |
:1018B0002D5F3F4FE901D595C795D595C795CB01CC |
:1018C00001968C179D0714F4219706C06150704053 |
:1018D000C617D7070CF4219680913A04833CD8F0C0 |
:1018E0008D010A0F1B1FF801EE59F64F808191817F |
:1018F000FE01E81BF90BCF0163E070E00E94069D3A |
:10190000CB01880F991F860F971F0855164FF801B6 |
:101910009183808307C0AA0FBB1FA855B64F1196AD |
:101920001C921E92EB2DFF27EE0FFF1FEE59F64F74 |
:10193000D183C08360E070E0B3944F5F7FCF10929B |
:101940003A0110925505EAE0CDB7DEB70C947A9DC6 |
:101950000895089540E050E0809158059091590510 |
:101960009C01220F331F280F391F8091250390916E |
:101970002603280F391F37FF02C02D5F3F4F3595D3 |
:1019800027953595279530935905209358058091D3 |
:101990003B018B32D9F480913E08282F3327809168 |
:1019A0002E0490912F04829FA001839F500D929F3F |
:1019B000500D1124CA0157FD4F96AC0125E05595F5 |
:1019C00047952A95E1F74B5F5F4F3DC08D32D9F4C3 |
:1019D00080913E08282F332780912E0490912F0468 |
:1019E000829FA001839F500D929F500D1124CA0128 |
:1019F00057FD4F96AC0195E0559547959A95E1F7BF |
:101A00004550504020C0803271F48091010481FF24 |
:101A10001AC0C90137FD4F96AC0185E05595479531 |
:101A20008A95E1F710C08E3529F480912904482F5A |
:101A3000552709C0863739F480912904992744270E |
:101A40005527481B590BCA01AA2797FDA095BA2F05 |
:101A50008093990290939A02A0939B02B0939C0268 |
:101A600008950F931F930E94F57C8091200190911F |
:101A70002101AA2797FDA095BA2F8093C8019093C2 |
:101A8000C901A093CA01B093CB018091D50A90916E |
:101A9000D60AAA27BB278093DB019093DC01A09391 |
:101AA000DD01B093DE010AE010E08091D90A909147 |
:101AB000DA0AB8010E94F29CCB01AA27BB278093C7 |
:101AC000EE019093EF01A093F001B093F1018091AA |
:101AD000340490913504A0913604B0913704BC01D0 |
:101AE000CD0124E630E040E050E00E943B9D209391 |
:101AF000010230930202409303025093040280914A |
:101B00008A0190918B01AA2797FDA095BA2F809307 |
:101B1000140290931502A0931602B09317028091BD |
:101B20005C0A9927AA27BB27809327029093280253 |
:101B3000A0932902B0932A0280915E0A9927AA27CE |
:101B4000BB2780933A0290933B02A0933C02B09350 |
:101B50003D0280915F0A9091600AB8010E94F29C58 |
:101B6000CB01AA27BB2780934D0290934E02A093EE |
:101B70004F02B09350028091610A9091620AAA27A5 |
:101B800097FDA095BA2F8093600290936102A09375 |
:101B90006202B093630280913F059927AA27BB2771 |
:101BA0008093730290937402A0937502B0937602AF |
:101BB000809117059927AA27BB27809386029093C7 |
:101BC0008702A0938802B093890280911805992713 |
:101BD000AA27BB278093AC029093AD02A093AE02DC |
:101BE000B093AF021F910F9108954FB720E430E0FA |
:101BF000F8948091C9008F778093C9008091C900C3 |
:101C00008F7B8093C9008091C9008F7D8093C9002C |
:101C1000832F99278093CD002093CC008091C8001A |
:101C200082608093C80088E18093C9008091CA00D7 |
:101C30008F778093CA008091CA008F7B8093CA00FF |
:101C40008091CA008F7D8093CA008091CA008F7EE8 |
:101C50008093CA008091CA00877F8093CA008091D8 |
:101C6000C9008B7F8093C9008091CA0084608093F3 |
:101C7000CA008091CA0082608093CA008091C80027 |
:101C800087FF03C08091CE00F9CF8091C9008068A2 |
:101C90008093C9004FBF08950F931F93CF93DF9395 |
:101CA000482F4F5F893108F08BC0809161098417FC |
:101CB00020F44F5F409361094150CB0183539B4215 |
:101CC00068E170E00E94069DA42FBB27FD01EA0F8A |
:101CD000FB1FEE59F64F808191819B01281B390B28 |
:101CE000C90137FF03C0909581959F4F069794F4E3 |
:101CF00080913A04883C30F480913A04865F809366 |
:101D00003A0408C088EC80933A0480916F008F7D7C |
:101D100080936F00FD01EA0FFB1FEE59F64F8081A3 |
:101D200091819C01220F331F280F391F260F371F67 |
:101D300037FF02C02D5F3F4FE901D595C795D59577 |
:101D4000C795CB0101968C179D0714F4219706C007 |
:101D500061507040C617D7070CF4219680913A0461 |
:101D6000843BD8F08D010A0F1B1FF801EE59F64F86 |
:101D700080819181FE01E81BF90BCF0163E070E0E7 |
:101D80000E94069DCB01880F991F860F971F08554B |
:101D9000164FF8019183808307C0AA0FBB1FA85577 |
:101DA000B64F11961C921E92E42FFF27EE0FFF1FD5 |
:101DB000EE59F64FD183C083443011F410923A01AA |
:101DC000DF91CF911F910F910895CF93DF932091D1 |
:101DD000720C822F9927807F9070409709F066C01F |
:101DE0002F3109F040C08091730C8093630590916E |
:101DF000750C909365058091760C8093640599230A |
:101E000009F054C080912D08282F3327220F331F4B |
:101E1000F901E855F64F1182108280912E08A82F03 |
:101E2000BB27AA0FBB1FFD01E855F64F1182108298 |
:101E300080913008E82FFF27EE0FFF1FCF01885554 |
:101E4000964FEC01198218822E59364FE9011982FA |
:101E50001882AE59B64F11961C921E92EE59F64F4B |
:101E60001182108223C0C22FCF70CA30F8F4809143 |
:101E7000730C80939E0C8091740C80939D0C8091C8 |
:101E8000750C8093A00C8091760C80939F0C6091D0 |
:101E90009D0C70919E0C8C2F0E944C8E60919F0C1B |
:101EA0007091A00C8C2F8F5F0E944C8EDF91CF9190 |
:101EB0000895CF93C82F8F3F49F4809166058F3FD7 |
:101EC00029F4109268051092670532C020916805C8 |
:101ED000222339F4CF3111F485E001C084E08093EE |
:101EE000690580916905909167058217A0F4892F93 |
:101EF0008095809367058F3F19F48EEF8093670577 |
:101F000080916705C81711F40E94E58E109268054C |
:101F1000109267050BC0E22FFF27EE58F34FC083E6 |
:101F20002F5F209368059C0F90936705C09366050B |
:101F3000CF91089590916205933240F4E92FFF27E5 |
:101F4000E658F34F80839F5F909362050895833234 |
:101F500018F48D5F80936205089590E2EDE7FCE050 |
:101F60008FE19193815087FFFCCF0895CF93CFB736 |
:101F700023E031E0F8948091C9008F778093C90005 |
:101F80008091C9008F7B8093C9008091C9008F7DAB |
:101F90008093C900832F99278093CD002093CC0094 |
:101FA0008091C80082608093C80088E18093C90056 |
:101FB0008091CA008F778093CA008091CA008F7B7E |
:101FC0008093CA008091CA0080628093CA00809189 |
:101FD000CA0080618093CA008091CA0088608093A3 |
:101FE000CA008091C90084608093C9008091CA00B2 |
:101FF00084608093CA008091CA0082608093CA0086 |
:102000008091C80087FF03C08091CE00F9CF8091F6 |
:10201000C90080688093C9008091C9008064809362 |
:10202000C9000E94AD8FCFBFCF910895282F992767 |
:102030008F709070892B31F4209580916105822BEF |
:102040008093610508951F920F920FB60F9211248D |
:102050008F93EF93FF938091D902882309F068C092 |
:10206000E0916B05EE2389F480916A05882369F479 |
:1020700080917A0C882321F081E080936C0505C063 |
:102080008091C90081608093C90080916C0588238C |
:1020900079F4EF5FE0936B058091510C8E1720F47B |
:1020A00081E080936C051CC0FF27EF5AF34F3CC0C2 |
:1020B00080916A05882361F480917A0C882311F459 |
:1020C00083E003C0813999F481E080936A050FC0F1 |
:1020D000833099F480917A0C882349F010927A0C1D |
:1020E0008091C9008E7F8093C9008EEF1EC08091C1 |
:1020F000C90081608093C9000EC0833261F4809171 |
:10210000C9008E7F8093C9008FEF8093CE0081E05D |
:102110008093D90218C080916A05E82FFF27E658FE |
:10212000F34F8F5F80936A0580818093CE000BC050 |
:1021300010926A0510926B0510926C058091C9008F |
:1021400080618093C900FF91EF918F910F900FBE36 |
:102150000F901F901895682727E0322F67FF06C061 |
:10216000862F9927880F991F832702C0862F880FF3 |
:10217000682F215027FFF2CF992708950F931F93BF |
:10218000CF93DF93062F60E0162F601740F4EC0129 |
:1021900089910E94AB90682F1F5F1017C8F3862F9C |
:1021A0009927DF91CF911F910F910895DC0190E065 |
:1021B000961758F48C91803241F09F5F961728F45F |
:1021C000FD01E90FF11D8081F6CF892F9927089530 |
:1021D000A0E0B0E0EEEEF0E90C945F9D8FE9809313 |
:1021E000520C80E18093540C84EA8093550C85E571 |
:1021F0008093560C8DE58093570C1092580C80916B |
:102200006E05882309F06AC080916D0513E1819FF6 |
:10221000C001112463E08F549E4F0E94D690082F76 |
:1022200080916D05819FC00111246AE089559E4F00 |
:102230000E94D690982F800F865F8093510C4EEFAE |
:10224000B42EB80EB092530C20916D052093590C0A |
:10225000E92EFF24C70133E0880F991F3A95E1F773 |
:10226000802B80935A0C822F992723E1C22ED12CE8 |
:102270008C9D90018D9D300D9C9D300D1124C901C8 |
:1022800089559E4FA701BC018BE59CE00E94279BCE |
:10229000112780916D0599278C9DE0018D9DD00DB2 |
:1022A0009C9DD00D1124CE018F549E4FA801BC01DE |
:1022B000C701855A934F0E94279B0F5A134F0E0D4B |
:1022C0001F1D6B2D83E59CE00E94BE90F801828764 |
:1022D00080916E058F5F80936E0570C01091580CD1 |
:1022E0000E94318D4091DA024031C8F563E170E01F |
:1022F000812F9927DC01AA0FBB1FA80FB91FAF5A66 |
:10230000B34F842F9927869FF001879FF00D969FEA |
:10231000F00D1124E955FE4F2585C4E0880F991F63 |
:10232000CA95E1F7282BED012887268537853F7967 |
:1023300082899927982F88279295990F907E282B2C |
:10234000392B2987832F99278A87842F8F5F1F5FD7 |
:10235000163018F4482F803158F28093DA0283E067 |
:10236000189F90011124822F885F8093510C825C0A |
:102370008093530C812F99278C01000F111F080F98 |
:10238000191F0F5A134F822F8A5F682F83E59CE035 |
:102390000E94BE90F80180878091DA02803170F04F |
:1023A00081E08093DA0210926E0580916D058F5F57 |
:1023B00080936D05803110F010926D05E9E0CDB786 |
:1023C000DEB70C947B9D8091D902882309F447C025 |
:1023D0008091010485FD04C08091DE02882381F094 |
:1023E00082E980937A0C83E280937B0C8091DE02F9 |
:1023F000882309F485E580937C0C1092DE0202C0EC |
:1024000080937A0C8091DB028F3071F480916105AA |
:102410000E94C87B882341F081E980937A0C8093E5 |
:102420007B0C81E380937C0C1092D9028091C800D0 |
:1024300085FFFCCF8091C9008F7E8093C900809179 |
:10244000C9008E7F8093C9000E94E8908EE7809338 |
:10245000CE00809161058093DB02109261050895A2 |
:10246000EF92FF920F931F93CF93DF937C018B0129 |
:10247000EA01452B39F0F80181918F01F7010995A7 |
:102480002197C9F7E6E0CDB7DEB70C947E9DEF92B9 |
:10249000FF920F931F93CF93DF937C018B01EA018F |
:1024A000452B41F0F8010F5F1F4F8491F70109950B |
:1024B0002197C1F7E6E0CDB7DEB70C947E9D0F9370 |
:1024C0001F93CF938C01C62F161634F480E2F801C7 |
:1024D0000995C1501C16D4F3CF911F910F91089507 |
:1024E0000F931F93CF938C01C62F161634F480E3FD |
:1024F000F8010995C1501C16D4F3CF911F910F918B |
:102500000895A5E3B0E0E7E8F2E90C94569D2E9615 |
:10251000EEADFFAD2E9788249924540180915B0580 |
:10252000882321F42C961FAE1EAE2C97AEE44A2EC3 |
:10253000512C4C0E5D1E6F01B60105C0153239F0ED |
:102540000894C11CD11CF60114911123B9F7A601FE |
:10255000461B570B31F02C968EAD9FAD2C970E94E9 |
:102560004792112309F46AC20894C11CD11CFF24AC |
:10257000FDA6FCA6FFEFEF2EF9A6F6010894C11CFC |
:10258000D11C1491153721F0812F80628837B1F466 |
:10259000F0FE0AC0F20124E030E0420E531E8080BB |
:1025A0009180A280B3800AC0F20142E050E0440E64 |
:1025B000551E808191814C01AA24BB24103221F444 |
:1025C00089A58823D1F61DC0133219F458E0F52AE5 |
:1025D000D4CF1A3211F01D3291F41A3259F4F201AB |
:1025E00082E090E0480E591EE081ECA7EE232CF625 |
:1025F000E195ECA790E1F92AAFEDFA22BECF1B32AC |
:1026000011F419A7BACF1E32C1F5F6010894C11C06 |
:10261000D11C14911A3279F4F20122E030E0420E1A |
:10262000531E408151813FEF4F3F530714F44FEF4A |
:102630005FEFE42EA2CF40E050E0812F80538A303C |
:10264000A0F4CA01E3E0880F991FEA95E1F7840F2F |
:10265000951F480F591F410F511D40535040F6011F |
:102660000894C11CD11C1491E8CF8FEF4F3F58073D |
:1026700014F44FEF5FEFE42E85CF103329F4F4FC10 |
:102680007CCF90E2F92A79CF812F81538930D8F419 |
:1026900040E050E0CA0173E0880F991F7A95E1F796 |
:1026A000840F951F480F591F410F511D4053504033 |
:1026B000F6010894C11CD11C1491812F80538A30DB |
:1026C00048F34CA75FCF183619F4A4E0FA2A55CF87 |
:1026D0001C3619F4B1E0FB2A50CF133661F43E01E9 |
:1026E0000894611C711CF20122E030E0420E531E7E |
:1026F000808189833CC1143421F0143611F01936DD |
:1027000051F5143411F431E0F32AF0FE0AC0F2015D |
:1027100044E050E0440E551E80809180A280B3803A |
:102720000CC0F20182E090E0480E591E8081918138 |
:102730004C01AA2497FCA094BA2CB7FE0AC0B0940E |
:10274000A09490948094811C911CA11CB11C8DE2DA |
:1027500089A70AE06FC01F3411F01F3631F41F340F |
:1027600011F491E0F92A08E064C0103779F4F2011D |
:10277000A2E0B0E04A0E5B1E808191814C01AA2448 |
:10278000BB2400E1B0E4FB2A18E753C01337C1F5BE |
:10279000F20122E030E0420E531E6080718061142D |
:1027A000710489F43E010894611C711C88E28983DC |
:1027B0008EE6F301818385E78B838CE68C838D83A2 |
:1027C00089E28E831F82E7FC13C08E2D992787FD37 |
:1027D0009095AC0160E070E0C3010E941A9B0097E5 |
:1027E00029F0382E3618E3140CF0C3C03E2CC1C0BB |
:1027F000F30101900020E9F731973E2E3618B9C059 |
:10280000153511F0153731F4153511F4F1E0FF2AC3 |
:102810000AE00FC0183519F0183709F0A0C000E120 |
:10282000F3FE07C081149104A104B10411F020E467 |
:10283000F22A19A6EDA6E7FC02C03FEDF32269E2F9 |
:10284000662E712C6C0E7D1E81149104A104B104BE |
:1028500021F44DA5442309F47BC0802F9927AA2792 |
:10286000BB278EA79FA7A8ABB9AB202E332490E03F |
:10287000891690E0990691E0A90690E0B90648F023 |
:10288000C501B4012EA53FA548A959A90E94199DCB |
:1028900017C0AFEF8A169104A104B10449F040F0CB |
:1028A000C401B1010E94F29C9B014427552708C036 |
:1028B000882D602F0E94E69C282F33274427552718 |
:1028C0002AAB3BAB4CAB5DAB0A3059F48AA9880FFD |
:1028D000880F880F9AA9990F890F382D381B832FDD |
:1028E00010C0003139F48AA98295807F482D481B99 |
:1028F000842F07C08AA9880F880F880F582D581B6E |
:10290000852F90E02EA53FA548A959A982169306C8 |
:10291000A406B50608F091E08AA89BA8ACA8BDA8BB |
:102920008A3010F4805D04C0895A183509F48F7D0F |
:10293000D3018E933D01992309F099CF083041F4DA |
:10294000F3FE06C0803321F080E3FD0182933F0156 |
:10295000CE010196382E3618F8E23F0E0BC0112337 |
:1029600009F46CC03E010894611C711C198351E08C |
:10297000352E19A6032D2DA4231827FC222489A562 |
:10298000882311F00F5F02C0F6FC0E5F020DEF2CE2 |
:10299000FF24C70180739070892B49F48CA5801B9C |
:1029A000682F2C968EAD9FAD2C970E945F9289A5C3 |
:1029B000882331F041E050E0BE01675D7F4F0AC0DF |
:1029C000E6FE0EC080E38AA71BA742E050E0BE01EE |
:1029D000665D7F4F2C968EAD9FAD2C970E943092F6 |
:1029E000C70180739070809749F48CA5801B682F75 |
:1029F0002C968EAD9FAD2C970E947092622D2C96D6 |
:102A00008EAD9FAD2C970E947092832D992787FDE4 |
:102A10009095AC01B3012C968EAD9FAD2C970E9482 |
:102A20003092E4FE89CD2CA5201B2CA7622F2C967A |
:102A30008EAD9FAD2C970E945F927ECDE2E1CB5C84 |
:102A40000C94729D982F8091790C883A50F4809163 |
:102A5000790CE82FFF27E05AF44F93838F5F809320 |
:102A6000790C0895982F8091790C883A58F48091C8 |
:102A7000790CE82FFF27E05AF44F906893838F5F1B |
:102A80008093790C0895982F80915C05882321F01C |
:102A9000892F0E9432950895892F0E9422950895CA |
:102AA000883A10F48093790C089580E090E2E3E690 |
:102AB000FBE091938F5F883AE0F308954FB721E8E8 |
:102AC00030E0F8948091C9008F778093C90080919D |
:102AD000C9008F7B8093C9008091C9008F7D80934E |
:102AE000C900832F99278093CD002093CC0080913B |
:102AF000C80082608093C80088E18093C9008091FB |
:102B0000CA008F778093CA008091CA008F7B809320 |
:102B1000CA008091CA008F7D8093CA008091CA004C |
:102B20008F7E8093CA008091CA00877F8093CA00FD |
:102B30008091C90084608093C9008091CA0084603C |
:102B40008093CA008091CA0082608093CA008091FD |
:102B5000C90081608093C9008091C80087FF03C0CD |
:102B60008091CE00F9CF8091C90080688093C90020 |
:102B70004FBF3CE73093DC0A2DE72093070B8EE82C |
:102B80008093DD0A1092F90A1092F80A1092E20A74 |
:102B900080EE8093DF0A3093340B20935F0B10920A |
:102BA000400B10923F0B1092420B1092410B10926F |
:102BB000440B1092430B84EF91E090933E0B809373 |
:102BC0003D0B90933C0B80933B0B90933A0B80937F |
:102BD000390B1092360B89E88093350B10925D0B00 |
:102BE00010925E0B80E98093370B30930C0C20938E |
:102BF000370C10920E0C8AE880930D0C1092140C76 |
:102C00001092130C1092120C1092160C1092170CBA |
:102C10001092180C1092190C10921B0C10921C0C94 |
:102C200010921D0C10921E0C1092220C1092210C6E |
:102C30001092200C10921F0C80EA80930F0C30939E |
:102C4000080B2093330B10920A0B8DE88093090B2D |
:102C50001092320B80ED80930B0B8BE78093600B0F |
:102C600080E88093610B1092620B8091E20A90E2FF |
:102C7000E3E6FBE091938F5F883AE0F38DE7809382 |
:102C80000B0C0895CF93C82F80916F05803879F48D |
:102C90008C2F0E944A7E80935E0580915E0588237A |
:102CA00031F1C093780C80915E058F5F16C08F372D |
:102CB000F1F48091710C882329F48C2F80958F700A |
:102CC0008093710C0E94537D8093620B80E69BE0A1 |
:102CD0009093600580935F058DEA80935E058091F7 |
:102CE000C9008F7E8093C90082E080935D05C09308 |
:102CF0006F05CF91089530915D05332331F08091B8 |
:102D00005D05815080935D05089580915E0588235F |
:102D100081F140915E0590917005413091F4292F29 |
:102D2000309370058091C90080618093C9008091C3 |
:102D30005C05882319F030935C0510C040935C0556 |
:102D40000DC0E0915F05F09160058191F093600501 |
:102D5000E0935F05282F980F909370058091C8002D |
:102D600085FFFCCF2093CE0080915E05815080933B |
:102D70005E0508956F927F928F929F92AF92BF925D |
:102D8000CF92DF92EF92FF920F931F93882361F10E |
:102D9000823041F41092790510927A0510927B05E9 |
:102DA00010927C0520913404309135044091360412 |
:102DB00050913704DA01C90169E0880F991FAA1FF1 |
:102DC000BB1F6A95D1F78093280390932903A093A2 |
:102DD0002A03B0932B03209371053093720540931F |
:102DE000730550937405D2C0A0903404B09035049C |
:102DF000C0903604D090370480917105909172058F |
:102E0000A0917305B091740535014601681A790ADD |
:102E10008A0A9B0A60927505709276058092770502 |
:102E20009092780580912C0390912D0388539F4FA9 |
:102E30007C010027F7FC0095102F8091100A9091DB |
:102E4000110A9C01442737FD4095542FC801B70152 |
:102E50000E94C79C97FF04C06150704E8F4F9F4FD8 |
:102E6000DC01CB010DE0B595A795979587950A955F |
:102E7000D1F7885C9040A040B04080937D0590934E |
:102E80007E05A0937F05B0938005BC01CD012DE0A8 |
:102E900030E040E050E00E94C79C7B018C01C401FF |
:102EA000B30124EF31E040E050E00E94C79CDC0118 |
:102EB000CB01E80EF91E0A1F1B1F80917905909126 |
:102EC0007A05A0917B05B0917C0520918105309118 |
:102ED00082054091830550918405821B930BA40BBE |
:102EE000B50BE80EF91E0A1F1B1FE0927905F09240 |
:102EF0007A0500937B0510937C05D801C7018050AB |
:102F00009E4FAF4FBF4FB7FF06C0D801C7018150DA |
:102F10009A4FAF4FBF4F1AE0B595A79597958795F4 |
:102F20001A95D1F78093810590938205A09383052C |
:102F3000B0938405A0927105B0927205C09273059A |
:102F4000D0927405209128033091290340912A03DF |
:102F500050912B03E0901F03F09020030091210378 |
:102F6000109122032E193F09400B510B280F391FD6 |
:102F70004A1F5B1F2A0D3B1D4C1D5D1D209328031E |
:102F80003093290340932A0350932B0380918105AA |
:102F900090918205909326038093250380912803C6 |
:102FA00090912903A0912A03B0912B03BC01CD017C |
:102FB0001F910F91FF90EF90DF90CF90BF90AF9057 |
:102FC0009F908F907F906F9008952FB740E0F89476 |
:102FD000E0E0F0E081E2809357009491E2E0F0E0DD |
:102FE000809357003491E4E0F0E08093570084919F |
:102FF0002FBF9E3199F4363941F4893011F441E004 |
:103000000DC08A3059F442E009C0373939F48630AE |
:1030100011F443E003C0853009F444E0842F99277C |
:1030200008959FB7F8948091C900877F8093C90065 |
:103030008091C9008F7E8093C9008091C9008F77ED |
:103040008093C9008091C9008F7B8093C9008091D3 |
:10305000C9008F7D8093C9009FBF08951F93CF93B0 |
:10306000DF93182F80915B05882309F4A7C0809116 |
:10307000D802181709F4A2C080915A05882321F4B8 |
:103080000E94E59780935A0582ED91E09093390173 |
:10309000809338018FEB92E19F938F93C4E4D6E144 |
:1030A000DF93CF93E0918805F091890509950F9002 |
:1030B0000F900F900F90812F9927AA27BB27FC0113 |
:1030C000099778F5E554FF4F2091880530918905DF |
:1030D0000C948D9D8BEB92E102C082EB92E19F9369 |
:1030E0008F93DF93CF93F901099527C08DEA92E181 |
:1030F000F6CF85EA92E1F3CF8DE992E19F938F932A |
:10310000DF93CF93F901099588ED91E09093390110 |
:103110008093380112C088E992E1E1CF8CEC92E112 |
:10312000DECF82ED92E19F938F93DF93CF93E09177 |
:103130008805F0918905099510E00F900F900F9088 |
:103140000F9080915A05843011F0823011F50E9461 |
:103150001198812F8150833018F40E94A5762CC0DD |
:10316000143019F40E94B68F27C0183019F40E9449 |
:10317000A88C22C0153019F40E94F58D1DC01630A0 |
:1031800019F40E945E9518C01730B1F40E945F8B4D |
:1031900013C0112389F088EE92E19F938F9384E40A |
:1031A00096E19F938F93E0918805F09189050995A9 |
:1031B0000F900F900F900F901093D802DF91CF9146 |
:1031C0001F9108951F93CF93DF93182F81E0809371 |
:1031D0005B054091D702E8E4F2E120E030E05FE4F3 |
:1031E000849199272F5F3F4F829FB001839F700D7D |
:1031F000929F700D112446275150319657FFF0CF02 |
:103200004093D702E0E2F2E120E030E057E284911F |
:1032100099272F5F3F4F829FB001839F700D929F30 |
:10322000700D112446275150319657FFF0CF40932F |
:10323000D70280915A05882321F40E94E597809354 |
:103240005A058091D702833459F088E190E029E251 |
:103250000FB6F894A895809360000FBE209360008D |
:1032600081E892E990938905809388050E94FB0983 |
:103270008CE690E09F938F938BE590E09F938F93E4 |
:103280001F921F92809102016AE00E94E69C892FA2 |
:1032900099279F938F93809102010E94E69C992722 |
:1032A0009F938F9383E093E19F938F93C4E4D6E140 |
:1032B000DF93CF93E0918805F0918905099588E423 |
:1032C00092E19F938F93DF93CF93E0918805F091E4 |
:1032D0008905099580E292E19F938F93DF93CF93C5 |
:1032E000E0918805F091890509950E94FB0983EC1E |
:1032F0008093810080916F00806280936F008DB712 |
:103300009EB746968DBF133081F087E393E19F937C |
:103310008F93DF93CF93E0918805F091890509950C |
:103320000F900F900F900F90F0CFDF91CF911F91E2 |
:103330000895809193088D3338F080915B0A87FD62 |
:1033400003C08CE38093930880914208882331F076 |
:103350008055853618F08FE7809342080895809154 |
:103360005B05882309F477C080918505815080939F |
:103370008505882309F053C089E1809385058091F4 |
:1033800093088E3338F080915B0A87FD03C08DE38C |
:103390008093930880913A04823820F5809102044A |
:1033A00090910304805D974020F08091DB0A843681 |
:1033B00020F41092870510928605809186059091E1 |
:1033C0008705009739F101979093870580938605CB |
:1033D000419728F180915B0A84FF21C0809100040D |
:1033E00084601BC080913A04853BC8F0909193089B |
:1033F00084E1989FC0011124409620918605309168 |
:1034000087052817390730F42F5F3F4F3093870522 |
:1034100020938605809100048B7F80930004909117 |
:10342000D802963019F40E947B960FC08091DC027E |
:10343000882321F081508093DC0208958BE48093EF |
:10344000DC02943011F40E94E3918091D70283341E |
:1034500011F010925B0508951F920F920FB60F9214 |
:1034600011242F933F934F935F936F937F938F9389 |
:103470009F93AF93BF93EF93FF932091CE008091E2 |
:10348000E8028823B1F02093C6008091E8028230E0 |
:10349000B9F52F3FA9F58FEF94E3ACE0B0E0C29708 |
:1034A000A109B109B7FFFBCF8091CB058093CE0076 |
:1034B00027C09091D802892F8150833020F4822F29 |
:1034C0000E94FC761DC0943021F4822F0E94169039 |
:1034D00017C0983021F4822F0E94A98C11C095301A |
:1034E00021F4822F0E94598F0BC0963021F4822F35 |
:1034F0000E94429605C0973019F4822F0E94B88B23 |
:10350000FF91EF91BF91AF919F918F917F916F91BB |
:103510005F914F913F912F910F900FBE0F901F9091 |
:103520001895002422273327442751E0BB27EE2794 |
:10353000FF27A0E1660F771F881F991F001C221F1D |
:10354000331F441F660F771F881F991F001C221FFF |
:10355000331F441F2AF4050E2B1F3E1F4F1F04C0AC |
:10356000051A2B0B3E0B4F0B550FBB1FEE1F587F41 |
:10357000556047FD5250AA95E9F6E695B7955795DF |
:10358000E695B7955795852F9B2F089522273327CA |
:1035900041E0552768E0880F991F221F331F880FCD |
:1035A000991F221F331F1AF4240F351F02C0241B3A |
:1035B000350B440F551F487F456037FD42506A95D3 |
:1035C00051F75695479556954795842F0895AA2704 |
:1035D00097FF04C0809590958A1F9A1F77FF04C0BB |
:1035E000609570956A1F7A1F669F9001779FA00172 |
:1035F000679F300D411D5A1F300D411D5A1F889F76 |
:10360000F001999F2E0F3F1F401D511D899F300DC6 |
:10361000411D5A1F300D411D5A1FCA01B901112405 |
:1036200080CFFB01DC0102C005900D92415050405B |
:10363000D8F70895FC014150504030F00190061633 |
:10364000D1F73197CF010895882799270895FB0175 |
:10365000DC0102C001900D9241505040D8F708950E |
:10366000A0E0B0E0E6E3FBE90C945E9D6C017B0119 |
:10367000EA01590121978FEFCF3FD80789F08601E2 |
:103680000894C11CD11CC7010894E11CF11CF50170 |
:103690000995F80180832197FFEFCF3FDF0779F786 |
:1036A000EAE0CDB7DEB70C947A9DCF92DF92EF922D |
:1036B000FF920F931F937C016B01FB010995082F6B |
:1036C000C7010196F6010995182FC8011F910F91A6 |
:1036D000FF90EF90DF90CF900895A0E0B0E0E3E797 |
:1036E000FBE90C94609D8C017B01EA016901219743 |
:1036F0008FEFCF3FD80771F0F70121917F01C8010B |
:103700000F5F1F4F622FF60109952197FFEFCF3F03 |
:10371000DF0791F7E8E0CDB7DEB70C947C9DCF9240 |
:10372000DF92EF92FF920F931F936C018B017A014E |
:10373000FA010995812F9927682FC6010196F70193 |
:1037400009951F910F91FF90EF90DF90CF90089512 |
:103750005058BB27AA270ED0E0C0D1D030F0D6D029 |
:1037600020F031F49F3F11F41EF4C6C00EF4E09532 |
:10377000E7FBBCC0E92FE2D080F3BA1762077307FA |
:103780008407950718F071F49EF5FAC00EF4E095E1 |
:103790000B2EBA2FA02D0B01B90190010C01CA010B |
:1037A000A0011124FF27591B99F0593F50F4503EB6 |
:1037B00068F11A16F040A22F232F342F4427585FA8 |
:1037C000F3CF469537952795A795F0405395C9F7C0 |
:1037D0007EF41F16BA0B620B730B840BBAF0915078 |
:1037E000A1F0FF0FBB1F661F771F881FC2F70EC017 |
:1037F000BA0F621F731F841F48F4879577956795EA |
:10380000B795F7959E3F08F0B3CF9395880F08F0D2 |
:103810009927EE0F97958795089598D088F09F5730 |
:1038200090F0B92F9927B751A0F0D1F0660F771F0C |
:10383000881F991F1AF0BA95C9F712C0B13081F0EC |
:103840009FD0B1E008959CC0672F782F8827B85F7C |
:1038500039F0B93FCCF3869577956795B395D9F74D |
:103860003EF490958095709561957F4F8F4F9F4F57 |
:103870000895E89409C097FB3EF490958095709563 |
:1038800061957F4F8F4F9F4F9923A9F0F92F96E9AC |
:10389000BB279395F695879577956795B795F11121 |
:1038A000F8CFFAF4BB0F11F460FF1BC06F5F7F4FBE |
:1038B0008F4F9F4F16C0882311F096E911C07723D0 |
:1038C00021F09EE8872F762F05C0662371F096E8D9 |
:1038D000862F70E060E02AF09A95660F771F881FA8 |
:1038E000DAF7880F9695879597F9089597F99F6766 |
:1038F00080E870E060E008959FEF80EC0895002478 |
:103900000A941616170618060906089500240A9444 |
:1039100012161306140605060895092E0394000CCA |
:1039200011F4882352F0BB0F40F4BF2B11F460FF59 |
:1039300004C06F5F7F4F8F4F9F4F089557FD905882 |
:10394000440F551F59F05F3F71F04795880F97FB63 |
:10395000991F61F09F3F79F087950895121613061D |
:103960001406551FF2CF4695F1DF08C0161617064C |
:103970001806991FF1CF8695710561050894089581 |
:10398000E894BB2766277727CB0197F90895629FB4 |
:10399000D001739FF001829FE00DF11D649FE00D47 |
:1039A000F11D929FF00D839FF00D749FF00D659FA8 |
:1039B000F00D9927729FB00DE11DF91F639FB00DA7 |
:1039C000E11DF91FBD01CF0111240895991B79E074 |
:1039D00004C0991F961708F0961B881F7A95C9F79F |
:1039E00080950895AA1BBB1B51E107C0AA1FBB1FEE |
:1039F000A617B70710F0A61BB70B881F991F5A957B |
:103A0000A9F780959095BC01CD01089597FB092EEB |
:103A100007260AD077FD04D0E5DF06D000201AF48F |
:103A2000709561957F4F0895F6F7909581959F4F1A |
:103A30000895A1E21A2EAA1BBB1BFD010DC0AA1FEF |
:103A4000BB1FEE1FFF1FA217B307E407F50720F007 |
:103A5000A21BB30BE40BF50B661F771F881F991F82 |
:103A60001A9469F760957095809590959B01AC01CB |
:103A7000BD01CF01089597FB092E05260ED057FDF5 |
:103A800004D0D7DF0AD0001C38F45095409530950B |
:103A900021953F4F4F4F5F4F0895F6F790958095D2 |
:103AA000709561957F4F8F4F9F4F08952F923F9252 |
:103AB0004F925F926F927F928F929F92AF92BF923E |
:103AC000CF92DF92EF92FF920F931F93CF93DF93EA |
:103AD000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE47 |
:103AE000CDBF09942A88398848885F846E847D8494 |
:103AF0008C849B84AA84B984C884DF80EE80FD8096 |
:103B00000C811B81AA81B981CE0FD11D0FB6F8940B |
:103B1000DEBF0FBECDBFED010895EE0FFF1F059074 |
:083B2000F491E02D0994FFCFA0 |
:103B2800035E0A010164FF010020FFFFC01FC01FE0 |
:103B3800010101737373FF03007D0000C409C40908 |
:103B48006400104167696C650051756164726F00AB |
:103B58000000000000006400D20101200B050000F5 |
:103B6800ECFF00020406070808080706040200FE26 |
:103B7800FCFAF9F8F8F8F9FAFCFE0002040607085E |
:103B8800086440415A4655326464640A029696961F |
:103B9800960840403A1030380132FF03780090D040 |
:103BA800030090D0030032002064FFFFE803646440 |
:103BB800200B0A0D0B0E100B0A0C0F0B1110FA201C |
:103BC800680101010101154D4B20202020202020F3 |
:103BD80020202020010000000000566F6C746167EF |
:103BE8006520202056202001000000000143757246 |
:103BF80072656E7420202041202001000000000121 |
:103C08004361706163697479202041682001000074 |
:103C1800000002416C74697475646520206D202071 |
:103C2800010000000000436F6D7061737320202055 |
:103C3800B020200100000000005361747320202090 |
:103C4800202020202020010000000000537065651E |
:103C58006420202020206D2F730100000000004404 |
:103C6800697374616E636520206D20200100000077 |
:103C78000000486F6D652D4469722020B020200136 |
:103C880000000000006D61782E54656D702E20B024 |
:103C980043200100000000004D61676E2E666965D3 |
:103CA8006C64252020010000000000566172696FD5 |
:103CB8002020202020202020010000000000457244 |
:103CC800726F72436F64652020202001000000009D |
:103CD8000066726569202020202020202020010015 |
:103CE8000000000366726569202020202020202023 |
:0E3CF8002001000000000370FF01010F6400B6 |
:00000001FF |
/branches/V0.91L_ACC-HH_MartinR/Hex-Files/Flight-Ctrl_MEGA644_V0_91L_SVN683.hex |
---|
0,0 → 1,3959 |
:100000000C94DA050C9420060C9420060C9420061F |
:100010000C9420060C9420060C9420060C942006C8 |
:100020000C9420060C9431190C9420060C94200694 |
:100030000C9415330C9420060C9420060C94200686 |
:100040000C9420060C9420060C9454150C94200655 |
:100050000C94B20B0C9420060C947C0B0C94200690 |
:100060000C94FA1B0C9420060C948B2E0C942006F6 |
:100070000C9407780C9420060C947672211C261C94 |
:100080002B1C341C4B1C621C721C821C9F1CC31E2C |
:10009000621C751D861DB51DD31DF01D4A1EA51EB3 |
:1000A000CF20712100228022B8225B236A25CB2534 |
:1000B00045267626CE26FC2629278C27D6272028DB |
:1000C0001929AA2EDE2E212F912FA92FEA2FA13038 |
:1000D0006831683168316831683168316831683158 |
:1000E0006831683168311D311F3124313C313E3176 |
:1000F0009D667867FD673E674F687D68DA666D6765 |
:100100000A0D3D3D3D3D3D3D3D3D3D3D3D3D3D3D82 |
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F |
:100120003D3D3D3D3D000A0D426174743A0020257D |
:10013000642043656C6C732000204C6F77207761DE |
:10014000726E696E673A2025642E2564000A0D469A |
:100150006F756E6420424C2D4374726C3A200025FA |
:1001600064000A0D0A0D2121204D495353494E4781 |
:1001700020424C2D4354524C3A202564202121002A |
:100180000A0D43616C6962726174696E67207072F6 |
:100190006573737572652073656E736F722E2E00B2 |
:1001A0004F4B0A0D000A0D466C696768742D74691F |
:1001B0006D65202575206D696E20546F74616C3AF1 |
:1001C0002575206D696E00416E676C654E69636BC5 |
:1001D00020202020202020416E676C65526F6C6CBF |
:1001E000202020202020204163634E69636B202063 |
:1001F00020202020202020416363526F6C6C20203F |
:10020000202020202020205961774779726F2020FC |
:1002100020202020202020416C74697475646520A2 |
:100220005B302E316D5D204163635A2020202020F9 |
:100230002020202020202047617320202020202003 |
:1002400020202020202020436F6D70617373205682 |
:10025000616C7565202020566F6C74616765205B4A |
:10026000302E31565D2020526563656976657220B7 |
:100270004C6576656C20204779726F20436F6D70F6 |
:10028000617373202020204D6F746F722031202005 |
:10029000202020202020204D6F746F7220322020DB |
:1002A000202020202020204D6F746F7220332020CA |
:1002B000202020202020204D6F746F7220342020B9 |
:1002C0002020202020202031362020202020202007 |
:1002D00020202020202020313720202020202020F6 |
:1002E00020202020202020313820202020202020E5 |
:1002F00020202020202020313920202020202020D4 |
:1003000020202020202020536572766F202020207E |
:1003100020202020202020486F766572676173209E |
:100320002020202020202043757272656E74205B8F |
:10033000302E31415D202043617061636974792002 |
:100340005B6D41685D20204865696768742053656E |
:1003500074706F696E742032352020202020202098 |
:100360002020202020202032362020202020202065 |
:1003700020202020202020436F6D70617373205354 |
:100380006574706F696E744932432D4572726F7275 |
:1003900020202020202020424C204C696D697420B0 |
:1003A000202020202020204750535F4E69636B207F |
:1003B000202020202020204750535F526F6C6C205B |
:1003C0002020202020202021212120494E434F4D54 |
:1003D00050415449424C4520212121002E000A0D54 |
:1003E00020444143206F7220493243204552524FEE |
:1003F000522120436865636B204932432C203356D9 |
:100400007265662C2044414320616E6420424C2D6D |
:100410004374726C005B25695D005B25695D002B90 |
:10042000204D696B726F4B6F70746572202B0048A2 |
:10043000573A5625642E25642053573A25642E25B5 |
:100440006425632056340053657474696E673A25D9 |
:1004500064202573004D69786572204572726F7251 |
:1004600021004861726477617265204572726F7213 |
:1004700020313A2564202121004D697373696E672C |
:1004800020424C2D4374726C3A25642121002120B6 |
:100490004E432D4552523A202532642021200049F6 |
:1004A0003243204552524F5221212100486569674D |
:1004B00068743A202025356900536574706F696E41 |
:1004C000743A2535690050726573737572653A2503 |
:1004D0003569004F66667365743A202025356900DA |
:1004E00048656967687420636F6E74726F6C00444E |
:1004F000495341424C4544006163742E206265615A |
:1005000072696E67004E69636B3A202020202020BC |
:1005100025356900526F6C6C3A2020202020202560 |
:10052000356900436F6D706173733A202020253563 |
:1005300069004B25693A25346920204B25693A2505 |
:10054000346920004E693A2534692020526F3A25DB |
:100550003469200047733A253469202047693A25D9 |
:100560003469200050313A253469202050323A2530 |
:100570003469200050333A253469202050343A251C |
:10058000346920004779726F202D2053656E736F98 |
:1005900072004E69636B25346920282533692E2546 |
:1005A000692900526F6C6C25346920282533692E27 |
:1005B0002569290047696572253469202825336932 |
:1005C00029004E69636B2025346920282533692E64 |
:1005D00025782900526F6C6C20253469202825333A |
:1005E000692E257829005961772020253469202833 |
:1005F00025336929004E69636B202534692028253D |
:10060000336929282533692900526F6C6C20253401 |
:1006100069202825336929282533692900596177FC |
:100620002020253469202825336929282533692984 |
:1006300000414343202D2053656E736F72004E6955 |
:10064000636B2025346920282533692900526F6C9B |
:100650006C20253469202825336929005A20202060 |
:100660002025346920282533692900566F6C746170 |
:1006700067653A2020202533692E253169560043CD |
:10068000757272656E743A2020202533692E2531EB |
:10069000694100506F7765723A2020202020253470 |
:1006A0006957004469736368617267653A2025354C |
:1006B000696D4168005265636569766572005243F1 |
:1006C0002D5175616C6974793A2025346900524363 |
:1006D0002D4368616E6E656C733A25346900436F13 |
:1006E0006D70617373004D61676E65743A202020F0 |
:1006F000253569004779726F3A2020202020253562 |
:100700006900536574706F696E743A20253569000D |
:10071000506F746925693A202025336900506F7441 |
:100720006925693A202025336900536572766F2068 |
:100730002000536574706F696E7420202533690042 |
:10074000506F736974696F6E3A2025336900526186 |
:100750006E67653A2533692D25336900424C2D4378 |
:1007600074726C204572726F72732000253364209E |
:1007700025336420253364202533642000424C2037 |
:1007800054656D70657261747572650025336420FF |
:1007900025336420253364202533642000424C2D0A |
:1007A0004374726C20666F756E6420002025632090 |
:1007B0002020256320202025632020202563200081 |
:1007C0002025632020202563202020256320202051 |
:1007D000256320002025632020202D2020202D208F |
:1007E00020202D2000313000313100313200466CA4 |
:1007F000696768742D54696D65202000546F7461B9 |
:100800006C3A2535756D696E004163743A20202578 |
:1008100035756D696E0028726573657429000A0D5F |
:1008200047656E65726174696E672064656661759F |
:100830006C7420506172616D6574657220536574CB |
:10084000202564000A0D5573696E6720506172613E |
:100850006D6574657220536574202564000A0D4728 |
:10086000656E65726174696E672064656661756C3A |
:1008700074204D69786572205461626C65000A0DC0 |
:100880004D697865722D436F6E6669673A2027253A |
:10089000732720282575204D6F746F727329000A05 |
:1008A0000D414343206E6F742063616C6962726115 |
:1008B000746564210D0A0000008F001E01AD013B2C |
:1008C00002CA025803E603740402058F051B06A73B |
:1008D000063307BE074808D2085B09E3096B0AF232 |
:1008E0000A780BFD0B810C040D860D070E870E0692 |
:1008F0000F840F00107B10F5106E11E5115B12CF05 |
:10090000124213B31323149214FE146A15D3153B29 |
:1009100016A11605176717C81727188318DE18378A |
:10092000198E19E319361A871AD61A231B6E1BB6AD |
:100930001BFD1B411C831CC31C001D3C1D751DABF6 |
:100940001DE01D121E421E6F1E9A1EC31EE91E0DC3 |
:100950001F2E1F4D1F691F841F9B1FB01FC31FD356 |
:100960001FE11FEC1FF51FFB1FFF1F0020040100EC |
:1009700000A36D00020101926E01030202266F02C4 |
:10098000040303CE6F03000404836F2532692E2510 |
:1009900031695600253364256320253033646D2585 |
:1009A0006300537461747573004552524F523A207C |
:1009B0002532642000253469202532693A253032F9 |
:1009C00069002534696D2563002533692025336965 |
:1009D00020253369202533690025336920253369B3 |
:1009E00020253369202533690054656D7065726177 |
:1009F0007475726573202020200025634320202019 |
:100A00002020002532692E25316956202533692E94 |
:100A1000253169410025346957202536696D4168C3 |
:100A2000004D61676E65743A2533692525202533AD |
:100A300069256300496E636C692E3A253369256325 |
:100A4000202825692920002532756D2F73205361D8 |
:100A5000743A2564200020203344004E6F4678000D |
:100A60004447505300486F6D653A2533646D202527 |
:100A700033642563202563004E6F204E6176694301 |
:100A800074726C21000A0D7777772E4D696B726F47 |
:100A90004B6F707465722E64652028632920486945 |
:100AA00053797374656D7320476D6248000A0D7445 |
:100AB000686520757365206F66207468697320739C |
:100AC0006F667477617265206973206F6E6C792030 |
:100AD0007065726D6974746564200A0D6F6E206FA5 |
:100AE000726967696E616C204D696B726F4B6F70D4 |
:100AF0007465722D48617264776172650055736523 |
:100B00007200486F545420563400414354204453DB |
:100B10004C004A657469005370656B7472756D00A2 |
:100B200050504D000A0D52656365697665723A2032 |
:100B300000756E6B6E6F776E2E205573696E672031 |
:100B400050504D2E2E2E006E6F7420737570706F86 |
:100B5000727465642062792068617264776172657D |
:100B600021000A0D466C69676874436F6E74726F7A |
:100B70006C0A0D48617264776172653A25642E25AE |
:100B8000640A0D536F6674776172653A5625642E58 |
:100B90002564256320000A0D202D204C4942204E5B |
:100BA0004F5420434F4D50415449424C4520212140 |
:100BB0002121000011241FBECFEFD0E1DEBFCDBF49 |
:100BC00011E0A0E0B1E0E8EAF6EF02C005900D9276 |
:100BD000A83AB107D9F718E0A8EAB1E001C01D9220 |
:100BE000AA3FB107E1F76AEAE2E0F0E081E2809330 |
:100BF00057007491AE014F5F5F4F20EF37EFDA017E |
:100C00009FE0F9012F5F3F4F84918D93915097FFA3 |
:100C1000F8CF773911F40000FECFFA019EE0819100 |
:100C200068276095915097FFFACF8889681721F05F |
:100C3000773911F40000FECF0E94EC060C94537B30 |
:100C40000C94000080E091E09F938F938BE292E1FF |
:100C50009F938F93E0918303F091840309950F9004 |
:100C60000F900F900F90089580912806E82FFF278E |
:100C7000EE0FFF1FE35AF84F808191818D5E9F4FE9 |
:100C800014F010920301808191818A5B9F4FCCF414 |
:100C9000809103018823A9F481E08093030180916E |
:100CA000B7038F5F8093B703853038F088EE93E009 |
:100CB0009093DE018093DD01089566E970E00E9463 |
:100CC0003B3508951F93CF93DF93182F882389F026 |
:100CD00086E291E09F938F938BE292E19F938F93B3 |
:100CE000E0918303F091840309950F900F900F908A |
:100CF0000F9080914B06823308F044C084EF91E05E |
:100D00000E944716EC01112329F0CE010E945016D3 |
:100D10008823D9F3C2E0D0E026E530E080912001BD |
:100D2000909121018217930730F02196255D3F4F66 |
:100D3000C730D10598F380914B069927C89F900141 |
:100D4000C99F300DD89F300D11242093010111232C |
:100D5000D9F068EC70E08C2F0E943B35DF93CF9385 |
:100D60008EE291E09F938F938BE292E19F938F931A |
:100D7000E0918303F091840309958DB79EB70696A1 |
:100D80008DBF02C080930101112311F180910101F7 |
:100D90006AE00E94A67A892F99279F938F9380916A |
:100DA00001010E94A67A99279F938F9389E391E08E |
:100DB0009F938F938BE292E19F938F93E0918303B4 |
:100DC000F091840309952DB73EB7285F3F4F2DBFA3 |
:100DD000DF91CF911F910895CFEFD0E1DEBFCDBF5E |
:100DE00088249924C1E07C2E14B815B88AE08AB909 |
:100DF0008FE58BB9B7EEEB2EB3E0FB2E2EEC3FEF79 |
:100E0000E20EF31EF7FEFACF189B06C0199B02C034 |
:100E10008DE005C08BE003C0199B04C084E1809382 |
:100E2000020107C08AE0809302018EE38AB987E459 |
:100E30008BB981E887B93E9A8FEF88B98BE184B985 |
:100E400081E085B9469A84B7877F84BF809160002E |
:100E50008861809360001092600084EC99E0909328 |
:100E6000DE018093DD0110928502109284021092BF |
:100E70006207109261071092870210928602109208 |
:100E800089021092880220910201243128F084EC1A |
:100E900094E0A0E0B0E004C08BE095E0A0E0B0E01A |
:100EA00080933C0190933D01A0933E01B0933F019C |
:100EB0002A3011F0243110F0289801C0289A2C30E3 |
:100EC00010F0273111F4299A01C029980E94B01618 |
:100ED0000E9481160E9433120E94DC320E94B21AD4 |
:100EE00081E00E943F2E0E9443650E94C67083E00D |
:100EF0000E94C076809102018C3010F0873111F48D |
:100F0000299A01C0299878940E94602D8091260228 |
:100F1000826080932602109229020E94A44084EFEE |
:100F200091E00E9447167C018091260280FD05C059 |
:100F3000C7010E9450168823B9F38DE491E09F9376 |
:100F40008F93ABE2AA2EA2E1BA2EBF92AF92E091AC |
:100F50008303F0918403099580EA9FE00E9447167D |
:100F60007C01C0E0D0E00F900F900F900F900FEF3A |
:100F700016E0F3EBCF2EF6E0DF2E0E94A440809126 |
:100F8000260280FD05C0C7010E9450168823B9F3D0 |
:100F9000F60180811816ACF40BC00E94A440809129 |
:100FA000260280FD05C0C7010E9450168823B9F3B0 |
:100FB000C7010E945016882321F4F80180818823FC |
:100FC00064F7F801808187FF19C02196DF93CF93E2 |
:100FD00021978FE591E09F938F93BF92AF92E0911D |
:100FE0008303F091840309958091A9018F5F809319 |
:100FF000A9012DB73EB72A5F3F4F2DBF219684E050 |
:1010000090E0C80ED91E085F1F4FCC30D10508F400 |
:10101000B4CFC0E0D0E00CEF16E0E3EBEE2EE6E05C |
:10102000FE2EF801838187FD1DC0F701808118160F |
:10103000CCF42196DF93CF93219782E691E09F93A2 |
:101040008F938BE292E19F938F93E0918303F091D2 |
:101050008403099582E08093DB012DB73EB72A5FB8 |
:101060003F4F2DBFF801838180788383219624E050 |
:1010700030E0E20EF31E085F1F4FCC30D10588F23E |
:101080000E942206909126068091A901981728F4C3 |
:1010900080919D03806180939D0380E891E09F9300 |
:1010A0008F93CBE2D2E1DF93CF93E0918303F09172 |
:1010B0008403099588EE93E00E9447167C010E9404 |
:1010C000B81A0F900F900F900F90C7010E94501602 |
:1010D0008823D9F380EA91E09F938F93DF93CF9396 |
:1010E000E0918303F0918403099580E00E941F360C |
:1010F000809102010F900F900F900F908A3011F0A5 |
:10110000843110F0289801C0289A80ED97E09093E0 |
:10111000DE018093DD0185E58093B9038EE090E0E8 |
:101120000E94842B9927182F00278FE090E00E94BF |
:10113000842B080F111D1093AF010093AE018AE0BC |
:1011400090E00E94842B9927182F00278BE090E0D5 |
:101150000E94842B080F111D1093AD010093AC0168 |
:101160000F5F1F4F39F08091AE019091AF018F5FFB |
:101170009F4F41F41092AF011092AE011092AD0159 |
:101180001092AC018091AC019091AD019F938F932F |
:101190008091AE019091AF019F938F9385EA91E08A |
:1011A0009F938F93DF93CF93E0918303F091840318 |
:1011B00009950E94412088E893E19093370180933C |
:1011C0003601C1E0C093B8038C2F0E946206809163 |
:1011D0004E060E9413760E94220680ED97E00E9440 |
:1011E00047167C018AEF90E00E94471683E08093C7 |
:1011F00080051092A801809197062DB73EB7285F11 |
:101200003F4F2DBF84FF02C0C093B00112BC11BC80 |
:101210008091B201882311F04798FECF8091E101BF |
:10122000882309F45AC280911201882309F455C217 |
:101230001092E1018091B703882319F00E943406CF |
:1012400002C00E941C440E94A440209102012A3046 |
:1012500011F0243110F0289801C0289A809178026A |
:10126000882331F0809178028150809378020EC0FB |
:1012700080916F00806280936F0010925E071092E1 |
:101280005D0780919D03886080939D038091360166 |
:1012900090913701019790933701809336018091A7 |
:1012A000360190913701892B21F080912702882304 |
:1012B000C9F18091360190913701892BD9F40E94B0 |
:1012C000692E85E090E090933701809336018091FC |
:1012D000BA059091BB0501969093BB058093BA0522 |
:1012E00080919D03816080939D0380918105826040 |
:1012F0008093810580910A0190910B018F5F9F4F30 |
:10130000C1F4809177028823A1F088EA91E6909356 |
:10131000DE018093DD0180E890E090930B018093E3 |
:101320000A0107C02A3011F0243110F0289801C0BA |
:10133000289A0E948D778091E101882309F0CBC122 |
:1013400080911001882311F00E9409170E947C12DD |
:101350000E94020EC7010E945016882309F4B7C1EB |
:1013600084E190E0E80EF91E0E94C71680912702E2 |
:10137000882349F080919D03826080939D03809132 |
:10138000810582600FC08091DD019091DE01892B83 |
:1013900059F48091360190913701079728F0809198 |
:1013A00081058D7F809381058091B001882361F054 |
:1013B00080917802873940F01092B00188E893E17B |
:1013C0009093DE018093DD0180910501882321F057 |
:1013D0008150809305012EC08093C30310924B026D |
:1013E00010924A021092490210924802109247024B |
:1013F00010924602809178028823E1F480910A01DC |
:1014000090910B018F5F9F4FA9F42091B001223082 |
:1014100089F088E99AE39093DE018093DD0180E012 |
:101420009CE090930B0180930A01222319F082E043 |
:101430008093B00180919B01893C70F08150809332 |
:101440009B0180919D038B7F80939D038091A003DE |
:1014500081608093A00351C0809163088823F9F0D4 |
:1014600080919D03846080939D0389E0809356035F |
:1014700080910A0190910B018F5F9F4F81F48091C1 |
:101480007702882361F088E99AE39093DE018093E4 |
:10149000DD0180E098EA90930B0180930A0110929D |
:1014A000480310924703109246031092450310928E |
:1014B0004403109256088FEF8093CB081092950842 |
:1014C0001092940810929708109296088FEF9FEF51 |
:1014D000909393088093920810926702109268028A |
:1014E0001092690210926A0210926B028091A0031E |
:1014F0008E7F8093A00310929B0180910101282F81 |
:101500003327809120019091210182179307CCF419 |
:1015100080913F02806280933F0280910A01909106 |
:101520000B018F5F9F4FC1F480E797E19093DE013D |
:101530008093DD0180E093E090930B0180930A019A |
:101540000BC08091DD019091DE01892B29F48091FF |
:101550003F028F7D80933F0283E08093DC0112BCC9 |
:1015600011BC8091B1018F5F8093B101813309F08B |
:1015700065C01092B10180913F0281FF0AC0809145 |
:10158000AA019091AB0101969093AB018093AA01BF |
:1015900004C05AEA852E55E0952E80914002909124 |
:1015A00041028050944008F049C02091C905309113 |
:1015B000CA054091CB055091CC05809118019091BE |
:1015C0001901A0911A01B0911B01281739074A0788 |
:1015D0005B0764F48091C9059091CA05A091CB0581 |
:1015E000B091CC050596A11DB11D20C02091C90563 |
:1015F0003091CA054091CB055091CC0580911801DE |
:1016000090911901A0911A01B0911B0182179307C3 |
:10161000A407B5079CF48091C9059091CA05A091D3 |
:10162000CB05B091CC050597A109B1098093C905F7 |
:101630009093CA05A093CB05B093CC050894811C68 |
:10164000911C82E788168BE0980609F040C0882438 |
:1016500099242091AE013091AF012F5F3F4F30931D |
:10166000AF012093AE018091AC019091AD01019644 |
:101670009093AD018093AC01832F9927682F8EE062 |
:1016800090E00E948C2B8091AE019091AF01907000 |
:10169000682F8FE090E00E948C2B8091AC0190919C |
:1016A000AD01892F9927682F8AE090E00E948C2B4A |
:1016B0008091AC019091AD019070682F8BE090E02B |
:1016C0000E948C2B84E190E00E9447167C010E94CE |
:1016D000476A0E94DD7071107A94772029F40E9485 |
:1016E000106A8CE0782E94CD8091DC01882309F07B |
:1016F0008FCD0E9464658CCD1F920F920FB60F9212 |
:1017000011248F939F93EF93FF9380910701882378 |
:10171000E1F48091CC019091CD0101969093CD019F |
:101720008093CC01FC01EC55FB4FE081ED3019F0CA |
:101730008C3D910539F41092CD011092CC0181E0DD |
:1017400080930701E093C60004C01092CD0110926F |
:10175000CC01FF91EF919F918F910F900FBE0F9051 |
:101760001F9018951F920F920FB60F9211242F936E |
:101770003F934F935F936F937F938F939F93AF9319 |
:10178000BF93CF93EF93FF9390E08091B2018130AC |
:1017900029F48091C6008093CE00CCC08091B20124 |
:1017A000823029F48091C6008093C603C3C0809123 |
:1017B000C6008093C4015091D2015C3D10F090931B |
:1017C000D3018091C4018D3009F065C08091D301AF |
:1017D000823009F060C09093D301852F99278A53F6 |
:1017E0009C4FFC01329740812091CE013091CF0176 |
:1017F000241B3109DC0111978C91281B3109C90187 |
:101800009F709093CF018093CE0146E09695879587 |
:101810004A95E1F7982F935C9093D0012F73307025 |
:10182000235C2093D1018081981729F48C9128178B |
:1018300011F491E006C090E08091C1018F5F809328 |
:10184000C101C091C301CC2309F074C0992309F4EC |
:1018500071C081E08093C301580F5093C001515073 |
:10186000E52FFF27EA53FC4F8DE080838091C8036A |
:10187000823509F05FC00E94412088E190E02CE0B1 |
:101880000FB6F894A895809360000FBE2093600077 |
:10189000C093DB014FC02091D301822F9927813063 |
:1018A0009105F9F0823091051CF4892B21F040C09C |
:1018B000029711F13DC08091C401833239F48091C7 |
:1018C000C301882319F481E08093D3018091C4017E |
:1018D0008093C60381E08093D2018091C40199274F |
:1018E00022C02F5F2093D301E52FFF27EA53FC4F3F |
:1018F0008091C401808309C0E52FFF27EA53FC4F84 |
:101900008091C40180835C3D20F45F5F5093D201DD |
:1019100002C01092D3012091C4018091CE01909118 |
:10192000CF01820F911D9093CF018093CE0102C011 |
:101930001092D301FF91EF91CF91BF91AF919F9101 |
:101940008F917F916F915F914F913F912F910F9068 |
:101950000FBE0F901F901895AC01A0E0B0E09D0164 |
:10196000A817B90748F4E4EAF4E08191280F311D83 |
:101970001196A417B507C8F33F70FD01EC55FB4F56 |
:10198000C90156E0969587955A95E1F7835C808367 |
:101990001196FD01EC55FB4F2F733070822F835C45 |
:1019A0008083AB55BB4F8DE08C93109207018091E3 |
:1019B000A4048093C6000895A0E0B0E0E2EEFCE04D |
:1019C0000C941F7B2C859D850E85BB2483E2809320 |
:1019D000A4049F599093A5042093A60433E0E32E1A |
:1019E000F12C002309F49EC0CF84D888BE016D5E1F |
:1019F0007F4FA989BA890150109709F493C01097B5 |
:101A0000B9F0F601EB0DF11DB3949081119791F4AB |
:101A1000002349F1FB016E5F7F4FDB01C080D18065 |
:101A20006E5F7F4F0D90BC91A02DBB24015002C072 |
:101A300090E019C01097B9F0F601EB0DF11DB394C9 |
:101A40004081119791F4002341F1FB016E5F7F4FBC |
:101A5000DB01C080D1806E5F7F4F0D90BC91A02DC7 |
:101A6000BB24015002C040E018C01097B1F0F6014D |
:101A7000EB0DF11DB3941081119781F4002371F0E7 |
:101A8000FB013296DB01CD90DC90BF016E5F7F4F92 |
:101A9000A081B181BB24015001C010E0F701EC55D9 |
:101AA000FB4F892F86958695835C80830894E11C83 |
:101AB000F11CF701EC55FB4F892F9927837090702B |
:101AC00024E0880F991F2A95E1F755279A0194E0A1 |
:101AD000369527959A95E1F7822B835C808308944D |
:101AE000E11CF11CF701EC55FB4F4F705070440F97 |
:101AF000551F440F551F812F992726E096958795EE |
:101B00002A95E1F7842B835C80830894E11CF11C07 |
:101B1000F701EC55FB4F1F73135C10830894E11C15 |
:101B2000F11C6ACFC7010E94AC0CE9E00C943B7B2E |
:101B3000A3E07A2F4091C0014650442309F458C0D5 |
:101B4000E72FFF27EA53FC4F80818D537F5FE72FFC |
:101B5000FF27EA53FC4F20812D537F5FE72FFF279C |
:101B6000EA53FC4F30813D537F5FE72FFF27EA5355 |
:101B7000FC4F60816D537F5F9927880F991F880FF5 |
:101B8000991F522F52955F70582B822F99278F7073 |
:101B90009070F4E0880F991FFA95E1F7232F2695AE |
:101BA0002695282B832F992783709070E6E0880F65 |
:101BB000991FEA95E1F7682B41504F3FC9F0EA2F92 |
:101BC000FF27EA53FC4F5083AF5F41504F3F81F0F6 |
:101BD000EA2FFF27EA53FC4F2083AF5F41504F3F6E |
:101BE00039F0EA2FFF27EA53FC4F6083AF5FA5CFA0 |
:101BF00089EC93E09093BF018093BE01A350A09322 |
:101C0000BD010895A2E0B0E0E8E0FEE00C94257B81 |
:101C10008091C301882309F41AC40E94980D809111 |
:101C2000C703823609F0E6C28091C803992780373E |
:101C3000910509F4ABC081379105C4F48A3691054A |
:101C400009F443C28B36910544F48B34910571F14C |
:101C50008636910509F470C1CDC28D36910509F41F |
:101C600069C08E36910509F44DC0C4C28437910510 |
:101C700041F1853791054CF48137910509F48DC008 |
:101C80008337910509F4E0C0B5C28737910509F49F |
:101C9000DEC1883791052CF48537910509F49AC186 |
:101CA000A9C28937910509F47FC1A4C2E091BE01A0 |
:101CB000F091BF018081918190938B0180938A0183 |
:101CC00099C28091C001A091BE01B091BF01853140 |
:101CD00040F080E1E1EAF3E00D9001928A95E1F7AE |
:101CE0000DC08D919D910D90BC91A02D8093A1036D |
:101CF0009093A203A093A303B093A40380EF8093D7 |
:101D0000BB0147C0809107018823E1F38DE490E097 |
:101D10009F938F9386EA96E09F938F9381E08F93B2 |
:101D20008F938EE48F930E94DC0C8DB79EB707963D |
:101D30008DBF60C2A091BE01B091BF011C91113056 |
:101D400081F48DE4E6EAF6E00D9001928A95E1F7E0 |
:101D50000E949B2C198380919D038F7E80939D030D |
:101D600001C01982809107018823E1F381E090E0AE |
:101D70009F938F93CE0101969F938F9381E08F93D2 |
:101D80008F938DE48F930E94DC0C09C181E08093D6 |
:101D9000C6018FEF809305012DC2809177028823C1 |
:101DA00009F028C2E091BE01F091BF01E0818E2FC1 |
:101DB0008A508A3058F48983882311F481E003C063 |
:101DC000863010F085E0898361E00EC08E2F84514B |
:101DD0008A3070F48983882311F481E003C086304F |
:101DE00010F085E0898360E089810E941D2D12C07A |
:101DF000E983EF3F19F40E94FE2C898389818823AF |
:101E000011F481E003C0863010F085E08983898178 |
:101E10000E94A22B809107018823E1F38EE790E0D6 |
:101E20009F938F9387E296E09F938F9381E090E05A |
:101E30009F938F93CE0101969F938F9382E08F9310 |
:101E400081E08F9381E539C12091BE013091BF01BE |
:101E5000D9018C918150853008F045C0F90181810C |
:101E60008F3509F040C0809177028823E1F52F5F1C |
:101E70003F4F8EE7E7E2F6E0D9010D9001928A9597 |
:101E8000E1F7F90182910E940D2C80916806992753 |
:101E9000AA27BB27BC01CD0124EC39E040E050E08B |
:101EA0000E94877ADC01CB018093820190938301A9 |
:101EB000A0938401B0938501809169069927AA2790 |
:101EC000BB27BC01CD010E94877ADC01CB01809346 |
:101ED0007E0190937F01A0938001B09381010E94C5 |
:101EE000FE2C898301C01982809107018823E1F3C8 |
:101EF00081E090E09F938F93CE0101969F938F9303 |
:101F000081E08F938F9383E58F930E94DC0C8DB7D4 |
:101F10009EB707968DBF80917702882329F46EE6DD |
:101F200070E089810E943B3580E00E9462068091CA |
:101F30004E060E9413765EC180917702882309F0D5 |
:101F400059C1E091BE01F091BF01E0818E2F815017 |
:101F5000853018F48E2F0E94A22B0E94FE2C8983BC |
:101F6000809107018823E1F381E090E09F938F93B4 |
:101F7000CE0101969F938F9381E08F938F9386E498 |
:101F80008F930E94DC0C6EE670E089810E943B35E5 |
:101F900080E00E94620680914E060E941376ADB7E3 |
:101FA000BEB71796ADBF26C119822981A091BE0187 |
:101FB000B091BF01EDE5F7E08D91992787FD9095F0 |
:101FC00093A382A3822F8F5F8983282F32968C3030 |
:101FD00098F310C1E091BE01F091BF0180810E9491 |
:101FE00035328A83882319F481E0898301C01982FC |
:101FF000809107018823E1F388E090E09F938F931D |
:1020000084EF96E09F938F9321E030E03F932F93EE |
:102010008091BE019091BF019F938F933F932F9327 |
:10202000CE0102969F938F933F932F93CE01820F01 |
:10203000931F9F938F9384E08F9381E08F9385E527 |
:102040008F930E94DC0CEDB7FEB773963CC0809175 |
:10205000BD01893008F4CEC02091BE013091BF018E |
:102060002F5F3F4F88E0A4EFB6E0F90101900D9299 |
:102070008A95E1F7D9018E910E948B318A8388235A |
:1020800019F481E0898301C01982809107018823B6 |
:10209000E1F321E030E03F932F93CE0102969F932E |
:1020A0008F933F932F93CE01820F931F9F938F9314 |
:1020B00082E08F9381E08F9387E58F930E94DC0C01 |
:1020C000EDB7FEB73B96EDBF95C0809177028823B0 |
:1020D00009F090C00E94CA758983823019F084305B |
:1020E00009F088C020E430E0F8948091C1008F733B |
:1020F0008093C1008091C9008F738093C900809143 |
:10210000C100877E8093C1008091C900877E809343 |
:10211000C9008091C80087FF03C08091CE00F9CF2D |
:102120008091C00087FF03C08091C600F9CFE09185 |
:10213000BE01F091BF01E081E13021F482E08093A3 |
:10214000B2012EC0E43611F421E830E081E0809342 |
:10215000B201832F99278093CD002093CC008091EA |
:10216000CD008093C5008091CC008093C400809105 |
:10217000CA008F7D8093CA008091CA008F7E8093B1 |
:10218000CA008091C9008B7F8093C9008091CA00EA |
:1021900084608093CA008091CA0082608093CA00E4 |
:1021A0008091CA00877F8093CA008091C200877F98 |
:1021B0008093C2008091C9008E7F8093C900809176 |
:1021C000C10088618093C1008091C90088618093BB |
:1021D000C9008091C10080688093C1008091C900CE |
:1021E00080688093C90010926E0010926F00109268 |
:1021F000700078948091C80399278436910509F47A |
:10220000BBC085369105ACF48136910509F46FC0E9 |
:10221000823691052CF48B34910509F45DC00FC111 |
:102220008236910509F470C08336910509F47FC0A8 |
:1022300006C18C36910509F4EDC08D3691054CF43C |
:102240008736910509F4F8C08836910509F4B2C0C3 |
:10225000F6C08437910529F08637910509F4E8C066 |
:10226000EEC08091C001A091BE01B091BF0180314C |
:1022700040F080E1E1EAF3E00D9001928A95E1F708 |
:102280000DC08D919D910D90BC91A02D8093A103C7 |
:102290009093A203A093A303B093A403809107019A |
:1022A0008823E1F31F92809104018F9384E58F933B |
:1022B0000E94DC0C8AEF8093BB018FEF80930501B5 |
:1022C00080EA9FE00E9447169093B4018093B30187 |
:1022D0000F900F900F90B3C0E091BE01F091BF013D |
:1022E0008081918190938B0180938A01A8C0E091B5 |
:1022F000BE01F091BF01808180930601803298F089 |
:102300008FE1809306010FC0A091BE01B091BF0183 |
:102310008BE0E9EBF3E00D9001928A95E1F7809173 |
:10232000C2038093C2058FEF8093050188C080911E |
:10233000B7019091B801892B89F4E091BE01F09129 |
:10234000BF01E081EE2351F08AE0E89FC001112433 |
:102350000E9447169093940380939303E091BE01EB |
:10236000F091BF0190818AE0989FC0011124909361 |
:10237000B8018093B70115C08FEF80930501E091FC |
:10238000BE01F091BF0190818AE0989FC0011124A5 |
:102390009093BA018093B901892B19F081E0809361 |
:1023A000C80180EA9FE00E9447169093B401809391 |
:1023B000B30145C08FEF80930501E091BE01F0911C |
:1023C000BF01908197FD08C082E08093C501109203 |
:1023D000B6011092B5011AC0909580911F02892B09 |
:1023E00080931F0291818AE0989FC00111249093ED |
:1023F000B6018093B50184E08093C50180EA9FE037 |
:102400000E9447169093B4018093B30181E08093BA |
:10241000C90115C08FEF80930501E091BE01F091D5 |
:10242000BF0180818093200281E08093CA0107C0B0 |
:1024300081E08093C70103C081E08093CB011092BB |
:10244000C3011092BF011092BE011092BD01E3E0E2 |
:10245000CE5F0C94417B982F8091C00085FFFCCF0C |
:102460009093C60008950F931F9388E18093C10055 |
:102470008091C00082608093C0008091C10080681C |
:102480008093C1008091C10080648093C10000E00E |
:1024900010E00093C5008AE290E08093C400809130 |
:1024A000B9019091BA010E944716909396038093C8 |
:1024B00095038CED90E00E9447169093C50380939E |
:1024C000C403109297038BE5809398038BE080936D |
:1024D0009B038093990310929A0310929F0380911B |
:1024E000020180939E031093BF010093BE011092DE |
:1024F000BD011F910F910895A0E1B0E0E2E8F2E183 |
:102500000C94227B80910701882309F4C9C2809131 |
:10251000B3019091B4010E945016882361F010928B |
:10252000B6011092B5011092BA011092B901109241 |
:10253000B8011092B7018091B5019091B601892B35 |
:1025400041F08091A2049091A3040E945016882328 |
:1025500029F48091C901882309F460C080910701A2 |
:10256000882309F45BC08091C50106ED15E0843035 |
:10257000A8F00E94572080E590E09F938F931F93CF |
:102580000F9381E08F938F9388E48F930E94DC0CEC |
:102590002DB73EB7295F3F4F2DBF34C010922102A7 |
:1025A00087EC93E09F938F938AE490E29F938F93BD |
:1025B000E0918303F0918403099584E190E09F9377 |
:1025C0008F931F930F9381E090E09F938F9385ECFF |
:1025D00091E09F938F9382E08F9381E08F9388E4C3 |
:1025E0008F930E94DC0C8091C501982F8F5F8093A0 |
:1025F000C5012DB73EB7215F3F4F2DBF943010F07E |
:102600001092C5018091B5019091B6010E944716C4 |
:102610009093A3048093A2041092C9018091CA01EF |
:10262000882351F180910701882331F10E945720BE |
:1026300080E590E09F938F9386ED95E09F938F9335 |
:1026400021E030E03F932F9382E291E09F938F93BC |
:102650003F932F9380E292E09F938F9383E08F9339 |
:1026600081E08F938CE48F930E94DC0C1092CA015E |
:102670008DB79EB70F968DBF8091C7018823D1F08B |
:10268000809107018823B1F08AE090E09F938F93B7 |
:1026900087E993E09F938F9381E08F938F9386E5F3 |
:1026A0008F930E94DC0C1092C7012DB73EB7295FB3 |
:1026B0003F4F2DBF8091CB018823D9F08091070136 |
:1026C0008823B9F08BE090E09F938F9389EB93E0A0 |
:1026D0009F938F9381E08F93809104018F9387E480 |
:1026E0008F930E94DC0C1092CB018DB79EB707969A |
:1026F0008DBF8091B9019091BA01892B41F08091F1 |
:102700009503909196030E945016882321F480919E |
:10271000C801882341F180910701882321F10E949B |
:102720001D3482E490E09F938F9380E895E09F931F |
:102730008F9381E08F938F9384E48F930E94DC0CBE |
:102740001092C8012DB73EB7295F3F4F2DBF809132 |
:10275000B9019091BA01009731F00E944716909309 |
:102760009603809395038091B7019091B801892BCE |
:1027700009F4B7C080919303909194030E9450167E |
:10278000882309F4AEC080910701882309F4A9C009 |
:10279000809143069927880F991F880F991F7C0104 |
:1027A0000027F7FC0095102F8091D2029091D30260 |
:1027B000A091D402B091D502BC01CD01A80197012E |
:1027C0000E94FB7A30938603209385038091CA028E |
:1027D0009091CB02A091CC02B091CD02BC01CD0171 |
:1027E000A80197010E94FB7A309388032093870306 |
:1027F00020914B0830914C0840914D0850914E0863 |
:10280000DA01C90163E0880F991FAA1FBB1F6A95EF |
:10281000D1F7820F931FA41FB51F820F931FA41F10 |
:10282000B51F20913C0130913D0140913E015091F6 |
:102830003F01BC01CD010E94FB7A30938A032093B3 |
:10284000890380919A0290919B02A0919C02B09181 |
:102850009D0259E0B595A795979587955A95D1F71B |
:1028600080938B038091960290919702A091980299 |
:10287000B091990249E0B595A795979587954A95A6 |
:10288000D1F780938C038091A2029091A302A09132 |
:10289000A402B091A50239E0B595A79597958795C3 |
:1028A0003A95D1F780938D038EE090E09F938F93BC |
:1028B00085E893E09F938F9381E08F938F9383E4D8 |
:1028C0008F930E94DC0C8091B7019091B8010E9417 |
:1028D000471690939403809393038DB79EB7079602 |
:1028E0008DBF809106018F3F79F1992724E0880FF1 |
:1028F000991F2A95E1F789539E4F40E150E0BC01B2 |
:10290000CE0101960E94DA7880E190E09F938F9348 |
:10291000CE0101969F938F9381E090E09F938F93D8 |
:1029200086E091E09F938F9382E08F9381E08F9375 |
:1029300081E48F930E94DC0C8FEF809306012DB70A |
:102940003EB7255F3F4F2DBF8091C2058823C9F058 |
:10295000809107018823A9F081E090E09F938F93F5 |
:1029600082EC95E09F938F9381E08F938F9382E425 |
:102970008F930E94DC0C1092C2058DB79EB707960C |
:102980008DBF8091C6018823D1F0809107018823F3 |
:10299000B1F086E490E09F938F938DE597E09F934D |
:1029A0008F9381E08F938F9380E58F930E94DC0C4F |
:1029B0001092C6012DB73EB7295F3F4F2DBF8091C2 |
:1029C000C4039091C5030E945016882309F468C07F |
:1029D00080910701882309F463C0809143069927F9 |
:1029E000880F991F880F991F7C010027F7FC00951D |
:1029F000102F8091D2029091D302A091D402B09175 |
:102A0000D502BC01CD01A80197010E94FB7A309349 |
:102A1000B2032093B1038091CA029091CB02A0919E |
:102A2000CC02B091CD02BC01CD01A80197010E945A |
:102A3000FB7A3093B4032093B303809154028093C4 |
:102A4000B503809153028093B60388E090E09F9392 |
:102A50008F9381EB93E09F938F9381E08F9383E03B |
:102A60008F938BE68F930E94DC0C8091B7032DB778 |
:102A70003EB7295F3F4F2DBF853018F086E0809329 |
:102A8000B70380919B01882319F483E690E002C08C |
:102A900087EE93E00E9447169093C5038093C4038A |
:102AA000E6E0C05F0C943E7B1F920F920FB60F9230 |
:102AB00011242F933F935F936F937F938F939F93F3 |
:102AC000AF93BF93EF93FF9320E08091DC018823C5 |
:102AD00029F08091DC0181508093DC0180916803B2 |
:102AE000882319F08150809368038091E40181501C |
:102AF0008093E4018F3F09F05BC089E08093E4019B |
:102B00008091E2019091E30101969093E30180931B |
:102B1000E201809111018F5F817080931101882300 |
:102B200019F481E08093E101349903C081E080933E |
:102B3000DA018091DD019091DE01892B21F18091F4 |
:102B4000DD019091DE010B9750F08091DD019091B5 |
:102B5000DE010A979093DE018093DD0104C010929C |
:102B6000DE011092DD018091DD019091DE01209166 |
:102B70000A0130910B0182239323892B11F021E06C |
:102B800008C020E006C08FEF9FEF90930B01809369 |
:102B90000A0180910201222331F08A3011F45A9AFD |
:102BA00007C0479A05C08A3011F45A9801C0479867 |
:102BB0008091DA01882309F45AC020919B012223D5 |
:102BC00009F055C080913B0883FF51C086B1992719 |
:102BD000FC01E071F07084FF13C08091DF019091DF |
:102BE000E00101969093E0018093DF018091DF0185 |
:102BF0009091E001895E9340D0F12093DA0137C0D3 |
:102C00008091DF019091E001892B69F18091DF01D2 |
:102C10009091E0018A56914030F58091DF019091CA |
:102C2000E00169E270E00E94B27A8091DF01909148 |
:102C3000E001860F971F9093E0018093DF01809160 |
:102C4000DF019091E0010B9750F08091DF019091AE |
:102C5000E0010A9790938B0180938A0104C0F0935E |
:102C60008B01E0938A011092E0011092DF01FF9145 |
:102C7000EF91BF91AF919F918F917F916F915F91F4 |
:102C80003F912F910F900FBE0F901F90189520919C |
:102C9000E2013091E301280F391FC901019608951F |
:102CA0002091E2013091E301821B930B892F992738 |
:102CB0008695807490700895CF93DF930E94471695 |
:102CC000EC01CE010E9450168823D9F3DF91CF91F9 |
:102CD0000895CF93DF930E944716EC0109C08091BD |
:102CE0001201882329F0909312018FEC80937A00CF |
:102CF000CE010E945016982F882389F3DF91CF913F |
:102D000008959FB7F8945F983E9A469A8091B000D4 |
:102D10008F708093B0008091B00083608093B0008A |
:102D20008091B1008B738093B1008091B1008B6072 |
:102D30008093B1001092B2008FEF8093B300809126 |
:102D4000B00080688093B000809170008A7F80938B |
:102D50007000809170008260809370009FBF089522 |
:102D60008AE090E00E9447169093C4058093C305C3 |
:102D700082E085BD83EA84BD17BC84EB88BD86E014 |
:102D800086BD80916E00816080936E000895809171 |
:102D900096062091690182FF30C0909157068CE31E |
:102DA000989FB00111249091560680E5989FA0014C |
:102DB0001124922F905897FD9D5F9595959586E0EB |
:102DC0009802C00111242091080130910901281BAB |
:102DD000390B3093090120930801421753072CF057 |
:102DE000509309014093080108952617370784F08E |
:102DF00070930901609308010895822F992736E0A6 |
:102E0000880F991F3A95E1F7909309018093080183 |
:102E10000895A0E0B0E0EFE0F7E10C94217B809111 |
:102E20005E06E82FFF27EE5BFE4F9681D0808091F3 |
:102E30001001A92FBB27A7FDB095CB2FDB2F813029 |
:102E400009F017C12091D2023091D3024091D402EF |
:102E50005091D502BD01CE010E94877A97FF04C030 |
:102E600061587F4F8F4F9F4F7B018C01C7E01595B5 |
:102E70000795F794E794CA95D1F78D2D992787FD8B |
:102E80009095A92FB92F2091CA023091CB02409181 |
:102E9000CC025091CD02BC01CD010E94877A97FFF0 |
:102EA00004C061587F4F8F4F9F4FB7E0959587952E |
:102EB00077956795BA95D1F7F801E701C61BD70B4F |
:102EC000E80BF90B20914F0330915003C901A3E0A7 |
:102ED000880F991FAA95E1F7821B930BAA2797FDEC |
:102EE000A095BA2FC81BD90BEA0BFB0B8091670189 |
:102EF0009927AA27BB27BC01CD019E01AF010E94E3 |
:102F0000877A97FF04C061507E4F8F4F9F4FFC011F |
:102F1000EB0179E0F595E795D795C7957A95D1F7C7 |
:102F200010919606609108017091090112FF05C089 |
:102F300070930F0160930E0118C040910E015091E3 |
:102F40000F0180915D06282F3327CB01841B950B41 |
:102F5000B9010E94C67A80910E0190910F01860FEF |
:102F6000971F90930F0180930E0110FF14C0809162 |
:102F70000E0190910F0197FD0F9664E0959587954E |
:102F80006A95E1F7AA2797FDA095BA2FC80FD91F18 |
:102F9000EA1FFB1F15C080910E0190910F0197FD54 |
:102FA0000F9654E0959587955A95E1F7AA2797FDD6 |
:102FB000A095BA2F8C1B9D0BAE0BBF0BFD01EC0136 |
:102FC00020919106222321F133278091D6019091FF |
:102FD000D701829FA001839F500D929F500D112415 |
:102FE000CA01AA2797FDA095BA2F8C0F9D1FAE1F6F |
:102FF000BF1F2F5F3F4F442737FD4095542FBC0123 |
:10300000CD010E94FB7A3093D7012093D60104C0F2 |
:10301000D093D701C093D60180915606282F33272D |
:10302000220F331F220F331F8091D6019091D701B9 |
:10303000821793077CF080915706282F3327220FA1 |
:10304000331F220F331F8091D6019091D70128178B |
:10305000390724F43093D7012093D60180910201DF |
:10306000843108F4F7C0809110018F5F80931001C4 |
:10307000F3C02091CA023091CB024091CC02509112 |
:10308000CD02BD01CE010E94877A97FF04C061582E |
:103090007F4F8F4F9F4F7B018C0187E015950795E0 |
:1030A000F794E7948A95D1F78D2D992787FD909510 |
:1030B000A92FB92F2091D2023091D3024091D4028E |
:1030C0005091D502BC01CD010E94877A9B01AC01D1 |
:1030D00097FF04C021583F4F4F4F5F4FC7E05595B2 |
:1030E000479537952795CA95D1F72E0D3F1D401F5F |
:1030F000511F809166019927AA27BB27BC01CD01EA |
:103100000E94877A97FF04C061507E4F8F4F9F4F78 |
:10311000FC01EB01B9E0F595E795D795C795BA9510 |
:10312000D1F7809168019927A6E0880F991FAA9589 |
:10313000E1F740910C0150910D0120915D0633277C |
:10314000841B950BB9010E94C67A80910C01909165 |
:103150000D01860F971F90930D0180930C018091B4 |
:10316000960681FF14C080910C0190910D0197FD8E |
:103170000F9674E0959587957A95E1F7AA2797FDC4 |
:10318000A095BA2FC80FD91FEA1FFB1F15C0809149 |
:103190000C0190910D0197FD0F9664E09595879530 |
:1031A0006A95E1F7AA2797FDA095BA2F8C1B9D0B76 |
:1031B000AE0BBF0BFD01EC0120919206222321F101 |
:1031C00033278091D4019091D501829FA001839FE4 |
:1031D000500D929F500D1124CA01AA2797FDA0956A |
:1031E000BA2F8C0F9D1FAE1FBF1F2F5F3F4F44276D |
:1031F00037FD4095542FBC01CD010E94FB7A3093DE |
:10320000D5012093D40104C0D093D501C093D4013B |
:1032100080915A06282F3327220F331F220F331F86 |
:103220008091D4019091D501821793077CF0809111 |
:103230005B06282F3327220F331F220F331F809165 |
:10324000D4019091D5012817390724F43093D50182 |
:103250002093D40110921001E7E0CDB7DEB70C94B3 |
:103260003D7B1F920F920FB60F9211242F933F9325 |
:103270004F935F938F939F93EF93FF9380910201FE |
:103280009091E501843108F04CC0992309F029C1DF |
:103290008091B00086FF24C08091B0008F7B809326 |
:1032A000B0008091D6019091D70187559E4F9093A1 |
:1032B000D9018093D80125E08D3D920718F08CED5F |
:1032C00095E005C08757914030F487E791E09093EF |
:1032D000D9018093D8018091D8019091D901C2C0C1 |
:1032E0008091B00080648093B00080915C06282FAC |
:1032F00033278DED96E0289FA001299F500D389F20 |
:10330000500D1124CA012091E6013091E701821B82 |
:10331000930B9093D9018093D80181E080931001A1 |
:10332000DDC0992309F0DDC08091B00086FF9FC009 |
:103330008091B0008F7B8093B000E091E8012091F4 |
:103340005C06EE23D9F433278DED96E0289FA0018B |
:10335000299F500D389F500D1124CA012091E6017C |
:103360003091E701821B930B9093D9018093D80190 |
:103370001092E7011092E601469AB0C02E1738F479 |
:103380008AE090E09093D9018093D801A7C089EAA0 |
:1033900093E09093D9018093D8018E2F99278330A1 |
:1033A0009105D9F08430910534F48130910549F0CC |
:1033B000029761F020C08430910591F0059799F053 |
:1033C0001AC08091D6019091D70104C08091D40198 |
:1033D0009091D50187559E4F1DC08091160805C05C |
:1033E0008091EF0702C080911F089927880F991FCD |
:1033F000880F991FEFCFFF27EE0FFF1FE35AF84FFB |
:1034000020813181220F331F8091D8019091D90101 |
:10341000820F931F9093D9018093D8018091D80196 |
:103420009091D90155E08D3D950718F08CED95E010 |
:1034300005C08757914030F487E791E09093D90118 |
:103440008093D8012091D8013091D9012C5B304074 |
:103450003093D9012093D8018091E6019091E70142 |
:10346000820F931F9093E7018093E60137C080910C |
:10347000B00080648093B0008CEB90E09093D90111 |
:103480008093D8018091E6019091E70184549F4F89 |
:103490009093E7018093E6018091DB01882321F07E |
:1034A00080917802882321F48091DB01823011F42D |
:1034B000469801C0469A8091E8018F5F8093E801A9 |
:1034C000282F332780915C0699270196821793074E |
:1034D0002CF481E0809310011092E80181E0809348 |
:1034E000E5012091D8013091D90141E02F3734070F |
:1034F00030F08FEF8093B3002F5F30400FC02F3F2D |
:103500003105C9F0C0F0A9014F5F50404F37510558 |
:1035100050F480E88093B300205830403093D901B4 |
:103520002093D80112C08FEF8093B3005093D9013C |
:103530004093D8010AC08091D8018093B3001092C3 |
:10354000D9011092D8011092E501FF91EF919F915E |
:103550008F915F914F913F912F910F900FBE0F90E0 |
:103560001F90189510927C008FEC80937A0008953C |
:10357000CF93DF931092F10183E090E00E94842BBF |
:10358000C82FDD27C531D10508F02A97C7BD84E6CD |
:1035900090E00E9469168091160190911701805267 |
:1035A000934010F4C0E0D0E0CA3FD105F8F4C7BDA5 |
:1035B00082E390E00E9469168CED93E09F938F93D5 |
:1035C0008BE292E19F938F93E0918303F0918403C8 |
:1035D000099580911601909117010F900F900F900F |
:1035E0000F908052934010F02196DECFC093D30508 |
:1035F0006C2F83E090E00E948C2B8091340680FF3A |
:103600000AC08091D3058A508B3E28F080919C039C |
:10361000806480939C03C7BD8CE291E00E94691690 |
:10362000DF91CF910895EF92FF921F93CF9310E017 |
:1036300080ED97E00E9447167C01CCE8133019F426 |
:10364000CB3008F0C9E010E08091000290910102B7 |
:103650008C5F934024F48091150181500AC08091C1 |
:103660000002909101028750944034F0809115013E |
:103670008F5F8093150101C011E08091FE01909150 |
:10368000FF018C5F934024F48091140181500AC0A3 |
:103690008091FE019091FF018750944034F0809119 |
:1036A00014018F5F8093140101C01F5F8091FC01A2 |
:1036B0009091FD018C5F934024F48091130181501F |
:1036C0000AC08091FC019091FD0187509440C4F0A4 |
:1036D000809113018F5F8093130113C08EED93E0EF |
:1036E0009F938F938BE292E19F938F93E09183035B |
:1036F000F091840309950F900F900F900F905FC089 |
:103700001F5F82E180932C02809126028E7F80933E |
:10371000260285EA8093BC00809115018A3040F42E |
:1037200080919C03816080939C038AE080931501C3 |
:1037300080911501863F40F080919C0381608093C9 |
:103740009C0385EF80931501809114018A3040F429 |
:1037500080919C03826080939C038AE08093140193 |
:1037600080911401863F40F080919C038260809399 |
:103770009C0385EF80931401809113018A3040F4FB |
:1037800080919C03846080939C038AE08093130162 |
:1037900080911301863F40F080919C038460809368 |
:1037A0009C0385EF8093130180912C02882339F0CC |
:1037B000C7010E945016882309F090CFF5CF1092D0 |
:1037C00012018FEC80937A00809112018823E1F33B |
:1037D000CA3020F48AE090E00E946916C15009F0D6 |
:1037E0002DCF86E490E00E946916CF911F91FF9043 |
:1037F000EF9008951F920F920FB60F921124EF923F |
:10380000FF920F931F932F933F934F935F936F9369 |
:103810007F938F939F93AF93BF93EF93FF93809189 |
:103820000902282F3327442755278F5F80930902E9 |
:10383000F9012231310508F0FFC3E25CFF4F0C941F |
:103840004D7B809178009091790046C080917800FE |
:103850009091790054C18091780090917900909373 |
:103860000D0280930C027FC18091DC029091DD02F9 |
:103870002091780030917900821B930B9093C605BC |
:103880008093C5058091C5059091C6059093170258 |
:103890008093160286C180917800909179002091E2 |
:1038A000DE023091DF02821B930B9093D20580934E |
:1038B000D1058091D1059091D20590931902809302 |
:1038C0001802BCC3809110029091110220917800DF |
:1038D00030917900820F931F909311028093100210 |
:1038E00081E0ADC380910E0290910F02209178008B |
:1038F00030917900820F931F90930F0280930E02F4 |
:1039000084E09DC380912001909121019C01220FB0 |
:10391000331F280F391F809178009091790063E060 |
:1039200070E00E94B27A260F371F3695279536959C |
:103930002795309321012093200185E080C3809159 |
:103940007800909179009093C8058093C705809185 |
:10395000C7059091C8054091D8025091D902841BA7 |
:10396000950B2091D702332727FD3095821B930BAF |
:103970009093F7018093F60180913702882309F034 |
:103980006DC08091F6019091F70102977CF122E0E1 |
:103990004E3E52070CF062C020910A0230910B0299 |
:1039A0002B5F3F4F30930B0220930A02255030408B |
:1039B0008091400290914102845F914030F4215FF8 |
:1039C0003F4F30930B0220930A0280910A0290919C |
:1039D0000B02853691050CF441C04F5F5F4F509349 |
:1039E000D9024093D8028456904034C08091F601A9 |
:1039F0009091F7018F5F9F4F8CF562E04732560739 |
:103A00006CF120910A0230910B0225503040309326 |
:103A10000B0220930A022B5F3F4F8091400290914E |
:103A20004102845F914030F42F50304030930B02BC |
:103A300020930A0280910A0290910B022FEF8C3999 |
:103A4000920764F4415050405093D9024093D802F9 |
:103A50008C599F4F90930B0280930A028091F6013C |
:103A60009091F7019C01442737FD4095542F809198 |
:103A7000920290919302A0919402B0919502820FCC |
:103A8000931FA41FB51F8093920290939302A0935B |
:103A90009402B0939502209192023091930240914A |
:103AA00094025091950257FF04C021503C4F4F4F54 |
:103AB0005F4F6AE055954795379527956A95D1F7F9 |
:103AC0008091920290919302A0919402B0919502FC |
:103AD000821B930BA40BB50B8093920290939302DD |
:103AE000A0939402B09395022EC180910E02909102 |
:103AF0000F022091780030917900820F931F9093EC |
:103B00000F0280930E02109208029BC28091020164 |
:103B10008A3071F4809178009091790020910C02A4 |
:103B200030910D02820F931F01969695879517C0CD |
:103B300040910C0250910D02843158F02091780090 |
:103B400030917900240F351F8FEF97E0821B930B84 |
:103B500006C08091780090917900840F951F909312 |
:103B6000FD018093FC0186E06AC28091DC029091A5 |
:103B7000DD022091780030917900821B930B9093A5 |
:103B8000C6058093C5058091C5059091C605209115 |
:103B9000160230911702820F931F9093FB018093BE |
:103BA000FA0187E04CC280917800909179002091D1 |
:103BB000DE023091DF02821B930B9093D20580933B |
:103BC000D1058091D1059091D205209118023091B4 |
:103BD0001902820F931F9093F9018093F8012EC26E |
:103BE000209110023091110280917800909179001B |
:103BF000280F391F30931102209310028091020187 |
:103C00008A3019F4220F331F04C0220F331F220FF2 |
:103C1000331F309311022093100220911002309133 |
:103C20001102C90137FD079603E0959587950A951E |
:103C3000E1F790930102809300028091120290912B |
:103C40001302820F931F97FD019695958795909388 |
:103C50001302809312022091E8023091E902821B44 |
:103C6000930B90931F0180931E01209106023091C7 |
:103C7000070280911E0190911F01280F391F37FF05 |
:103C800002C02F5F3F4F3595279530930702209351 |
:103C9000060226CE20910E0230910F02809178000C |
:103CA00090917900280F391F30930F0220930E0254 |
:103CB000809102018A3019F4220F331F04C0220FB1 |
:103CC000331F220F331F30930F0220930E022091D7 |
:103CD0000E0230910F02C90137FD0796F3E095956A |
:103CE0008795FA95E1F79093FF018093FE0180910B |
:103CF000140290911502820F931F97FD01969595DE |
:103D0000879590931502809314022091E6023091DA |
:103D1000E702821B930B90931D0180931C0120915D |
:103D200004023091050280911C0190911D01280F21 |
:103D3000391F37FF02C02F5F3F4F359527953093CE |
:103D400005022093040283E07AC18091720290916F |
:103D50007302A0917402B09175028093E90190936F |
:103D6000EA01A093EB01B093EC011092090281E00B |
:103D7000809312018091ED019091EE010196909354 |
:103D8000EE018093ED0180917800909179009093FD |
:103D90001701809316018091160190911701AA27AF |
:103DA000BB2720911A0230911B0240911C025091B6 |
:103DB0001D02280F391F4A1F5B1F20931A023093E0 |
:103DC0001B0240931C0250931D0280911E028F5FC4 |
:103DD00080931E02803108F431C1809118019091C6 |
:103DE0001901A0911A01B0911B017C018D0163E0C2 |
:103DF000EE0CFF1C001F111F6A95D1F7E81AF90A93 |
:103E00000A0B1B0BE20EF31E041F151F8091F1011C |
:103E1000992787FD9095A92FB92FBC01CD0120EBE3 |
:103E200030E240E050E00E94877ADC01CB01E81AE2 |
:103E3000F90A0A0B1B0BD801C7010496A11DB11D7D |
:103E4000B7FF05C0D801C7010B96A11DB11D23E026 |
:103E5000B595A795979587952A95D1F780931801E1 |
:103E600090931901A0931A01B0931B01E090C9052A |
:103E7000F090CA050091CB051091CC0580911801F6 |
:103E800090911901A0911A01B0911B01E81AF90A49 |
:103E90000A0B1B0BE0927202F09273020093740201 |
:103EA000109375022091F2013091F3014091F401D9 |
:103EB0005091F50157FF04C0215F3F4F4F4F5F4FB7 |
:103EC00084E055954795379527958A95D1F7809148 |
:103ED000F2019091F301A091F401B091F501821BE0 |
:103EE000930BA40BB50B8093F2019093F301A09375 |
:103EF000F401B093F5018091F2019091F301A0914A |
:103F0000F401B091F5018E0D9F1DA01FB11F80938C |
:103F1000F2019093F301A093F401B093F501809125 |
:103F2000F2019091F301A091F401B091F501B7FF76 |
:103F300003C00F96A11DB11D14E0B595A7959795E7 |
:103F400087951A95D1F72091720230917302281B40 |
:103F5000390B64E0213036071CF020E034E006C065 |
:103F60008CEF2030380714F420E03CEF8091EF0113 |
:103F70009091F0018091EF019091F00197FF03C0C3 |
:103F8000909581959F4FA901F3E0440F551FFA9535 |
:103F9000E1F78D5B9240C4F08091EF019091F001C8 |
:103FA0009C01E4E0220F331FEA95E1F7281B390B4F |
:103FB000240F351F37FF02C0215F3F4F74E0359556 |
:103FC00027957A95E1F717C08091EF019091F00164 |
:103FD0009C0165E0220F331F6A95E1F7281B390B1E |
:103FE000240F351F37FF02C0215E3F4F45E0359556 |
:103FF00027954A95E1F73093F0012093EF018091E6 |
:104000001A0290911B02A0911C02B0911D02B7FFF1 |
:1040100003C00196A11DB11DB595A79597958795EC |
:1040200080931A0290931B02A0931C02B0931D026E |
:1040300088E080931E0202C01092090282E0809301 |
:1040400008028091080280937C00809109028823F5 |
:1040500019F08FEC80937A00FF91EF91BF91AF91AF |
:104060009F918F917F916F915F914F913F912F9190 |
:104070001F910F91FF90EF900F900FBE0F901F9028 |
:10408000189590E2E6EDF5E08FE49193815087FF7B |
:10409000FCCF089590912102903540F4E92FFF273D |
:1040A000EA52FA4F80839F5F909321020895AF9266 |
:1040B000BF92CF92DF92FF920F931F93CF93DF9324 |
:1040C00020911F0220FF0AC080912002882311F056 |
:1040D000815002C0809122018093200221FF0CC0F8 |
:1040E0009091200280912201981719F410922002D9 |
:1040F00003C09F5F90932002822F992780FF04C006 |
:1041000081FF02C0109220020E9441208091200273 |
:10411000282F33279AE4C92E90E2D92EC091830329 |
:10412000D09184038A3098F481E1809321023F93F7 |
:104130002F9385E194E09F938F93DF92CF92FE01BE |
:1041400009952DB73EB72A5F3F4F2DBF11C080E1C3 |
:10415000809321023F932F938AE194E09F938F9362 |
:10416000DF92CF92FE0109958DB79EB706968DBF5F |
:1041700020912002822F9927AA27BB27FC01419773 |
:1041800010F00C947929E05BFF4F0AE4C02E00E2A6 |
:10419000D02EC0918303D09184030C944D7B109258 |
:1041A00021028FE194E09F938F930AE410E2DF9263 |
:1041B000CF92FE01099584E1809321020F900F9028 |
:1041C0000F900F908CE690E09F938F938BE590E09B |
:1041D0009F938F931F921F92809102016AE00E9429 |
:1041E000A67A892F99279F938F93809102010E942D |
:1041F000A67A99279F938F938FE294E09F938F9352 |
:10420000DF92CF92E0918303F0918403099588E2D5 |
:1042100080932102EDB7FEB73E96EDBF87EA96E0A8 |
:104220009F938F938091000199279F938F9387E4A9 |
:1042300094E09F938F93DF92CF92E0918303F0916C |
:104240008403099580919D032DB73EB7285F3F4FAA |
:104250002DBF84FF06C08CE38093210285E594E0A6 |
:10426000CAC090919C03992351F08CE38093210262 |
:10427000892F99279F938F9382E694E033C1909181 |
:104280002702992371F08CE380932102892F9927CB |
:104290009F938F9389E794E09F938F931F930F933E |
:1042A00073C590915603992371F08CE3809321029A |
:1042B000892F99279F938F938EE894E09F938F93F4 |
:1042C0001F930F93D8C480913601909137010697C0 |
:1042D00010F00C9482298CE3809321028FE994E002 |
:1042E0009AC780913B081AE4C12E10E2D12EC091EA |
:1042F0008303D091840380FF6BC0109221028091D0 |
:10430000720290917302A0917402B0917502BC0187 |
:10431000CD0125E030E040E050E00E94FB7A3F9381 |
:104320002F938CEA94E09F938F93DF92CF92FE01BC |
:10433000099584E1809321028DB79EB706968DBFC3 |
:1043400080916E0290916F02A0917002B091710203 |
:10435000BC01CD0125E030E040E050E00E94FB7A56 |
:104360003F932F9389EB94E09F938F93DF92CF92AB |
:10437000E0918303F0918403099588E28093210200 |
:10438000EDB7FEB73696EDBF8091160190911701FB |
:104390009F938F9386EC94E09F938F93DF92CF92BD |
:1043A000E0918303F091840309958CE380932102CB |
:1043B0002DB73EB72A5F3F4F2DBF87B599279F93F3 |
:1043C0008F9383ED94E09F938F93DF92CF928EC073 |
:1043D0001092210280EE94E09F938F93DF92CF9210 |
:1043E000FE01099584E1809321020F900F900F90B8 |
:1043F0000F908FEE94E09F938F93DF92CF920FC731 |
:104400001092210288EF94E09F938F930AE410E2C8 |
:10441000DF92CF92FE01099584E1809321020F90F3 |
:104420000F900F900F908091D2029091D302A091A3 |
:10443000D402B091D502B7FF04C081509C4FAF4F5A |
:10444000BF4FCAE0B595A79597958795CA95D1F7BF |
:10445000BF93AF939F938F9385E095E09F938F9346 |
:104460001F930F93E0918303F0918403099588E2F1 |
:1044700080932102EDB7FEB73896EDBF8091CA0256 |
:104480009091CB02A091CC02B091CD02B7FF04C0B5 |
:1044900081509C4FAF4FBF4FFAE0B595A7959795C8 |
:1044A0008795FA95D1F7BF93AF939F938F9384E14C |
:1044B00095E09F938F931F930F93E0918303F09167 |
:1044C000840309958CE3809321022DB73EB7285FC2 |
:1044D0003F4F2DBF8091F7079091F8079F938F93DF |
:1044E00083E295E09F938F931F930F93E091830353 |
:1044F000F091840309958DB79EB706968DBF02C7CC |
:10450000E1E0FE2EC1E0D0E00FE517E09F2D96958B |
:1045100084E1989FC001112480932102F8018281D7 |
:1045200093819F938F932196DF93CF9321978081DF |
:1045300091819F938F93DF93CF9382E395E09F9335 |
:104540008F938AE490E29F938F93E0918303F0919D |
:10455000840309952DB73EB7245F3F4F2DBF32E04E |
:10456000F30E22960C5F1F4F88E08F1578F6CAC6AF |
:104570001092210280912906E82FFF27EE0FFF1FDE |
:10458000E35AF84F808191819F938F938091280601 |
:10459000E82FFF27EE0FFF1FE35AF84F808191812C |
:1045A0009F938F9384E495E09F938F93DF92CF92B4 |
:1045B000FE01099584E180932102EDB7FEB738969C |
:1045C000EDBF80912B06E82FFF27EE0FFF1FE35A68 |
:1045D000F84F808191819F938F9380912A06E82FD5 |
:1045E000FF27EE0FFF1FE35AF84F8081918181581A |
:1045F0009F4F9F938F9384E595E09F938F93DF92D6 |
:10460000CF92E0918303F0918403099588E280932F |
:1046100021022DB73EB7285F3F4F2DBF80912D0659 |
:10462000E82FFF27EE0FFF1FE35AF84F808191819B |
:1046300081589F4F9F938F9380912C06E82FFF27DF |
:10464000EE0FFF1FE35AF84F8081918181589F4FF1 |
:104650009F938F9384E695E09F938F93DF92CF9201 |
:10466000E0918303F091840309958CE38093210208 |
:104670008DB79EB708968DBF80912F06E82FFF2734 |
:10468000EE0FFF1FE35AF84F8081918181589F4FB1 |
:104690009F938F9380912E06E82FFF27EE0FFF1F29 |
:1046A000E35AF84F8081918181589F4F9F938F9358 |
:1046B00084E795E06BC21092210284E895E09F9315 |
:1046C0008F930AE410E2DF92CF92FE010995809168 |
:1046D00002010F900F900F900F908A3009F0A9C03F |
:1046E00084E1809321028091E8029091E9029C018B |
:1046F00097FF02C0295F3F4F287F821B930B9F9338 |
:104700008F938091E8029091E90297FD079673E0FC |
:10471000959587957A95E1F79F938F932091E8027D |
:104720003091E90237FF02C0295F3F4F63E03595C2 |
:1047300027956A95E1F78091000290910102821B12 |
:10474000930B9F938F9382E995E09F938F931F9391 |
:104750000F93E0918303F0918403099588E280939D |
:1047600021022DB73EB7265F3F4F2DBF8091E60255 |
:104770009091E7029C0197FF02C0295F3F4F287F7D |
:10478000821B930B9F938F938091E6029091E70297 |
:1047900097FD079653E0959587955A95E1F79F9376 |
:1047A0008F932091E6023091E70237FF02C0295F24 |
:1047B0003F4F43E0359527954A95E1F78091FE01FB |
:1047C0009091FF01821B930B9F938F9383EA95E057 |
:1047D0009F938F931F930F93E0918303F091840332 |
:1047E00009958CE3809321028DB79EB70A968DBF01 |
:1047F0008091E4029091E5029F938F938091E4026F |
:104800009091E5022091FC013091FD01821B930BF8 |
:104810009F938F9384EB95E09F938F931F930F93B8 |
:10482000E0918303F09184030995EDB7FEB73896C4 |
:10483000B3C28B3019F0843108F4A9C084E18093AD |
:1048400021028091E8029091E9029C0197FF02C049 |
:10485000215F3F4F207F821B930B97FD019695951B |
:1048600087959F938F938091E8029091E90297FD3D |
:104870000F9624E0959587952A95E1F79F938F935E |
:104880002091E8023091E90237FF02C0295F3F4FD3 |
:10489000C3E035952795CA95E1F780910002909184 |
:1048A0000102821B930B9F938F9382EC95E09F9361 |
:1048B0008F931F930F93E0918303F09184030995E5 |
:1048C00088E2809321022DB73EB7265F3F4F2DBF70 |
:1048D0008091E6029091E7029C0197FF02C0215F60 |
:1048E0003F4F207F821B930B97FD019695958795EF |
:1048F0009F938F938091E6029091E70297FD0F9628 |
:10490000A4E095958795AA95E1F79F938F932091C1 |
:10491000E6023091E70237FF02C0295F3F4FF3E024 |
:1049200035952795FA95E1F78091FE019091FF0169 |
:10493000821B930B9F938F9384ED95E09F938F93AE |
:104940001F930F93E0918303F091840309958CE307 |
:10495000809321028DB79EB70A968DBF8091E402A5 |
:104960009091E50297FD0196959587959F938F937A |
:104970008091E4029091E5022091FC013091FD01CB |
:10498000821B930B9F938F9386EE95E045CF8D30DE |
:1049900009F0B8C484E18093210280911501992720 |
:1049A0009F938F938091E8029091E90297FD0F9673 |
:1049B00074E0959587957A95E1F79F938F93209171 |
:1049C000E8023091E90237FF02C0295F3F4F63E000 |
:1049D000359527956A95E1F7809100029091010243 |
:1049E000821B930B9F938F9385EF95E09F938F93FB |
:1049F0001F930F93E0918303F0918403099588E25C |
:104A0000809321022DB73EB7265F3F4F2DBF809187 |
:104A1000140199279F938F938091E6029091E7026A |
:104A200097FD0F9654E0959587955A95E1F79F93DA |
:104A30008F932091E6023091E70237FF02C0295F91 |
:104A40003F4F43E0359527954A95E1F78091FE0168 |
:104A50009091FF01821B930B9F938F9389E096E0C7 |
:104A60009F938F931F930F93E0918303F09184039F |
:104A700009958CE3809321028DB79EB70A968DBF6E |
:104A80008091130199279F938F938091E4029091D5 |
:104A9000E50297FD0196959587959F938F93809159 |
:104AA000E4029091E5022091FC013091FD01821B0E |
:104AB000930B9F938F938DE196E09F938F931F931A |
:104AC0000F93E0918303F09184030995EDB7FEB74E |
:104AD0003A9662C11092210281E396E09F938F93F0 |
:104AE000DF92CF92FE01099584E1809321020F901D |
:104AF0000F900F900F908091DE029091DF029F93B4 |
:104B00008F938091F8019091F9019F938F938EE399 |
:104B100096E09F938F93DF92CF92E0918303F09181 |
:104B20008403099588E2809321022DB73EB7285F60 |
:104B30003F4F2DBF8091DC029091DD029F938F93B8 |
:104B40008091FA019091FB019F938F938DE496E001 |
:104B50009F938F93DF92CF92E0918303F091840330 |
:104B600009958CE3809321028DB79EB708968DBF7F |
:104B70008091D8029091D9029F938F938091F601F2 |
:104B80009091F7019F938F938CE596E09F938F937D |
:104B9000DF92CF9245CE1092210280912001909118 |
:104BA00021016AE070E00E94C67A9F938F93809102 |
:104BB0002001909121016AE070E00E94C67A7F9303 |
:104BC0006F938BE696E09F938F93DF92CF92FE01D7 |
:104BD000099584E1809321022DB73EB7285F3F4FAE |
:104BE0002DBF8091D0089091D1086AE070E00E94BA |
:104BF000B27A9F938F938091D0089091D1086AE008 |
:104C000070E00E94B27A7F936F938FE796E09F9354 |
:104C10008F93DF92CF92E0918303F0918403099503 |
:104C200088E2809321028DB79EB708968DBF809150 |
:104C3000D2089091D3089F938F9383E996E09F9336 |
:104C40008F93DF92CF92E0918303F09184030995D3 |
:104C50008CE380932102EDB7FEB73696EDBF8091CD |
:104C6000D4089091D5089F938F9383EA96E09F9301 |
:104C70008F93DF92CF92E0918303F09184030995A3 |
:104C80002DB73EB72A5F3F4F45C11092210285EBF9 |
:104C900096E09F938F93DF92CF92FE01099588E271 |
:104CA000809321020F900F900F900F9080917802C7 |
:104CB00099279F938F938EEB96E09F938F93DF922C |
:104CC000CF92E0918303F091840309958CE3809364 |
:104CD00021028DB79EB706968DBF80915C079927FC |
:104CE00001979F938F938EEC96E04AC01092210219 |
:104CF0008EED96E09F938F93DF92CF92FE01099500 |
:104D000084E1809321020F900F900F900F9080917B |
:104D10008A0190918B019F938F9386EE96E09F93EB |
:104D20008F93DF92CF92E0918303F09184030995F2 |
:104D300088E2809321022DB73EB72A5F3F4F2DBFF7 |
:104D40008091F7079091F8079F938F9384EF96E0F7 |
:104D50009F938F93DF92CF92E0918303F09184032E |
:104D600009958CE3809321028DB79EB706968DBF7F |
:104D700080919002909191029F938F9382E097E0AF |
:104D80009F938F93DF92CF92E0918303F0918403FE |
:104D90000995EDB7FEB73696EDBFB4C2C9E7CC2E84 |
:104DA000C2E0DC2E20E030E0E901B3E0FB2EC0934E |
:104DB0002102F60181916F0199279F938F938901B9 |
:104DC0000F5F1F4F1F930F9380E197E09F938F9387 |
:104DD0008AE490E29F938F93E0918303F0918403A0 |
:104DE00009952DB73EB7285F3F4F2DBFFA946496C3 |
:104DF0009801F7FEDCCF86C2ADE7CA2EA2E0DA2E1C |
:104E0000C0E0D0E08E01F3E0FF2E00932102F60116 |
:104E100081916F0199279F938F932596DF93CF936D |
:104E20008DE197E09F938F938AE490E29F938F9315 |
:104E3000E0918303F091840309952DB73EB7285F75 |
:104E40003F4F2DBFFA940C5E1F4F2497F7FEDDCF26 |
:104E500059C2109221028AE297E09F938F930AE44D |
:104E600010E2DF92CF92FE01099584E18093210246 |
:104E70000F900F900F900F908091690199279F9349 |
:104E80008F9382E397E09F938F93DF92CF92E0918D |
:104E90008303F0918403099588E2809321028DB702 |
:104EA0009EB706968DBF8091D6019091D70197FD50 |
:104EB000039695958795959587959F938F9380E415 |
:104EC00097E09F938F931F930F93E0918303F0914B |
:104ED000840309958CE380932102EDB7FEB73696E3 |
:104EE000EDBF8091570699279F938F938091560627 |
:104EF00099279F938F938EE497E09F938F931F93AF |
:104F00000F93E0918303F091840309952DB73EB789 |
:104F1000285F3F4F2DBFF6C1109221028CE597E02C |
:104F20009F938F937AE4A72E70E2B72EDF92CF92F1 |
:104F3000FE0109950F900F900F900F90CCEFD6E0E7 |
:104F400000E010E062E0F62E802F8C5E809321025C |
:104F50008B8D99278F7790709F938F938B8999274B |
:104F60008F7790709F938F938B8599278F77907011 |
:104F70009F938F938B8199278F7790709F938F93B7 |
:104F80008CE697E09F938F93BF92AF92E09183035B |
:104F9000F091840309958DB79EB70C968DBFFA9456 |
:104FA0000C5E1F4FA096F7FECFCFACC1109221022E |
:104FB0008DE797E09F938F935AE4A52E50E2B52E8C |
:104FC000DF92CF92FE0109950F900F900F900F90F6 |
:104FD000CCEFD6E000E010E042E0F42E802F8C5EB3 |
:104FE000809321028F8D992787FD90959F938F93B2 |
:104FF0008F89992787FD90959F938F938F85992708 |
:1050000087FD90959F938F938F81992787FD90952A |
:105010009F938F938CE897E09F938F93BF92AF926B |
:10502000E0918303F09184030995EDB7FEB73C96B8 |
:10503000EDBFFA940C5E1F4FA096F7FECFCF62C172 |
:10504000109221028DE997E09F938F930AE410E27A |
:10505000DF92CF92FE01099584E1809321020F90A7 |
:105060000F900F900F9080911707881F8827881F37 |
:1050700097E0899FC00111248D969F938F93809113 |
:105080000F07881F8827881F96E0899FC001112479 |
:105090008D969F938F9380910707881F8827881F7D |
:1050A00095E0899FC00111248D969F938F938091E5 |
:1050B000FF06881F8827881F9927880F991F880F48 |
:1050C000991F8D969F938F938CEA97E09F938F9370 |
:1050D000DF92CF92E0918303F0918403099588E2F7 |
:1050E000809321022DB73EB7245F3F4F2DBF8091A3 |
:1050F0003707881F8827881F9BE0899FC0011124DC |
:105100008D969F938F9380912F07881F8827881FE4 |
:105110009AE0899FC00111248D969F938F9380916F |
:105120002707881F8827881F99E0899FC0011124BD |
:105130008D969F938F9380911F07881F8827881FC4 |
:10514000992723E0880F991F2A95E1F78D969F9361 |
:105150008F9380EC97E09F938F93DF92CF92E091B3 |
:105160008303F091840309958CE3809321028DB72A |
:105170009EB70C968DBF80913F07881F8827881F98 |
:105180009CE0899FC00111248D969F938F9384ED9D |
:1051900097E09F938F93DF92CF92E0918303F091FA |
:1051A0008403099580914707EDB7FEB73696EDBFAA |
:1051B00087FF12C080E48093210285EE97E09F93E1 |
:1051C0008F93DF92CF92E0918303F091840309954E |
:1051D0000F900F900F900F9080914F0787FF12C094 |
:1051E00084E48093210288EE97E09F938F931F932E |
:1051F0000F93E0918303F091840309950F900F9032 |
:105200000F900F908091570787FF7CC088E48093B0 |
:1052100021028BEE97E09F938F931F930F93E09162 |
:105220008303F091840309950F900F900F900F90D6 |
:1052300069C0109221028EEE97E09F938F93DF92C8 |
:10524000CF92FE01099584E1809321020F900F9087 |
:105250000F900F908091AC019091AD019F938F932F |
:105260008CEF97E09F938F93DF92CF92E09183032F |
:10527000F0918403099588E2809321022DB73EB70F |
:105280002A5F3F4F2DBF8091AE019091AF019F9358 |
:105290008F9389E098E09F938F93DF92CF92E09174 |
:1052A0008303F0918403099589E4809321028DB7EB |
:1052B0009EB706968DBF86E198E09F938F93DF920D |
:1052C000CF92E0918303F0918403099580911F02AE |
:1052D0000F900F900F900F9083FF14C01092AF01AA |
:1052E0001092AE0160E070E08EE090E00E949D2B95 |
:1052F00009C080912201281719F42150209322011E |
:105300001092200210921F02DF91CF911F910F91F6 |
:10531000FF90DF90CF90BF90AF900895F999FECFA6 |
:1053200092BD81BDF89A80B599270895F999FECF6D |
:105330001FBA92BD81BD60BD0FB6F894FA9AF99A72 |
:105340000FBE08954AEA20E030E02617370740F400 |
:10535000FC018191480F2F5F3F4F26173707C8F395 |
:10536000842F99270895EAEA40E050E0461757074E |
:1053700078F49C01F999FECF32BD21BDF89A80B531 |
:10538000E80F4F5F5F4F2F5F3F4F4617570790F370 |
:105390008E2F9927089581E080932A0682E08093DA |
:1053A000290683E08093280684E080932B0685E01D |
:1053B00080932C0686E080932D0687E080932E064E |
:1053C00088E080932F0689E0809330068AE08093FE |
:1053D00031068BE0809332068CE08093330608958B |
:1053E0008FE5809327068CE0E9E9F6E011928A9533 |
:1053F000E9F780910201843150F08AE080934706FA |
:1054000010926B068BE1809343068EE40AC083E022 |
:105410008093470680E280936B068EE1809343067B |
:1054200085E5809368068093690680E280936A062A |
:10543000109295068AE68093340682E6809397065A |
:1054400066E060934E0610928B061092880658E034 |
:105450005093410646EE4093420630E430934406B2 |
:105460009EE19093350685E0809337062FE02093E8 |
:1054700038069093360610923A0650933B0684E124 |
:1054800080933C0610923D063093980610928E064B |
:1054900020933906109293068CE080939406109224 |
:1054A0005006109251061092520610925306109216 |
:1054B0006D0610926E0610926F061092700690E8BC |
:1054C0009093540632E330935506E2E0E09396065B |
:1054D00088E1809356064093570684E080935C06EB |
:1054E0004DE740935F0640936006409361069093BA |
:1054F000580675E57093590686E480935A068CED3C |
:1055000080935B068CE380935D0610925E068FE5C8 |
:105510008093710683EF809373068AEA8093750601 |
:105520008093760698E29093720690937406109298 |
:105530007706309362062AE520936306309364066B |
:105540006093780684E68093790680937A062093A8 |
:105550007B0688E780937C06909380068BE480939B |
:105560007D0670937E0680937F066093810650933C |
:105570008206309383068AE28093840685EF8093C7 |
:1055800085068CE880938606E0938706109289064C |
:1055900010928A0681E280934B0681E480934C0648 |
:1055A00020934D0610928C0610928D0686E980930A |
:1055B0008F064093650684E38093660610929006FA |
:1055C000109291061092920608950E94F0298AE0A6 |
:1055D00080933E0680E180933F0626E020934006BC |
:1055E0009AE59093450688E780934606909348068F |
:1055F0008093490620934A0680E280934F068CE30D |
:10560000809367068BE480936C0686E491E6A3E7BB |
:10561000B4E78093990690939A06A0939B06B09363 |
:105620009C066EE770E087E296E00E94A2298093D4 |
:10563000A5060895CF93DF930E94F02988E0809318 |
:105640003E0630E130933F0626E02093400694E684 |
:105650009093450688E7809346069093480680938A |
:10566000490620934A0630934F0686E480936706E6 |
:1056700080936C06A9E9B6E085E0E3E2F1E0ED0194 |
:10568000019009928A95E1F76EE770E0CD018257AB |
:1056900090400E94A2298093A506DF91CF910895A2 |
:1056A0000E94F02926E020933E068AE080933F0680 |
:1056B00084E08093400694E69093450688E78093C3 |
:1056C0004606909348068093490620934A0680E157 |
:1056D00080934F0686E48093670680936C0685E48A |
:1056E00091E6A3E7B9E78093990690939A06A09371 |
:1056F0009B06B0939C066EE770E087E296E00E94FE |
:10570000A2298093A5060895F999FECF92BD81BD87 |
:10571000F89A80B599270895F999FECF1FBA92BDDE |
:1057200081BD60BD0FB6F894FA9AF99A0FBE08953C |
:105730006EE879E20E941579089546E959E20E94DF |
:105740004F790895EF92FF920F931F93CF93C82F35 |
:105750008150853008F0C3E08FE7C89F8001112495 |
:1057600085EEE82E8FEFF82EE00EF11E6EE770E06A |
:10577000C7010E94B329682F98012D593F4F8FB35D |
:105780009927AC014270507081FDF9CF32BD21BD27 |
:10579000F89A80B5861711F0CA0121C08FB39927F6 |
:1057A0009C012270307081FDF9CFF2BCE1BCF89A07 |
:1057B00080B58F3511F0C90112C08FE7C89FC001B5 |
:1057C00011244B972EE839E24FE750E0BC0187E205 |
:1057D00096E00E94F0780E94386A81E090E0CF91D4 |
:1057E0001F910F91FF90EF900895282F863010F0B1 |
:1057F00025E003C0882309F421E020930001F999F2 |
:10580000FECF1FBA82E090E092BD81BD20BD0FB6F1 |
:10581000F894FA9AF99A0FBE0895CF93C82F809101 |
:1058200027068F3509F04FC0C63010F0C5E003C021 |
:10583000CC2309F448C00E9477778091980682FFB4 |
:1058400007C080914C06843618F080E580934C06A2 |
:105850006EE770E087E296E00E94A2298093A50699 |
:105860008FE7C89FC001112426E939E24FE750E0D5 |
:1058700067E276E04B970E942D7926E939E24CE009 |
:1058800050E068E276E080E590E00E942D796CE0DF |
:1058900070E088E296E00E94A229282FF999FECFB5 |
:1058A0001FBA8CE590E092BD81BD20BD0FB6F89483 |
:1058B000FA9AF99A0FBE8C2F0E94F52B0E94386A33 |
:1058C00081E090E002C080E090E0CF9108956DE427 |
:1058D00070E088EE93E00E94B329482F8FB3992798 |
:1058E0009C012270307081FDF9CF85E394E092BD78 |
:1058F00081BDF89A80B5841779F48FB399279C01FC |
:105900002270307081FDF9CF88EE93E092BD81BDA9 |
:10591000F89A80B5813011F0C90108952EE839E276 |
:105920004EE450E068EE73E086EA96E00E94F0787C |
:1059300081E090E008958091A6068130A9F46DE49D |
:1059400070E086EA96E00E94A2298093F30626E999 |
:1059500039E24EE450E066EA76E088EE93E00E9499 |
:105960002D7981E090E0089580E090E00895CF9354 |
:10597000DF9381E08093A606E6EAF6E08FE01586E5 |
:1059800016861786108A8150349687FFF8CF80E4F8 |
:105990008093B3068093B4061092B5068093B60642 |
:1059A0008093B70690EC9093B8061092B906809356 |
:1059B000BA068093BB061092BC069093BD069093E6 |
:1059C000BE068093BF061092C0068093C1069093D6 |
:1059D000C206A7EAB6E08CE0E9E2F1E0ED01019051 |
:1059E00009928A95E1F76DE470E0CD0101970E947C |
:1059F000A2298093F306DF91CF910895F999FECF04 |
:105A000082E090E092BD81BDF89A80B5282F863063 |
:105A100078F023E0322FF999FECF1FBA82E090E0B0 |
:105A200092BD81BD30BD0FB6F894FA9AF99A0FBEB7 |
:105A300020930001822F992708951F93CF93C82F99 |
:105A4000162F863010F0C5E003C0882309F4C1E0AA |
:105A50008C2F99278230910541F08330910544F4D1 |
:105A6000019731F40E94E52A05C00E941A2B02C05A |
:105A70000E94502B1123E1F06CE070E080E590E093 |
:105A80000E94B329282FF999FECF8CE590E092BDB2 |
:105A900081BDF89A80B5821759F42EE839E24CE0BE |
:105AA00050E060E570E088E296E00E94F07802C085 |
:105AB0000E94CB298C2F0E940D2CCF911F9108950D |
:105AC000DF92EF92FF920F931F93CF93FF24DF2C6F |
:105AD000EF2C81E090E00E94842B8F3511F031E0B3 |
:105AE000E32E6CE070E080E590E00E94B329C82FBF |
:105AF000F999FECF8CE590E092BD81BDF89A80B512 |
:105B00008C1711F421E0D22EC1E001E010E0EE206C |
:105B100029F48C2F0E94A22B8823B9F591E0F92E4D |
:105B20001F930F938EE198E09F938F938BE292E106 |
:105B30009F938F93E0918303F091840309952DB790 |
:105B40003EB72A5F3F4F2DBF0130110521F00230D3 |
:105B5000110521F006C00E94E52A05C00E941A2BFB |
:105B600002C00E94502BDD2059F02EE839E24CE0B3 |
:105B700050E060E570E088E296E00E94F07802C0B4 |
:105B80000E94CB298C2F0E940D2CCF5F0F5F1F4FDF |
:105B9000C63008F4BCCFFF2019F083E00E94F52B3B |
:105BA0000E94FE2CC82F0E94A22B8C2F99279F9316 |
:105BB0008F9384E498E09F938F930BE212E11F93FD |
:105BC0000F93E0918303F0918403099581E090E0C5 |
:105BD0000E94842B2DB73EB72A5F3F4F2DBF8F3FCA |
:105BE00021F00E94672C882399F48DE598E09F931B |
:105BF0008F931F930F93E0918303F0918403099592 |
:105C00000E94B72C0E949B2C0F900F900F900F902A |
:105C1000EE2029F06FE581E090E00E948C2B10923D |
:105C2000260690E0E3EBF6E0CFE08081349618168C |
:105C30000CF49F5FC150C7FFF8CF90932606892FC1 |
:105C400099279F938F9387EA96E09F938F938EE790 |
:105C500098E09F938F931F930F93E0918303F091AC |
:105C6000840309950E9422068DB79EB708968DBFC2 |
:105C7000CF911F910F91FF90EF90DF900895982F93 |
:105C80002FB7F8943998389A88B1836088B9809191 |
:105C9000B9008C7F8093B9008AE28093B80010929B |
:105CA0002C0210922A0210922902992379F0ECEF2B |
:105CB000F6E08BE010821182128213821482158228 |
:105CC000168217828150389687FFF4CF78942FBFC1 |
:105CD000089510922C0284E98093BC0080E88093A0 |
:105CE000BC001092BD001092BA001092BB0010923E |
:105CF000B9001092B8001092280280E00E943F2E56 |
:105D00001092BB0085E88093BC00809126028260DF |
:105D10008093260208951F920F920FB60F921124BE |
:105D20002F933F934F935F938F939F93EF93FF93A3 |
:105D300080912C02282F3327442755278F5F80938B |
:105D40002C02F9012731310508F0C2C2EF59FF4F8B |
:105D50000C944D7B81E08093280209C080912A0237 |
:105D60008C3090F480912A028F5F80932A02809178 |
:105D70002A02E82FFF27EE0FFF1FEE0FFF1FEA5545 |
:105D8000F94F8585181654F780912A028C3070F0EF |
:105D9000109225021092240210922A0285E080932C |
:105DA0002C0280912902880F8D5A04C080912A020A |
:105DB000880F8E5A8093BB0085E87FC280912A02AB |
:105DC000E82FFF2783E0EE0FFF1F8A95E1F7E450ED |
:105DD000F94F81818093BB0085E88093BC0080915E |
:105DE0002A02E82FFF27EE0FFF1FEE0FFF1FEE0F17 |
:105DF000FF1FE450F94F808180FF91C080912A02FB |
:105E0000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1F04 |
:105E1000E450F94F8281882329F08091260687304B |
:105E200008F46CC28091240290912502892B09F01C |
:105E300065C28091220290912302892B09F05EC2F3 |
:105E40006EC080912A0221E030E002C0220F331F91 |
:105E50008A95E2F780912202909123022823392328 |
:105E6000232B79F080912A02E82FFF27EE0FFF1FE6 |
:105E7000EE0FFF1FEE0FFF1FE450F94F80E1848308 |
:105E80000DC080912A02E82FFF27EE0FFF1FEE0FB3 |
:105E9000FF1FEE0FFF1FE450F94F148280912A027A |
:105EA000E82FFF2753E0EE0FFF1F5A95E1F7E4506C |
:105EB000F94F8481282F332743E0220F331F4A955F |
:105EC000E1F780912A02E82FFF2793E0EE0FFF1FF2 |
:105ED0009A95E1F7E450F94F82818770822B809385 |
:105EE000BB0085E88093BC0020912A0281E090E00D |
:105EF00002C0880F991F2A95E2F720912402309161 |
:105F0000250282239323892B51F084EF96E090930E |
:105F1000300280932F0288E080933102EFC184E049 |
:105F200089C1E0912F02F091300281918093BB00F2 |
:105F300085E88093BC00F0933002E0932F028091BB |
:105F40003102815080933102882309F4D7C183E064 |
:105F500071C18091B900803351F580912D02882361 |
:105F600029F480912A028F5F80932D0280912A026A |
:105F7000E82FFF2783E0EE0FFF1F8A95E1F7E4503B |
:105F8000F94F838199278F7790708F3791057CF433 |
:105F900080912A02E82FFF27EE0FFF1FEE0FFF1F51 |
:105FA000EE0FFF1FE450F94F83818F5F83831092C0 |
:105FB0002C0284E98093BC008AE090E09093370142 |
:105FC0008093360180912A028F5F80932A0210927B |
:105FD0002C026DC18091B9008034C9F180912902F1 |
:105FE000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1F23 |
:105FF000E450F94F83818F778383809129028F5FEB |
:1060000080932902809129028C30A0F010922902FD |
:10601000109223021092220280912E028F5F8093B1 |
:106020002E028C3038F010922E02809126028D7F45 |
:10603000809326028091260281608093260210922E |
:106040002C0284E98093BC001092280273C08091D6 |
:106050002902E82FFF27EE0FFF1FEE0FFF1FEE0FA5 |
:10606000FF1FE450F94F8381806883838091290268 |
:10607000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1F92 |
:10608000E450F94F808180FF2FC080912902E82FD2 |
:10609000FF2753E0EE0FFF1F5A95E1F7E450F94F49 |
:1060A00084819927009751F04097D9F584EF96E0C5 |
:1060B0009093300280932F0288E031C080912902B2 |
:1060C000992743E0880F991F4A95E1F78F5F984F12 |
:1060D0009093300280932F029091290280912E029A |
:1060E0009817E1F483E01BC080912902992733E0DF |
:1060F000880F991F3A95E1F78F5F984F9093300280 |
:1061000080932F028091260281FD06C09091290282 |
:1061100080912E02981711F482E001C081E08093F3 |
:10612000310280913102813011F485E801C085ECA3 |
:106130008093BC0080912D028093270210922D0243 |
:10614000DDC0E0912F02F09130028091BB0080838E |
:1061500080912F02909130020196909330028093AB |
:106160002F0280913102815080933102823010F0F1 |
:1061700085EC5DC0813011F485E859C0809126021C |
:1061800081FF2DC080913F0280FD1DC080912902BA |
:10619000E82FFF2723E0EE0FFF1F2A95E1F7E450D9 |
:1061A000F94F86818A3F79F480912902E82FFF27F1 |
:1061B00093E0EE0FFF1F9A95E1F7E450F94F8081CD |
:1061C000816080830CC080912902E82FFF2783E043 |
:1061D000EE0FFF1F8A95E1F7E450F94F108280918E |
:1061E00029028F5F80932902809129028C30A0F0D0 |
:1061F00010922902109223021092220280912E0204 |
:106200008F5F80932E028C3038F010922E02809196 |
:1062100026028D7F8093260210922C0284E98093BF |
:10622000BC008091260281608093260265C0809325 |
:10623000BC0086E080932C0261C088E9BBCD8091D0 |
:106240002B02880F805FB6CD80912B029927813079 |
:10625000910561F0823091051CF4892B21F04EC02C |
:10626000029739F04BC080911501A4CD80911401A3 |
:10627000A1CD809113019ECD80E89CCD10922C027F |
:1062800084E98093BC00109228028AE090E0909309 |
:1062900037018093360180912B02823088F48091FF |
:1062A0002B028F5F80932B0282E180932C028091DE |
:1062B00026028E7F8093260285EA8093BC001EC052 |
:1062C00010922B028091260281608093260216C0D4 |
:1062D00010922C0284E98093BC0080912602816098 |
:1062E000809326028AE090E09093370180933601F4 |
:1062F00010922A021092290210922802FF91EF9127 |
:106300009F918F915F914F913F912F910F900FBE71 |
:106310000F901F9018951F93CF93DF93182F8091A4 |
:106320007702882321F48091BB01882319F081E052 |
:1063300090E097C01D3008F092C01123B1F0E12F1A |
:10634000FF2723E0EE0FFF1F2A95E1F7E450F94FF6 |
:1063500035978081359688230CF081C038978081ED |
:1063600080FD03C083E090E07CC08091F406823021 |
:1063700019F084E090E075C067E070E084EF96E08B |
:106380000E94A2299091FB06891719F085E090E000 |
:1063900068C080ED97E00E944716EC0180912602CC |
:1063A00080FD05C0CE010E9450168823B9F3112349 |
:1063B00019F48FEF90E00BC0212F3327215030408C |
:1063C00081E090E002C0880F991F2A95E2F7909330 |
:1063D000250280932402A1E0B0E0ECEFF6E040E07B |
:1063E00050E06BE0CD01042E02C0880F991F0A9483 |
:1063F000E2F7209124023091250282239323892BF6 |
:1064000011F01182128261504F5F5F4F389667FF23 |
:10641000E9CF10922A0210922C02809126028E7FE0 |
:106420008093260285EA8093BC008091260280FD3D |
:1064300005C0CE010E9450168823B9F38091240232 |
:1064400090912502892B29F0CE010E9450168823B5 |
:1064500011F38091240290912502009711F082E0BF |
:1064600090E0DF91CF911F9108950F931F93CF93E9 |
:10647000DF93982F80917702882321F48091BB01CC |
:10648000882319F081E090E092C09D30A0F4992318 |
:1064900019F486E090E08BC0C92FDD27FE0133E0C0 |
:1064A000EE0FFF1F3A95E1F7E450F94F35978081E1 |
:1064B000359687FD03C082E090E079C038978081EF |
:1064C00080FD03C083E090E072C080ED97E00E9401 |
:1064D00047168C018091260280FD05C0C8010E94EC |
:1064E00050168823B9F3219721E030E0C90102C09A |
:1064F000880F991FCA95E2F7909323028093220296 |
:10650000D901ECEFF6E040E050E06BE0CD01042E65 |
:1065100002C0880F991F0A94E2F72091220230915D |
:10652000230282239323892B11F01182128261505E |
:106530004F5F5F4F389667FFE9CF109229021092A4 |
:10654000F4061092FB0610922C02809126028E7F98 |
:106550008093260285EA8093BC008091260280FD0C |
:1065600005C0C8010E9450168823B9F38091220209 |
:1065700090912302892B29F0C8010E94501688238C |
:1065800011F38091F406823019F084E090E00FC09E |
:1065900067E070E084EF96E00E94A2299091FB06EC |
:1065A000891719F085E090E002C080E090E0DF916B |
:1065B000CF911F910F910895CF93DF9380E021E851 |
:1065C0003FEFC3EAD7E0EDE5F7E0DF01853020F4E7 |
:1065D00011961C921E9202C0318320831982188268 |
:1065E00022968F5F12963296833280F38FE790E087 |
:1065F00090939C0780939B0781E89FEF90939A0765 |
:106600008093990710929E0710929D071092E502C1 |
:106610001092E4021092E7021092E6021092E90250 |
:106620001092E802DF91CF9108951F920F920FB65A |
:106630000F9211240F931F932F933F934F935F93C8 |
:106640006F937F938F939F93AF93BF93CF93DF937A |
:10665000EF93FF9340918600509187008091330221 |
:1066600090913402481B590B8091860090918700CD |
:106670009093340280933302CA018D549440A091C8 |
:106680003502B0913602835F9A4178F480913502E9 |
:1066900080935C07149714F010923A0181E090E027 |
:1066A0009093360280933502B3C0A131B1050CF04E |
:1066B000AFC0CA018B5F9040845B914008F085C0F9 |
:1066C0008091380190913901481B590BE091900657 |
:1066D000EE2351F0FF27EE0FFF1FE35AF84F8081A2 |
:1066E000918184369105ECF4FD01EA0FFB1FE35A1A |
:1066F000F84F80819181FA01E81BF90BCF01F7FF78 |
:1067000003C0909581959F4F06975CF48091780225 |
:10671000883C20F480917802865F01C088EC8093E9 |
:106720007802FD01EA0FFB1FE35AF84F8081918147 |
:106730009C01220F331F280F391F240F351F37FFED |
:1067400002C02D5F3F4FE901D595C795D595C795F7 |
:10675000CA0101968C179D0714F4219706C0415079 |
:106760005040C417D5070CF4219680917802833CE1 |
:10677000D8F08D010A0F1B1FF801E35AF84F8081F2 |
:1067800091819E01281B390BC90163E070E00E94D2 |
:10679000C67ACB01880F991F860F971F0D55184F8A |
:1067A000F8019183808307C0AA0FBB1FAD55B84F76 |
:1067B00011961C921E92E0913502F0913602EE0F76 |
:1067C000FF1FE35AF84FD183C083209135023091E7 |
:1067D00036022F5F3F4F309336022093350280916F |
:1067E00002018431A8F42530310511F45D9A01C00D |
:1067F0005D9880913502909136028630910511F4B2 |
:106800005C9A01C05C98079711F45B9A01C05B9891 |
:10681000FF91EF91DF91CF91BF91AF919F918F91B8 |
:106820007F916F915F914F913F912F911F910F91A8 |
:106830000F900FBE0F901F901895EF92FF920F933D |
:106840001F93809143069927880F991F880F991FDE |
:106850007C010027F7FC0095102F8091D2029091C7 |
:10686000D302A091D402B091D502BC01CD01A80100 |
:1068700097010E94FB7A30938305209382058091D3 |
:10688000CA029091CB02A091CC02B091CD02BC0182 |
:10689000CD01A80197010E94FB7A309385052093D2 |
:1068A000840580913F089091400897FD0396959547 |
:1068B0008795959587959093870580938605809118 |
:1068C0004F089091500897FD03969595879595955B |
:1068D000879590938905809388058091E402909133 |
:1068E000E5022091FC013091FD01821B930B9093F6 |
:1068F0008B0580938A058091720290917302A0911A |
:106900007402B0917502BC01CD012AE030E040E094 |
:1069100050E00E94FB7A30938D0520938C05809186 |
:10692000C7059091C80590938F0580938E0580913F |
:106930008A0190918B0190939305809392058091A9 |
:106940002001909121019093950580939405809169 |
:106950007802992790939705809396058091F70781 |
:106960009091F80790939905809398058091FD0682 |
:10697000992790939B0580939A0580910507992705 |
:1069800090939D0580939C0580910D079927909386 |
:106990009F0580939E058091150799279093A105E7 |
:1069A0008093A0058091D6019091D7019093AB057B |
:1069B0008093AA0580915C0290915D029093AD0551 |
:1069C0008093AC058091D0089091D1089093AF0549 |
:1069D0008093AE058091D4089091D5089093B1052D |
:1069E0008093B00580916E0290916F02A091700229 |
:1069F000B0917102BC01CD012AE030E040E050E0EE |
:106A00000E94FB7A3093B3052093B20580919002E7 |
:106A1000909191029093B9058093B8058091D60822 |
:106A200099279093BD058093BC0580914703909171 |
:106A300048039093BF058093BE05809145039091D4 |
:106A400046039093C1058093C00580919C038823E1 |
:106A500021F480919D03882321F08091810581603C |
:106A600003C0809181058E7F809381051F910F91D6 |
:106A7000FF90EF900895EF92FF921F93CF93DF93D3 |
:106A8000182F7B0180917702882391F58091020174 |
:106A90008C3010F0873111F4299801C0299A1150D7 |
:106AA0001F3FE9F0F092DE01E092DD01E701809105 |
:106AB000DD019091DE01892B11F4209781F3809103 |
:106AC000E1018823A1F31092E1018091DD01909111 |
:106AD000DE01892B09F421970E948D77E8CF809100 |
:106AE00002018C3010F0873111F4299A01C02998E5 |
:106AF000DF91CF911F91FF90EF900895CF93DF9397 |
:106B0000809102018D3011F40E94131B10927A00C3 |
:106B100080910002909101029093020880930108F5 |
:106B20008091FE019091FF019093F3078093F2070B |
:106B30008091FC019091FD01909345088093440859 |
:106B40002091F8013091F901C901880F991F880F30 |
:106B5000991F820F931F820F931F90934008809379 |
:106B60003F082091FA013091FB01C901880F991F5C |
:106B7000880F991F820F931F820F931F90935008C5 |
:106B800080934F088FEC80937A00A9E7B2E0CCE2C3 |
:106B9000D6E097E08991E82FFF27EE0FFF1FE35A19 |
:106BA000F84F0190F081E02DE158FF4F1E161F06AF |
:106BB0001CF0E0E0F0E005C0EF3FF10514F0EFEF6E |
:106BC000F0E08C91282F3327E217F30714F481505B |
:106BD00004C02E173F0714F48F5F8C9391501196C9 |
:106BE00097FFD8CF809168069927AA27BB27BC01B9 |
:106BF000CD0124EC39E040E050E00E94877ADC01CE |
:106C0000CB018093820190938301A0938401B09380 |
:106C10008501809169069927AA27BB27BC01CD0170 |
:106C20000E94877ADC01CB0180937E0190937F01E3 |
:106C3000A0938001B0938101DF91CF910895A0E0EE |
:106C4000B0E0E5E2F6E30C941B7B882E71E0772E32 |
:106C500000E010E078015801E80110929C031093C5 |
:106C6000DF020093DE021093DD020093DC0210933A |
:106C7000D9020093D8021092D7021093E902009330 |
:106C8000E8021093E7020093E6021093E5020093F6 |
:106C9000E40210926401109263011092F1010E94CB |
:106CA0007E3584E690E00E9469160E947E358091D0 |
:106CB000340680FF10C08091160190911701875B08 |
:106CC000934038F480911601909117018E5E9240A6 |
:106CD00010F40E94B81A6FE1C62E8AE090E00E947C |
:106CE00069168091FC019091FD01080F191F809198 |
:106CF000000290910102E80EF91E8091FE01909130 |
:106D0000FF01A80EB91E8091C7059091C805C80F54 |
:106D1000D91FCA94C7FEE1CF9701205F3F4F369538 |
:106D20002795369527953093E9022093E802C5010F |
:106D3000409696958795969587959093E7028093D0 |
:106D4000E602005F1F4FB5E016950795BA95E1F78B |
:106D50001093E5020093E4026096A5E0D695C795EE |
:106D6000AA95E1F7D093D902C093D8029093E30299 |
:106D70008093E2023093E1022093E00282E08816E1 |
:106D8000C9F580913F089091400897FF03C0909506 |
:106D900081959F4F6CE070E00E94C67A9B017093D2 |
:106DA000DF026093DE0280914F089091500897FFB8 |
:106DB00003C0909581959F4F6CE070E00E94C67A69 |
:106DC0007093DD026093DC02B90184E090E00E94E0 |
:106DD0009D2B6091DC027091DD0286E090E00E94C4 |
:106DE0009D2B6091D8027091D90288E090E00E94BA |
:106DF0009D2B4FC084E090E00E94982B9093DF027F |
:106E00008093DE0286E090E00E94982B9C01909394 |
:106E1000DD028093DC028091DE029091DF028150DE |
:106E2000984018F421503840A0F18FE998E09F93E2 |
:106E30008F938BE292E19F938F93E0918303F09184 |
:106E40008403099580913F089091400897FF03C003 |
:106E5000909581959F4F6CE070E00E94C67A709388 |
:106E6000DF026093DE0280914F089091500897FFF7 |
:106E700003C0909581959F4F6CE070E00E94C67AA8 |
:106E80007093DD026093DC0277240F900F900F90D7 |
:106E90000F9012BC11BC10920208109201081092BF |
:106EA000F3071092F207109245081092440884E606 |
:106EB00090E00E9469168091F8019091F9019C017F |
:106EC000220F331F220F331F280F391F280F391F9E |
:106ED0003093400820933F088091FA019091FB0184 |
:106EE0008C01000F111F000F111F080F191F080F31 |
:106EF000191F1093500800934F0880914306C82E25 |
:106F0000DD24EE24FF24442737FD4095542FC7018C |
:106F1000B6010E94877A4B015C016093D2027093A4 |
:106F2000D3028093D4029093D5029801442737FD71 |
:106F30004095542FC701B6010E94877ADC01CB012E |
:106F40008093CA029093CB02A093CC02B093CD025F |
:106F50008092B2029092B302A092B402B092B502B3 |
:106F60008093AA029093AB02A093AC02B093AD02BF |
:106F70001092A2021092A3021092A4021092A502F3 |
:106F80008091180190911901A0911A01B0911B01F3 |
:106F90008093C9059093CA05A093CB05B093CC0507 |
:106FA0001092F0011092EF011092F2011092F30191 |
:106FB0001092F4011092F501109292021092930235 |
:106FC000109294021092950200918A0110918B0107 |
:106FD000109391020093900284E690E090938701D1 |
:106FE0008093860182E390E09093DE018093DD013F |
:106FF000809168069927AA27BB27BC01CD0124EC04 |
:1070000039E040E050E00E94877ADC01CB018856ED |
:10701000954CAF4FBF4F8093820190938301A09313 |
:107020008401B0938501809169069927AA27BB271F |
:10703000BC01CD010E94877ADC01CB018856954CBA |
:10704000AF4FBF4F80937E0190937F01A09380014B |
:10705000B09381011092410110924001C801AA270A |
:1070600097FDA095BA2F20913C0130913D014091B0 |
:107070003E0150913F01BC01CD010E94877ADC01A5 |
:10708000CB0180934B0890934C08A0934D08B0938C |
:107090004E0810928D0210928C020E94386A8091E4 |
:1070A0003F02846080933F028FEF8093CB08109261 |
:1070B000CC0880E28093CD08C9E7D2E0ACE2B6E02C |
:1070C00077E0C72E8D91E82FFF27EE0FFF1FE35AC1 |
:1070D000F84F8081918181588993CA94C7FEF2CF7D |
:1070E00084E6809378028091DB01882311F0579A1F |
:1070F0000DC080E091E1909309018093080181E047 |
:10710000809310010E9409170E94091788E090E0FF |
:107110000E94982B9093D9028093D80212BC11BC84 |
:107120008091E8029091E90280569940815C9B42EF |
:1071300028F080919C03816080939C038091E602FB |
:107140009091E70280569940815C9B4228F08091A3 |
:107150009C03826080939C038091E4029091E502FD |
:107160008C5291408957954028F080919C0384600F |
:1071700080939C038091DE029091DF028C529140BB |
:10718000835C914028F080919C03886080939C03ED |
:107190008091DC029091DD028C529140835C9140A1 |
:1071A00028F080919C03806180939C038091D80299 |
:1071B0009091D902805092408355914028F080915F |
:1071C0009C03806280939C0380919C0381117724AF |
:1071D00086E480937901872D9927EDE0CDB7DEB75E |
:1071E0000C94377BA3E1B0E0E8EFF8E30C94167B56 |
:1071F0008091E4029091E5022091FC013091FD0123 |
:10720000821B930B9093450880934408809106025B |
:107210009091070297FD07969C0153E035952795BD |
:107220005A95E1F7309302082093010880910402F7 |
:107230009091050297FD079643E0959587954A95AD |
:10724000E1F79093F3078093F20730930E082093B1 |
:107250000D08909305088093040880913F08909151 |
:107260004008AC01440F551F480F591F2091F801E9 |
:107270003091F901C901880F991F880F991F820F5A |
:10728000931F820F931F480F591F57FF02C04D5F76 |
:107290005F4F5595479555954795509340084093B6 |
:1072A0003F0880914F0890915008AC01440F551F42 |
:1072B000480F591F2091FA013091FB01C901880F35 |
:1072C000991F880F991F820F931F820F931F480FDA |
:1072D000591F57FF02C04D5F5F4F55954795559514 |
:1072E00047955093500840934F082091F8013091F2 |
:1072F000F901C901880F991F880F991F820F931FE9 |
:10730000820F931F9C01442737FD4095542F809195 |
:10731000C2029091C302A091C402B091C502820F33 |
:10732000931FA41FB51F8093C2029093C302A09322 |
:10733000C402B093C5022091FA013091FB01C9014A |
:10734000880F991F880F991F820F931F820F931F19 |
:107350009C01442737FD4095542F8091BE029091A7 |
:10736000BF02A091C002B091C102820F931FA41F5F |
:10737000B51F8093BE029093BF02A093C002B0934A |
:10738000C10280911708909118082091F80130915E |
:10739000F901820F931F909318088093170880912A |
:1073A0004708909148082091FA013091FB01820F23 |
:1073B000931F90934808809347088091DA02909138 |
:1073C000DB0201969093DB028093DA028091C7057D |
:1073D0009091C8052091D8023091D902821B930B5D |
:1073E0009C01442737FD4095542F8091BA0290911B |
:1073F000BB02A091BC02B091BD02820F931FA41FDB |
:10740000B51F8093BA029093BB02A093BC02B093C5 |
:10741000BD028FEC80937A00109212012091AA0293 |
:107420003091AB024091AC025091AD0229873A876E |
:107430004B875C8729543B46414050402CF028E460 |
:107440003BE641E050E00DC089859A85AB85BC855F |
:10745000885B9449AE4FBF4F4CF428EB34E94EEFB4 |
:107460005FEF2D833E834F83588708C089859A85B7 |
:10747000AB85BC858D839E83AF83B8872091B20294 |
:107480003091B3024091B4025091B5022D873E87EE |
:107490004F87588B29543B46414050402CF028E4FC |
:1074A0003BE641E050E00DC08D859E85AF85B889F3 |
:1074B000885B9449AE4FBF4F4CF428EB34E94EEF54 |
:1074C0005FEF29833A834B835C8308C08D859E855B |
:1074D000AF85B88989839A83AB83BC83A091440824 |
:1074E000B0914508BB8BAA8BFD01CF01AA2797FD60 |
:1074F000A095BA2FA090A202B090A302C090A402BF |
:10750000D090A502A80EB91ECA1EDB1EA092A20230 |
:10751000B092A302C092A402D092A502E0904B08C0 |
:10752000F0904C0800914D0810914E08E80EF91E9D |
:107530000A1F1B1FE0924B08F0924C0800934D0865 |
:1075400010934E08F0915B02F98BFF2309F098C16C |
:1075500080915A02882309F093C180913B0886FFED |
:107560008FC18091F2079091F307AA2797FDA0950C |
:10757000BA2FBC01CD0129813A814B815C810E94E7 |
:10758000877A9B01AC0197FF04C02150384F4F4FC1 |
:107590005F4F6BE055954795379527956A95D1F7DD |
:1075A00080916301682E772488249924CA01B90147 |
:1075B000A40193010E94877ADC01CB018093F4023D |
:1075C0009093F502A093F602B093F702B7FF04C0C0 |
:1075D0008150904FAF4FBF4F1C012D013CE055949F |
:1075E0004794379427943A95D1F72092F402309239 |
:1075F000F5024092F6025092F702809101089091B4 |
:107600000208AA2797FDA095BA2FBC01CD012D81B4 |
:107610003E814F8158850E94877A97FF04C0615050 |
:10762000784F8F4F9F4F2BE095958795779567956E |
:107630002A95D1F7A40193010E94877ADC01CB013E |
:107640008093F8029093F902A093FA02B093FB02A0 |
:10765000B7FF04C08150904FAF4FBF4F9C01AD01A9 |
:107660008CE055954795379527958A95D1F72093C6 |
:10767000F8023093F9024093FA025093FB02809192 |
:10768000F4029091F5029093EA078093E9078091C4 |
:10769000F8029091F9029093EE078093ED0722197A |
:1076A0003309440955092093F8023093F9024093B5 |
:1076B000FA025093FB02E20EF31E041F151FE09224 |
:1076C0004B08F0924C0800934D0810934E0880919F |
:1076D00062018823B1F457FF04C02F5F3F4F4F4F23 |
:1076E0005F4F5595479537952795A21AB30AC40A57 |
:1076F000D50AA092A202B092A302C092A402D09294 |
:10770000A5022A893B8979010027F7FC0095102FF3 |
:107710008091F8029091F902A091FA02B091FB02D7 |
:10772000E80EF91E0A1F1B1FC801B70129813A8103 |
:107730004B815C810E94877A9B01AC0197FF04C05A |
:107740002150384F4F4F5F4FBBE0559547953795C8 |
:107750002795BA95D1F780916401A82EBB24CC243B |
:10776000DD24CA01B901A60195010E94877ADC01D6 |
:10777000CB018093EC029093ED02A093EE02B093C4 |
:10778000EF02B7FF04C08150904FAF4FBF4F3C0195 |
:107790004D01ACE09594879477946794AA95D1F7BE |
:1077A0006092EC027092ED028092EE029092EF02F3 |
:1077B000C801B7012D813E814F8158850E94877A8B |
:1077C00097FF04C06150784F8F4F9F4FFBE0959516 |
:1077D000879577956795FA95D1F7A60195010E944F |
:1077E000877ADC01CB018093F0029093F102A093A1 |
:1077F000F202B093F302B7FF04C08150904FAF4F35 |
:10780000BF4FAC01BD01ECE0759567955795479565 |
:10781000EA95D1F74093F0025093F1026093F2029F |
:107820007093F3022A893B8937FF03C03095219575 |
:107830003F4F21343105E4F1D401C30197FE07C065 |
:10784000B095A095909581959F4FAF4FBF4F8138D0 |
:107850009105A105B10584F4DB01CA0177FF07C0DA |
:10786000B095A095909581959F4FAF4FBF4F8138B0 |
:107870009105A105B105E4F081E080938E0218C066 |
:107880001092EE071092ED071092EA071092E907A6 |
:107890001092F0021092F1021092F2021092F30292 |
:1078A0001092EC021092ED021092EE021092EF0292 |
:1078B0008091F0029091F102A091F202B091F30256 |
:1078C000BC01CD0124E630E040E050E00E94FB7AAC |
:1078D000E090EC02F090ED02E21AF30AF092000858 |
:1078E000E092FF078091EC029091ED02A091EE02F0 |
:1078F000B091EF02BC01CD0124E630E040E050E061 |
:107900000E94FB7ADA01C9012091F0023091F10264 |
:107910008C01021B130B1093F5070093F407809161 |
:107920003C0190913D01A0913E01B0913F01BC010D |
:10793000CD0128E631E040E050E00E94877A2091B6 |
:107940004B0830914C0840914D0850914E08261735 |
:1079500037074807590764F0261B370B480B590BAC |
:1079600020934B0830934C0840934D0850934E0899 |
:1079700020914B0830914C0840914D0850914E0891 |
:1079800057FF0CC0260F371F481F591F20934B0865 |
:1079900030934C0840934D0850934E086091F20785 |
:1079A0007091F3076E0D7F1D9B01442737FD4095B5 |
:1079B000542F8091A6029091A702A091A802B091A5 |
:1079C000A902820F931FA41FB51F8093A602909354 |
:1079D000A702A093A802B093A9028091600290919F |
:1079E0006102681B790BCB01AA2797FDA095BA2FDE |
:1079F00029853A854B855C85820F931FA41FB51F8F |
:107A00008093AA029093AB02A093AC02B093AD0214 |
:107A1000C0907E01D0907F01E0908001F0908101C4 |
:107A2000C816D906EA06FB06C4F488EA91E6A0E087 |
:107A3000B0E08C199D09AE09BF098093AA0290930A |
:107A4000AB02A093AC02B093AD028093A6029093D8 |
:107A5000A702A093A802B093A90222273327A90165 |
:107A60002C193D094E095F098091AA029091AB0241 |
:107A7000A091AC02B091AD0282179307A407B5079D |
:107A8000B4F4D701C601885A9146A040B040809313 |
:107A9000AA029093AB02A093AC02B093AD02809384 |
:107AA000A6029093A702A093A802B093A9026091A6 |
:107AB000010870910208600F711F9B01442737FD78 |
:107AC0004095542F8091AE029091AF02A091B002E8 |
:107AD000B091B102820F931FA41FB51F8093AE0215 |
:107AE0009093AF02A093B002B093B10280915E0276 |
:107AF00090915F02681B790BCB01AA2797FDA09597 |
:107B0000BA2F2D853E854F855889820F931FA41F5C |
:107B1000B51F8093B2029093B302A093B402B093C6 |
:107B2000B502E0908201F0908301009184011091F0 |
:107B30008501E816F9060A071B07C4F488EA91E6EE |
:107B4000A0E0B0E08E199F09A00BB10B8093B202A8 |
:107B50009093B302A093B402B093B5028093AE02A7 |
:107B60009093AF02A093B002B093B10222273327C3 |
:107B7000A9012E193F09400B510B8091B20290913F |
:107B8000B302A091B402B091B50282179307A40783 |
:107B9000B507B4F4D801C701885A9146A040B04057 |
:107BA0008093B2029093B302A093B402B093B50253 |
:107BB0008093AE029093AF02A093B002B093B10253 |
:107BC0008091A2029091A302A091A402B091A5027B |
:107BD0008093B6029093B702A093B802B093B90213 |
:107BE0008091B2029091B302A091B402B091B5021B |
:107BF0008093D2029093D302A093D402B093D50283 |
:107C00008091AA029091AB02A091AC02B091AD021A |
:107C10008093CA029093CB02A093CC02B093CD0282 |
:107C20008091AE029091AF02A091B002B091B102EA |
:107C30008093CE029093CF02A093D002B093D10252 |
:107C40008091A6029091A702A091A802B091A902EA |
:107C50008093C6029093C702A093C802B093C90252 |
:107C600080911E0190911F0197FD079633E0959535 |
:107C700087953A95E1F790930208809301088091E7 |
:107C80001C0190911D0197FD079623E0959587951E |
:107C90002A95E1F79093F3078093F2078091000211 |
:107CA000909101020F9734F488E19CEF90930208C1 |
:107CB000809301088091000290910102079734F4AB |
:107CC00080E398EF909302088093010820910201CD |
:107CD0002A30A9F48091000290910102835F9340C1 |
:107CE00034F088EE93E0909302088093010880912D |
:107CF0000002909101028A5F9340DCF014C08091F1 |
:107D0000000290910102815D974034F088EE93E08B |
:107D100090930208809301088091000290910102E3 |
:107D2000805E974034F080ED97E090930208809356 |
:107D300001088091FE019091FF010F9734F488E1D2 |
:107D40009CEF9093F3078093F2078091FE0190914E |
:107D5000FF01079734F480E398EF9093F307809343 |
:107D6000F2072A30A9F48091FE019091FF01835F10 |
:107D7000934034F088EE93E09093F3078093F207FA |
:107D80008091FE019091FF018A5F9340DCF014C066 |
:107D90008091FE019091FF01815D974034F088EE63 |
:107DA00093E09093F3078093F2078091FE01909106 |
:107DB000FF01805E974034F080ED97E09093F307E9 |
:107DC0008093F20760917101662309F4AFC040917E |
:107DD0001E0150911F018091FC029091FD02481BF1 |
:107DE000590B509303034093020320911E013091DD |
:107DF0001F01280F391F37FF02C02F5F3F4F3595F6 |
:107E000027953093FD022093FC02413851051CF068 |
:107E100080E890E005C040585F4F34F480E89FEF61 |
:107E2000909303038093020340911C0150911D0124 |
:107E30008091FE029091FF02481B590B5093010361 |
:107E40004093000320911C0130911D01280F391F20 |
:107E500037FF02C02F5F3F4F359527953093FF02C4 |
:107E60002093FE02413851051CF080E890E005C0E7 |
:107E700040585F4F34F480E89FEF90930103809364 |
:107E80000003462F55278091020390910303849F9E |
:107E9000B001859F700D949F700D11249B0177FF99 |
:107EA00002C0215F3F4F04E0359527950A95E1F721 |
:107EB0008091010890910208820F931F909302080D |
:107EC000809301088091000390910103849FD00169 |
:107ED000859FB00D949FB00D1124AD019D01B7FF9A |
:107EE00002C0215F3F4F14E0359527951A95E1F7C1 |
:107EF0008091F2079091F307820F931F9093F307FD |
:107F00008093F20780911E0190911F01860F971FA9 |
:107F100090931F0180931E0180911C0190911D017F |
:107F2000840F951F90931D0180931C0100910408FC |
:107F3000109105088091E9079091EA071016110643 |
:107F40005CF59C0197FF04C022273327281B390BBF |
:107F5000C901AA2797FDA095BA2F20916201332766 |
:107F600044275527BC01CD010E94877A9B01AC01B3 |
:107F700097FF04C0215C3F4F4F4F5F4FB6E05595D0 |
:107F8000479537952795BA95D1F78091FF0790913E |
:107F90000008820F931F27C097FF03C0909581951B |
:107FA0009F4FAA2797FDA095BA2F209162013327F2 |
:107FB00044275527BC01CD010E94877A9B01AC0163 |
:107FC00097FF04C0215C3F4F4F4F5F4FA6E0559590 |
:107FD000479537952795AA95D1F78091FF079091FE |
:107FE0000008821B930B909300088093FF07E0909A |
:107FF0000D08F0900E088091ED079091EE071E1489 |
:108000001F045CF59C0197FF04C022273327281B1F |
:10801000390BC901AA2797FDA095BA2F20916201BB |
:10802000332744275527BC01CD010E94877A9B0145 |
:10803000AC0197FF04C0215C3F4F4F4F5F4FF6E00C |
:108040005595479537952795FA95D1F78091F4077F |
:108050009091F507820F931F27C097FF03C090955B |
:1080600081959F4FAA2797FDA095BA2F2091620175 |
:10807000332744275527BC01CD010E94877A9B01F5 |
:10808000AC0197FF04C0215C3F4F4F4F5F4FE6E0CC |
:108090005595479537952795EA95D1F78091F4073F |
:1080A0009091F507821B930B9093F5078093F4074B |
:1080B00080913B0887FF44C0B989BB2309F040C0C9 |
:1080C00080915A028823E1F5E1E0EE16E1E0FE0638 |
:1080D0004CF080910108909102088E0D9F1D8050F8 |
:1080E00091400DC0F0E0EF16FFEFFF0664F48091C1 |
:1080F0000108909102088E0D9F1D80509F4F909314 |
:1081000002088093010821E0013012074CF08091B1 |
:10811000F2079091F307800F911F805091400CC09F |
:108120003FEF0030130764F48091F2079091F3075A |
:10813000800F911F80509F4F9093F3078093F20719 |
:10814000E2E1CD5E0C94327B80917702882329F5A1 |
:1081500080913F028C7F80933F0280913E028F7D11 |
:1081600080933E02A1EAB3E0ECEFF6E09BE0809161 |
:10817000BB01882309F48C938D91818312829150E5 |
:10818000389697FFF4CF8091BB01882359F08091F6 |
:10819000BB0181508093BB0105C080913F0281608B |
:1081A00080933F0280912802882319F010922802C0 |
:1081B000089580932A0280932C02809126028E7F5C |
:1081C0008093260285EA8093BC000895882319F4E1 |
:1081D00080E090E00895E82FFF27EE0FFF1FE35A9D |
:1081E000F84F8081918181589F4F8F3F910521F0F9 |
:1081F0001CF08FEF90E004C097FF02C080E090E099 |
:1082000099270895CF93DF93A9E7B2E0CCE2D6E0B7 |
:1082100057E08991E82FFF27EE0FFF1FE35AF84F31 |
:108220000190F081E02DE158FF4FEF3FF10521F083 |
:108230001CF0EFEFF0E004C0F7FF02C0E0E0F0E078 |
:10824000893111F4EC931BC04C91242F3327E21792 |
:10825000F307A9F0CF01821B930B97FD0396959529 |
:10826000879595958795242F280F2C93822F9927F2 |
:10827000E817F90714F4215001C02F5F2C935150D7 |
:10828000119657FFC6CF80913606883F38F0EFEF42 |
:10829000F0E0E81BF109E758FD4F808180937601FB |
:1082A00080917601882329F0843618F084E6809343 |
:1082B000760180913806883F38F0EFEFF0E0E81B58 |
:1082C000F109E758FD4F8081809375018091750118 |
:1082D000882329F0843618F084E680937501809114 |
:1082E0004506883F38F0EFEFF0E0E81BF109E7586A |
:1082F000FD4F808180937001809170018B3010F46C |
:108300008AE002C08F3F11F4809370018091720661 |
:10831000883F38F0EFEFF0E0E81BF109E758FD4F38 |
:1083200080818093190880911908863010F485E0C7 |
:1083300002C08F3F11F48093190880917406883F22 |
:1083400038F0EFEFF0E0E81BF109E758FD4F8081CE |
:108350008093420880914208863010F485E002C084 |
:108360008F3F11F48093420880915F06873F19F494 |
:10837000429905C006C0863F31F4439B02C08CE899 |
:1083800015C086E413C0883F38F0EFEFF0E0E81B3B |
:10839000F109E758FD4F80818093160880911608F7 |
:1083A000893110F488E102C08F3F11F480931608E0 |
:1083B00080916006873F19F4429905C006C0863F48 |
:1083C00031F4439B02C08CE815C086E413C0883F9B |
:1083D00038F0EFEFF0E0E81BF109E758FD4F80813E |
:1083E0008093EF078091EF07893110F488E102C094 |
:1083F0008F3F11F48093EF0780916106883F38F03A |
:10840000EFEFF0E0E81BF109E758FD4F8081809322 |
:108410001F0880911F08893110F488E102C08F3F46 |
:1084200011F480931F08809137060E94E6408093E4 |
:10843000550280913A06883F38F0EFEFF0E0E81BF4 |
:10844000F109E758FD4F80818093740180913C06CB |
:10845000883F38F0EFEFF0E0E81BF109E758FD4FF7 |
:1084600080818093720180914406883F38F0EFEF5D |
:10847000F0E0E81BF109E758FD4F8081809373011C |
:1084800080914606883F38F0EFEFF0E0E81BF109F5 |
:10849000E758FD4F808180936F0180914706883FA8 |
:1084A00038F0EFEFF0E0E81BF109E758FD4F80816D |
:1084B0008093710180914806883F38F0EFEFF0E03B |
:1084C000E81BF109E758FD4F808180936E01809190 |
:1084D0004906883F38F0EFEFF0E0E81BF109E75874 |
:1084E000FD4F808180936D0180914F06883F38F069 |
:1084F000EFEFF0E0E81BF109E758FD4F8081809332 |
:108500006B0180915006883F38F0EFEFF0E0E81BF8 |
:10851000F109E758FD4F8081809354028091510604 |
:10852000883F38F0EFEFF0E0E81BF109E758FD4F26 |
:1085300080818093530280915206883F38F0EFEF9C |
:10854000F0E0E81BF109E758FD4F8081809352026B |
:1085500080915306883F38F0EFEFF0E0E81BF10917 |
:10856000E758FD4F80818093510280916D06883FCE |
:1085700038F0EFEFF0E0E81BF109E758FD4F80819C |
:108580008093500280916E06883F38F0EFEFF0E064 |
:10859000E81BF109E758FD4F808180934F028091DD |
:1085A0006F06883F38F0EFEFF0E0E81BF109E7587D |
:1085B000FD4F808180934E0280917006883F38F095 |
:1085C000EFEFF0E0E81BF109E758FD4F8081809361 |
:1085D0004D0280915406883F38F0EFEFF0E0E81B41 |
:1085E000F109E758FD4F8081809369018091580619 |
:1085F000883F38F0EFEFF0E0E81BF109E758FD4F56 |
:1086000080818093680180915506883F38F0EFEFB4 |
:10861000F0E0E81BF109E758FD4F80818093670186 |
:1086200080915906883F38F0EFEFF0E0E81BF10940 |
:10863000E758FD4F80818093660180916206883FF4 |
:1086400038F0EFEFF0E0E81BF109E758FD4F8081CB |
:108650008093650180916506883F38F0EFEFF0E088 |
:10866000E81BF109E758FD4F8081809364018091F8 |
:108670006606883F38F0EFEFF0E0E81BF109E758B5 |
:10868000FD4F80818093630180916706883F38F0B9 |
:10869000EFEFF0E0E81BF109E758FD4F8081809390 |
:1086A000620180918F06883F38F0EFEFF0E0E81B21 |
:1086B000F109E758FD4F80818093FE0790915103A7 |
:1086C000992321F08091FE07981720F08091FE07F2 |
:1086D000882311F49093FE078091340680933B0821 |
:1086E0008091970680931E0880916C06883F38F031 |
:1086F000EFEFF0E0E81BF109E758FD4F8081809330 |
:10870000610180918806883F38F0EFEFF0E0E81BC8 |
:10871000F109E758FD4F80818093520880916B01E9 |
:10872000282F33272F5F3F4F8CE398E2B9010E9437 |
:10873000C67A7093780160937701809142068093A6 |
:1087400043088091410680930608E0918A06EE2353 |
:10875000D9F181E080934C02FF27EE0FFF1FE35A0F |
:10876000F84F80819181805C9F4F14F410924C02ED |
:108770008091790120914C028217B1F0833088F406 |
:10878000222319F08CED95E002C088EC90E09093E4 |
:10879000DE018093DD0185E0809362022093790100 |
:1087A00003C0815080937901809192089091930841 |
:1087B00097FF0FC080914C02882359F080919C0351 |
:1087C000806880939C0305C0E0934C028AE080930C |
:1087D0007901809192089091930897FF1DC0809134 |
:1087E00077028823C9F080914C028823A9F08091F8 |
:1087F0000A0190910B018F5F9F4F71F488E99AE312 |
:108800009093DE018093DD0180E094EA90930B0168 |
:1088100080930A0110924C0280914C02882321F02F |
:1088200080913E02816003C080913E028E7F8093E2 |
:108830003E02DF91CF910895A7E1B0E0E2E2F4E4D7 |
:108840000C94167B0E94F23880913F029927847124 |
:108850009070892B91F58091980682FF27C08091B6 |
:108860005C0290915D020097F1F002E0883590077C |
:10887000D4F49C0197FF02C02D5F3F4F359527959B |
:108880003595279580914C069927289FA001299F0F |
:10889000500D389F500D1124CA0164E670E00E940B |
:1088A000C67ACB0106C08DE290E003C080914C06F1 |
:1088B000992790933D0280933C0220913A02309197 |
:1088C0003B0255E72033350759F41092830210928A |
:1088D000820280910608992790933D0280933C0282 |
:1088E00060918202709183027A8369838091060885 |
:1088F00099270A966817790714F49A8389838091D7 |
:108900007802843608F06AC080913E0282FD66C01B |
:108910008091180390911903009731F0019790937B |
:108920001903809318030BC01092770290934102B1 |
:108930008093400280913F028D7E80933F02809120 |
:1089400002018A3011F0843110F0289A01C0289871 |
:108950008091400290914102895E9340E0F18091C4 |
:10896000D6088536C0F180913C0290913D029A83F1 |
:10897000898380913F02806180933F028091280625 |
:10898000A82FBB27AA0FBB1FFD01ED55F84F118281 |
:10899000108280912906282F3327220F331FC90107 |
:1089A0008D55984FFC0111821082A35AB84F119631 |
:1089B0001C921E92235A384FD90111961C921E9276 |
:1089C00080912B06E82FFF27EE0FFF1FE35AF84F89 |
:1089D0001182108218C41092770215C48091780217 |
:1089E0008D3808F4E6C380913F028F7E80933F026A |
:1089F00090914D0682E3989FC00111249093190332 |
:108A000080931803E981FA81B9978CF080917702FD |
:108A1000882369F08091400290914102FFEF8F3FDF |
:108A20009F0729F001969093410280934002209184 |
:108A30004002309141022F3F310509F030F510928C |
:108A40009A0210929B0210929C0210929D02109228 |
:108A50009602109297021092980210929902109228 |
:108A6000040310920503109206031092070310925C |
:108A7000A2021092A3021092A4021092A502809169 |
:108A80003E02806280933E024DC080913F02826030 |
:108A900080933F0280913E0285FF44C08091E901AE |
:108AA0009091EA01A091EB01B091EC018739910519 |
:108AB000A105B1058CF48091720290917302A0918E |
:108AC0007402B0917502825A9E4FAF4FBF4F24F08F |
:108AD00080913B0880FD05C080913E028F7180939C |
:108AE0003E0210929A0210929B0210929C021092E7 |
:108AF0009D02109296021092970210929802109284 |
:108B000099021092A2021092A3021092A402109253 |
:108B1000A502295E334030F088EE93E09093410245 |
:108B20008093400280912A06E82FFF27EE0FFF1F57 |
:108B3000E35AF84F80819181813591050CF434C15D |
:108B400020917702222309F02FC180912B06E82F74 |
:108B5000FF27EE0FFF1FE35AF84F808191818C347D |
:108B600091050CF4FFC080911A038F5F80931A0364 |
:108B7000893C08F419C120931A0310924102109203 |
:108B8000400230912806E32FFF27EE0FFF1FE35A24 |
:108B9000F84F8081918187349105B4F48091290642 |
:108BA000E82FFF27EE0FFF1FE35AF84F80819181D6 |
:108BB0000190F081E02DF7FF03C0F095E195FF4FA4 |
:108BC000E734F1050CF478C041E020912906A22F8A |
:108BD000BB27AA0FBB1FA35AB84F8D919C91119729 |
:108BE0008734910544F0E32FFF27EE0FFF1FE35A70 |
:108BF000F84F808191818D919C918734910574F01B |
:108C000080912806E82FFF27EE0FFF1FE35AF84F49 |
:108C100080819181873491050CF042E0E22FFF279B |
:108C2000EE0FFF1FE35AF84F808191818634910542 |
:108C300074F480912806E82FFF27EE0FFF1FE35AF8 |
:108C4000F84F80819181873491050CF043E0E22F49 |
:108C5000FF27EE0FFF1FE35AF84F808191818A5B57 |
:108C60009F4F74F480912806E82FFF27EE0FFF1F17 |
:108C7000E35AF84F80819181873491050CF044E0EC |
:108C8000E22FFF27EE0FFF1FE35AF84F80819181FB |
:108C90008A5B9F4F74F480912806E82FFF27EE0F20 |
:108CA000FF1FE35AF84F80819181863491050CF4BF |
:108CB00045E0842F0E94F52B80912906E82FFF279D |
:108CC000EE0FFF1FE35AF84F808191810190F081F0 |
:108CD000E02DF7FF03C0F095E195FF4F7E97CCF4B0 |
:108CE00080912806E82FFF27EE0FFF1FE35AF84F69 |
:108CF000808191818A5B9F4F64F481E08093B70308 |
:108D00001092630288EE93E09093DE018093DD0180 |
:108D10004BC0809100010E94A22B80E00E9462065D |
:108D200080914E060E94137680913B0880FF10C010 |
:108D30008091160190911701875B934038F48091E0 |
:108D40001601909117018E5E924010F40E94B81A9D |
:108D500081E00E941F368093630281E08093DB01F3 |
:108D6000579A19C080819181855B9F4FDCF4809177 |
:108D70001A038F5F80931A03893CB0F02093770227 |
:108D800020931A03109241021092400282E00E9446 |
:108D90001F368093630268E770E0809100010E94B3 |
:108DA0003B3502C020931A0380912A06E82FFF2743 |
:108DB000EE0FFF1FE35AF84F808191818C599F4F2E |
:108DC0000CF0F0C120918B06E22FFF27EF77F070B7 |
:108DD000EE0FFF1FED55F84F80819181069714F03B |
:108DE00084E606C0808191818B5F9F4F1CF48CE9E3 |
:108DF00080931D0380917702E0912B06882309F070 |
:108E000037C1FF27EE0FFF1FE35AF84F8081918192 |
:108E10008C599F4F9CF48091980683FD0BC0E22FE4 |
:108E2000FF27EE0FFF1FE35AF84F80819181855B8A |
:108E30009F4FDCF080918B068823B9F080919806D3 |
:108E400083FF13C180918B06E82FFF27EE0FFF1FD2 |
:108E5000E35AF84F80819181875F9F4F0CF405C1E1 |
:108E600080911D03843609F000C120916302222302 |
:108E700029F080913F02886080933F028091180121 |
:108E800090911901A0911A01B0911B018093C9051D |
:108E90009093CA05A093CB05B093CC051092E9013D |
:108EA0001092EA011092EB011092EC011092720202 |
:108EB0001092730210927402109275021092F201D5 |
:108EC0001092F3011092F4011092F501809128069E |
:108ED000E82FFF27EE0FFF1FE35AF84F80819181A3 |
:108EE0008D599F4FACF480912906E82FFF27EE0F94 |
:108EF000FF1FE35AF84F808191810190F081E02DAE |
:108F0000F7FF03C0F095E195FF4FE436F10534F427 |
:108F100080918B06882311F480931B0380911B039F |
:108F20008F5F80931B038E3F08F42EC110921B03AA |
:108F300080919C03882309F091C0222309F48EC0FC |
:108F400080915603882309F089C081E090E09093D6 |
:108F500041028093400281E08093770210920403E3 |
:108F60001092050310920603109207031092A202BA |
:108F70001092A3021092A4021092A50210929E02D7 |
:108F800010929F021092A0021092A10280914306BB |
:108F9000E82EFF240027112780913F089091400878 |
:108FA0009C01442737FD4095542FC801B7010E940A |
:108FB000877ADC01CB018093B2029093B302A09335 |
:108FC000B402B093B50280914F08909150089C0173 |
:108FD000442737FD4095542FC801B7010E94877A76 |
:108FE000DC01CB018093AA029093AB02A093AC0268 |
:108FF000B093AD028091D2029091D302A091D4029D |
:10900000B091D5028093AE029093AF02A093B002CC |
:10901000B093B1028091CA029091CB02A091CC0290 |
:10902000B091CD028093A6029093A702A093A802CC |
:10903000B093A90210929A0210929B0210929C0285 |
:1090400010929D021092960210929702109298022E |
:109050001092990284E68093620296C08CED95E0AE |
:109060009093DE018093DD018FC010921B038CC0B2 |
:10907000FF27EE0FFF1FE35AF84F8081918185365D |
:1090800091059CF08091980683FD0BC0E22FFF278D |
:10909000EE0FFF1FE35AF84F80819181855B9F4F50 |
:1090A000DCF080918B068823B9F08091980683FFCD |
:1090B00069C080918B06E82FFF27EE0FFF1FE35A50 |
:1090C000F84F808191818E5C9F4F0CF05BC0809146 |
:1090D0001D038C3909F056C080912806E82FFF2720 |
:1090E000EE0FFF1FE35AF84F808191818D599F4FFA |
:1090F000ACF480912906E82FFF27EE0FFF1FE35AFB |
:10910000F84F808191810190F081E02DF7FF03C03D |
:10911000F095E195FF4FE436F1053CF480918B0624 |
:10912000882319F480931C0318C010929A0210929D |
:109130009B0210929C0210929D0210929602109235 |
:10914000970210929802109299021092890210923E |
:109150008802109287021092860280911C038F5F12 |
:1091600080931C038B3F80F01092770210921C03B7 |
:10917000109241021092400280913E028F718093C2 |
:109180003E0202C010921C0380913A0290913B0271 |
:1091900073E0883E9707B8F5019690933B02809361 |
:1091A0003A0231C010921D0310923B0210923A0213 |
:1091B0002AC02E5E324038F180915A0890915B08A7 |
:1091C0008059914000F58091720290917302A091B4 |
:1091D0007402B09175028C5D9540A040B0409CF443 |
:1091E00080E395E790933B0280933A02809140029E |
:1091F000909141028A5E934030F089EE93E0909323 |
:1092000041028093400280913A01815080933A015B |
:1092100080913A018F3F21F080913F0284FFA9C3E2 |
:109220000E940241B0903E06809126039091270350 |
:109230009C01220F331F280F391FC0902806AC2D28 |
:10924000BB27AA0FBB1FFD01E35AF84F4B2D552733 |
:1092500080819181849F7001859FF00C949FF00C18 |
:1092600011242E0D3F1D37FF02C02D5F3F4FB90166 |
:109270007595679575956795AD55B84F80913F0683 |
:10928000082F11278D919C91809F9001819F300D17 |
:10929000909F300D1124620F731F7093270360930A |
:1092A000260380912803909129039C01220F331FEC |
:1092B000280F391FD0902906AD2DBB27AA0FBB1F41 |
:1092C000FD01E35AF84F80819181849FF001859FD1 |
:1092D000F00D949FF00D11242E0F3F1F37FF02C099 |
:1092E0002D5F3F4FA9015595479555954795AD552C |
:1092F000B84F8D919C91809F7001819FF00C909F41 |
:10930000F00C11244E0D5F1D509329034093280348 |
:1093100080914C02882309F448C0CB0177FD039665 |
:10932000DC01B595A795B595A795CA0157FD03969C |
:10933000FC01F595E795F595E79580919C01682FDF |
:10934000772767FD70956A9F90016B9F300D7A9F1C |
:10935000300D112480915803482F552747FD509513 |
:109360004E9FC0014F9F900D5E9F900D1124280FBE |
:10937000391F37FF02C0295F3F4F93E0359527958E |
:109380009A95E1F730938902209388026E9F9001AD |
:109390006F9F300D7E9F300D11244A9FC0014B9F5F |
:1093A000900D5A9F900D11243FC080918906E82F9F |
:1093B000FF27EE5BFE4F868180939C019081909306 |
:1093C0005803A82FBB27A7FDB095A69F9001A79F84 |
:1093D000300DB69F300D1124E92FFF27E7FDF095E2 |
:1093E000E49FC001E59F900DF49F900D1124280F7C |
:1093F000391F37FF02C0295F3F4F83E0359527951E |
:109400008A95E1F73093890220938802A49F900106 |
:10941000A59F300DB49F300D1124E69FC001E79F3A |
:10942000900DF69F900D1124281B390B37FF02C0B9 |
:10943000295F3F4F03E0359527950A95E1F7309373 |
:1094400087022093860280912B06E82FFF27EE0FDC |
:10945000FF1FE35AF84F80819181909581959F4F2E |
:1094600090938502809384028530910514F00497CF |
:1094700005C00FEF8C3F900734F40496909385025B |
:109480008093840204C0109285021092840280911D |
:109490004403882309F43EC0282F33278091880293 |
:1094A0009091890297FD079613E0959587951A95F7 |
:1094B000E1F7289FA001299F500D389F500D1124DE |
:1094C000CA0157FD0F96B4E095958795BA95E1F7D7 |
:1094D00090938902809388028091860290918702FE |
:1094E00097FD0796A3E095958795AA95E1F7289FA4 |
:1094F000B001299F700D389F700D1124CB0177FDAD |
:109500000F96F4E095958795FA95E1F79093870289 |
:109510008093860280908802909089028091470310 |
:1095200090914803881A990A909289028092880241 |
:109530000091860210918702809145039091460325 |
:10954000081B190B109387020093860280912A064C |
:10955000E82FFF27EE0FFF1FE35AF84FE080F1805E |
:109560008FE790E0E80EF91EF0928302E09282020B |
:10957000809170019927AA2797FDA095BA2FBC0169 |
:10958000CD010E94FB79DC01CB0120E030E040E21C |
:1095900051E4BC01CD010E946979DC01CB01BC0121 |
:1095A000CD010E94CD79DC01CB01809349088091E7 |
:1095B0006F018093200880916E019927AA2797FD5B |
:1095C000A095BA2FBC01CD010E94FB79DC01CB0133 |
:1095D00020E030E040E251E4BC01CD010E94697915 |
:1095E000DC01CB01BC01CD010E94CD79DC01CB01B6 |
:1095F0008093F90780916D0180930F088091C303D8 |
:1096000080FF59C080915208813808F454C080917D |
:10961000BC03992787FD90952B2D3327829FD0017E |
:10962000839FB00D929FB00D11248A0E9B1E9092C5 |
:109630008902809288028091BD03992787FD9095C9 |
:10964000829FF001839FF00D929FF00D11240E0F69 |
:109650001F1F10938702009386028091BE03282F5C |
:10966000332727FD30958091840290918502820FE7 |
:10967000931F90938502809384028091C003282FCA |
:10968000332727FD3095809139069927289F80013F |
:10969000299F100D389F100D112410934101009344 |
:1096A00040018091BF0399278E159F0524F4909364 |
:1096B000830280938202809182029091830297FFBD |
:1096C00004C0109283021092820280913B0882FFB4 |
:1096D00002C0109220084091880250918902CA016C |
:1096E00057FD03969C01359527953595279537FFAE |
:1096F00003C0309521953F4F8091440290914502DF |
:1097000082179307B4F4CA0157FF03C0909581955F |
:109710009F4F97FD0396959587959595879590937F |
:109720004502809344028536910544F084E690E03A |
:1097300001C00197909345028093440240918602B4 |
:1097400050918702CA0157FD03969C0135952795D4 |
:109750003595279537FF03C0309521953F4F809170 |
:1097600042029091430282179307B4F4CA0157FF53 |
:1097700003C0909581959F4F97FD0396959587958A |
:109780009595879590934302809342028536910583 |
:1097900044F084E690E001C00197909343028093E7 |
:1097A000420280913F0284FF08C01092450210924D |
:1097B00044021092430210924202ED2DFF27EE0F59 |
:1097C000FF1FE35AF84F40916306242F332780810F |
:1097D00091812817390744F48091950682FF04C0CF |
:1097E00081E08093590213C0ED2DFF27EE0FFF1F7C |
:1097F000E35AF84F842F992720916406821B910920 |
:10980000208131812817390714F4109259024091B0 |
:109810002906E42FFF27EE0FFF1FE35AF84F509160 |
:109820006306852F992722273327281B390B808130 |
:1098300091818217930744F48091950683FF04C0B9 |
:1098400081E08093580216C080915802882391F0DD |
:10985000E42FFF27EE0FFF1FE35AF84F80916406B5 |
:109860009927851B9109208131818217930714F470 |
:1098700010925802EC2DFF27EE0FFF1FE35AF84F0E |
:1098800040916306242F332780819181281739075F |
:1098900044F48091950680FF04C081E080935602D5 |
:1098A00017C080915602882399F0EC2DFF27EE0F08 |
:1098B000FF1FE35AF84F842F992720916406821BDB |
:1098C0009109208131812817390714F4109256022A |
:1098D00040912806E42FFF27EE0FFF1FE35AF84FB1 |
:1098E00050916306852F992722273327281B390B90 |
:1098F000808191818217930744F48091950681FFBE |
:1099000004C081E08093570216C0809157028823DB |
:1099100091F0E42FFF27EE0FFF1FE35AF84F8091DD |
:1099200064069927851B910920813181821793074D |
:1099300014F41092570280915902882319F48091EF |
:109940005802811181E080935A0280915602882347 |
:1099500021F480915702882351F081E080935B02CB |
:1099600010925A02109259021092580202C080932B |
:109970005B0280915A02882321F480915B02882344 |
:1099800069F080916206992729813A8182179307AD |
:1099900014F49A83898381E080938E0280913E0241 |
:1099A00099279C012470307082FF2DC0809147035D |
:1099B00090914803909581959F4F90938902809351 |
:1099C00088028091450390914603909581959F4F21 |
:1099D000909387028093860280917C0190917D0113 |
:1099E000909383028093820280913B088B778B66F1 |
:1099F00080933B0880911E088C7B80931E0888EC26 |
:109A0000809355021EC080913F0284FF1AC030939C |
:109A10008502209384023093890220938802309338 |
:109A20008702209386029AE59093490888E78093FD |
:109A300020089093F90780930F0810925A02109211 |
:109A40005B028091120890911308A0911408B091C4 |
:109A500015082091D2023091D3024091D402509146 |
:109A6000D502820F931FA41FB51F809312089093F5 |
:109A70001308A0931408B093150880911A089091C8 |
:109A80001B08A0911C08B0911D08E090CA02F0903C |
:109A9000CB020091CC021091CD02EB82FC820D83AF |
:109AA0001E838E0D9F1DA01FB11F80931A089093D7 |
:109AB0001B08A0931C08B0931D0880910708909183 |
:109AC0000808A0910908B0910A08E090CE02F09031 |
:109AD000CF020091D0021091D102EF82F88609875F |
:109AE0001A878E0D9F1DA01FB11F809307089093AA |
:109AF0000808A0930908B0930A088091FA0790918A |
:109B0000FB07A091FC07B091FD07E090C602F09022 |
:109B1000C7020091C8021091C902EB86FC860D872E |
:109B20001E878E0D9F1DA01FB11F8093FA07909373 |
:109B3000FB07A093FC07B093FD07F0905B02FF8644 |
:109B4000FF2029F480915A02882309F460C0109202 |
:109B5000C2021092C3021092C4021092C502109267 |
:109B6000BE021092BF021092C0021092C102109267 |
:109B700012081092130810921408109215081092EF |
:109B80001A0810921B0810921C0810921D081092BF |
:109B90000708109208081092090810920A081092FB |
:109BA000FA071092FB071092FC071092FD078091B4 |
:109BB000B2029091B302A091B402B091B502809329 |
:109BC000AE029093AF02A093B002B093B102809125 |
:109BD000AA029091AB02A091AC02B091AD02809329 |
:109BE000A6029093A702A093A802B093A902109294 |
:109BF000EE011092ED0110925F0210925E0210923F |
:109C00006102109260020F85002309F0D0C180919B |
:109C10005A02882309F0CBC18091C7059091C805ED |
:109C2000815092402CF480917702882309F4BFC1BF |
:109C30009090CB08A090430620903F0830904008B9 |
:109C400040904F085090500819140CF0BBC0BB2432 |
:109C5000CC24DD24CA01B901A60195010E94FB7A3A |
:109C600079018A018091940890919508281A390AFF |
:109C7000C101AA2797FDA095BA2FE81AF90A0A0B85 |
:109C80001B0B6B817C818D819E81A60195010E94B9 |
:109C9000FB7A59016A018091960890919708481AB9 |
:109CA000590AC201AA2797FDA095BA2FA81AB90A86 |
:109CB000CA0ADB0A292C332427FC3094432C532C6A |
:109CC000C801B701A20191010E94877A97FF04C0E1 |
:109CD00061507E4F8F4F9F4F3B014C0109E095949F |
:109CE0008794779467940A95D1F7C601B501A201CC |
:109CF00091010E94877A97FF04C061507E4F8F4F79 |
:109D00009F4F5B016C0119E0D594C794B794A79459 |
:109D10001A95D1F7809144029091450281349105C2 |
:109D20003CF4809142029091430281349105D4F039 |
:109D3000D401C30197FE03C00196A11DB11D3C01D2 |
:109D40004D019594879477946794D601C501D7FE09 |
:109D500003C00196A11DB11D5C016D01D594C7948E |
:109D6000B794A7948091CD08282F332727FD3095ED |
:109D7000432F532F261537054805590514F439018B |
:109D80004A01992787FD9095909581959F4FAA2725 |
:109D900097FDA095BA2F681679068A069B0614F4DB |
:109DA0003C014D012A153B054C055D0514F4590194 |
:109DB0006A01A816B906CA06DB060CF0D0C05C0121 |
:109DC0006D01CDC0EA2CFF2400271127CA01B9017B |
:109DD000A80197010E94FB7A39014A01C101AA2713 |
:109DE00097FDA095BA2F681A790A8A0A9B0A6B8197 |
:109DF0007C818D819E81A80197010E94FB7A590187 |
:109E00006A01C201AA2797FDA095BA2FA81AB90A1C |
:109E1000CA0ADB0AD401C30197FE03C00F96A11D35 |
:109E2000B11D3C014D01F4E09594879477946794BB |
:109E3000FA95D1F7D601C501D7FE03C00F96A11D33 |
:109E4000B11D5C016D01E4E0D594C794B794A7946B |
:109E5000EA95D1F7809144029091450281349105B1 |
:109E60003CF4809142029091430281349105A4F028 |
:109E7000C401B30123E030E040E050E00E94FB7AEF |
:109E800039014A01C601B50123E030E040E050E06D |
:109E90000E94FB7A59016A0180912B06E82FFF2767 |
:109EA000EE0FFF1FE35AF84F808191810190F081FE |
:109EB000E02DF7FF03C0F095E195FF4F7A97A4F0EE |
:109EC000C401B30123E030E040E050E00E94FB7A9F |
:109ED00039014A01C601B50123E030E040E050E01D |
:109EE0000E94FB7A59016A0189E18093880121E28D |
:109EF00062167104810491042CF070E2672E712CBB |
:109F0000812C912C30EE63163FEF73063FEF8306F2 |
:109F10003FEF930644F460EE662E6FEF762E6FEF00 |
:109F2000862E6FEF962E41E2A416B104C104D1042F |
:109F30002CF050E2A52EB12CC12CD12C50EEA51640 |
:109F40005FEFB5065FEFC5065FEFD50644F440EE60 |
:109F5000A42E4FEFB42E4FEFC42E4FEFD42E80918E |
:109F6000B2029091B302A091B402B091B5028619E9 |
:109F70009709A809B9098093B2029093B302A093FC |
:109F8000B402B093B5028091AA029091AB02A09165 |
:109F9000AC02B091AD028A199B09AC09BD0980934E |
:109FA000AA029093AB02A093AC02B093AD02809151 |
:109FB000ED019091EE018F3F910509F008F4C4C5C1 |
:109FC0006F85662309F04EC580915A02882309F0F7 |
:109FD00049C580918E02882309F044C570916B06B3 |
:109FE000788B772309F43EC580911208909113086D |
:109FF000A0911408B0911508B7FF04C081509F4F7D |
:10A00000AF4FBF4FE92EFA2E0B2F112707FD1A95E0 |
:10A01000E0921208F09213080093140810931508A8 |
:10A0200080911A0890911B08A0911C08B0911D08FE |
:10A03000B7FF04C081509F4FAF4FBF4F892F9A2F5A |
:10A04000AB2FBB27A7FDBA95898B9A8BAB8BBC8BAB |
:10A0500080931A0890931B08A0931C08B0931D08C6 |
:10A0600080914306A82EBB24CC24DD242091C2027B |
:10A070003091C3024091C4025091C502C601B5019E |
:10A080000E94877A97FF04C061507F4F8F4F9F4F88 |
:10A09000672E782E892E992487FC9A946092C202AA |
:10A0A0007092C3028092C4029092C5022091BE02B7 |
:10A0B0003091BF024091C0025091C102C601B5016A |
:10A0C0000E94877A97FF04C061507F4F8F4F9F4F48 |
:10A0D000272E382E492E552447FC5A942092BE0232 |
:10A0E0003092BF024092C0025092C1028091BA02E7 |
:10A0F0009091BB02A091BC02B091BD02B7FF04C019 |
:10A1000081509F4FAF4FBF4F892F9A2FAB2FBB2747 |
:10A11000A7FDBA958093BA029093BB02A093BC02AC |
:10A12000B093BD02D801C70186199709A809B909DA |
:10A130008093100390931103A0931203B093130321 |
:10A1400020916A06E22EFF2400271127BC01CD01D1 |
:10A15000A80197010E94FB7A59016A0120931E030E |
:10A1600030931F03409320035093210389899A89D8 |
:10A17000AB89BC8982199309A409B509809314039A |
:10A1800090931503A0931603B0931703BC01CD0160 |
:10A19000A80197010E94FB7A2093220330932303A6 |
:10A1A0004093240350932503D601C501D7FE04C074 |
:10A1B00081509F4FAF4FBF4F892F9A2FAB2FBB2797 |
:10A1C000A7FDBA9590935F0280935E0257FF04C08B |
:10A1D00021503F4F4F4F5F4FBB2757FDBA95A52FDB |
:10A1E000942F832F909361028093600280914402A8 |
:10A1F0009091450281349105DCF480914202909166 |
:10A20000430281349105A4F480912B06E82FFF27A7 |
:10A21000EE0FFF1FE35AF84F808191810190F0818A |
:10A22000E02DF7FF03C0F095E195FF4F7A97E4F03A |
:10A230008091CB088F3FC1F480915E0290915F02C4 |
:10A2400097FD01969595879590935F0280935E02A6 |
:10A25000809160029091610297FD01969595879596 |
:10A2600090936102809360028091070890910808A2 |
:10A27000A0910908B0910A08B7FF04C081509F4F10 |
:10A28000AF4FBF4F892F9A2FAB2FBB27A7FDBA9592 |
:10A290008093070890930808A0930908B0930A08D0 |
:10A2A0008091FA079091FB07A091FC07B091FD0700 |
:10A2B000B7FF04C081509F4FAF4FBF4F892F9A2FD8 |
:10A2C000AB2FBB27A7FDBA958093FA079093FB07A6 |
:10A2D000A093FC07B093FD078091D2029091D30226 |
:10A2E000A091D402B091D5022F81388549855A8535 |
:10A2F000281B390B4A0B5B0B20930803309309038F |
:10A3000040930A0350930B038091CA029091CB02B1 |
:10A31000A091CC02B091CD02EB84FC840D851E850A |
:10A32000E81AF90A0A0B1B0BE0920C03F0920D03DA |
:10A3300000930E0310930F03209310033093110327 |
:10A340004093120350931303E0921403F092150309 |
:10A3500000931603109317038091AE029091AF0201 |
:10A36000A091B002B091B102821B930BA40BB50B6C |
:10A370008093AE029093AF02A093B002B093B1026B |
:10A380008091A6029091A702A091A802B091A90283 |
:10A390008E199F09A00BB10B8093A6029093A70280 |
:10A3A000A093A802B093A90288898823E1F02091A4 |
:10A3B0008C0230918D02213831054CF08091E402FD |
:10A3C0009091E50201969093E5028093E402205873 |
:10A3D0003F4F4CF48091E4029091E50201979093F5 |
:10A3E000E5028093E40210928D0210928C0281E0CB |
:10A3F00090E090932B0380932A03E0901003F09059 |
:10A4000011030091120310911303D801C70117FF24 |
:10A4100007C088279927DC018E199F09A00BB10B73 |
:10A4200081509240A040B04034F084E090E090939E |
:10A430002B0380932A038091300390913103A091E4 |
:10A440003203B091330320911208309113084091E8 |
:10A45000140850911508821B930BA40BB50B815E59 |
:10A46000914BAF4FBF4F8F539C49A040B04028F055 |
:10A470008091CC0889310CF4FFC021E0E21620E184 |
:10A48000F20620E0020720E012070CF473C080916E |
:10A490002C03882309F46AC0D801C70117FF07C03D |
:10A4A00088279927DC018E199F09A00BB10B9C010D |
:10A4B000AD01B7FF04C021503E4F4F4F5F4FF9E051 |
:10A4C0005595479537952795FA95D1F780912A03A9 |
:10A4D00090912B03820F931F90932B0380932A0359 |
:10A4E000D801C70117FF03C00796A11DB11DE3E006 |
:10A4F000B595A79597958795EA95D1F780931E0313 |
:10A5000090931F03A0932003B09321038958934194 |
:10A51000A040B04064F088E893E1A0E0B0E0809310 |
:10A520001E0390931F03A0932003B0932103209157 |
:10A530001E0330911F03409120035091210357FFC8 |
:10A5400004C021503F4F4F4F5F4F232F342F452FD3 |
:10A55000552747FD5A9580915E0290915F02820FC8 |
:10A56000931F90935F0280935E0206C081E0809308 |
:10A570002C0302C010922C0340E0E41640EFF406D6 |
:10A580004FEF04074FEF14070CF073C080912D03B9 |
:10A59000882309F46AC0D801C70117FF07C08827BC |
:10A5A0009927DC018E199F09A00BB10B9C01AD010D |
:10A5B000B7FF04C021503E4F4F4F5F4F69E05595A4 |
:10A5C0004795379527956A95D1F780912A03909101 |
:10A5D0002B03820F931F90932B0380932A03D801A0 |
:10A5E000C70117FF03C00796A11DB11D23E0B59554 |
:10A5F000A795979587952A95D1F780931E039093F9 |
:10A600001F03A0932003B093210388579C4EAF4FA4 |
:10A61000BF4F64F488E79CEEAFEFBFEF80931E035B |
:10A6200090931F03A0932003B093210320911E0356 |
:10A6300030911F03409120035091210357FF04C024 |
:10A6400021503F4F4F4F5F4F232F342F452F55271A |
:10A6500047FD5A9580915E0290915F02820F931F91 |
:10A6600090935F0280935E0211C081E080932D037E |
:10A670000DC010922D030AC010922B0310922A03D2 |
:10A6800084E690E090938701809386016889262F65 |
:10A69000332780912A0390912B032817390724F43C |
:10A6A00030932B0320932A031091CC08112379F0C7 |
:10A6B000212F332727FD309580912A0390912B037A |
:10A6C0002817390724F430932B0320932A03409151 |
:10A6D00010035091110360911203709113034138DC |
:10A6E00051056105710574F08091E8029091E902CD |
:10A6F00020912A0330912B03820F931F9093E9023C |
:10A700008093E80240585F4F6F4F7F4F74F4809101 |
:10A71000E8029091E90220912A0330912B03821BD9 |
:10A72000930B9093E9028093E80281E090E090938C |
:10A730002B0380932A03C0901403D0901503E0905C |
:10A740001603F0901703D701C601F7FE07C088274C |
:10A750009927DC018C199D09AE09BF0981509240EF |
:10A76000A040B04034F084E090E090932B038093BD |
:10A770002A038091340390913503A0913603B09160 |
:10A78000370320911A0830911B0840911C08509102 |
:10A790001D08821B930BA40BB50B815E914BAF4F31 |
:10A7A000BF4F8F539C49A040B04018F019310CF4B2 |
:10A7B000FFC001E0C01600E1D00600E0E00600E0C6 |
:10A7C000F0060CF473C080912E03882309F46AC04C |
:10A7D000D701C601F7FE07C088279927DC018C192D |
:10A7E0009D09AE09BF099C01AD01B7FF04C021500E |
:10A7F0003E4F4F4F5F4F09E0559547953795279549 |
:10A800000A95D1F780912A0390912B03820F931F11 |
:10A8100090932B0380932A03D701C601F7FE03C050 |
:10A820000796A11DB11D13E0B595A795979587953E |
:10A830001A95D1F78093220390932303A0932403C6 |
:10A84000B093250389589341A040B04064F088E854 |
:10A8500093E1A0E0B0E08093220390932303A093C0 |
:10A860002403B093250320912203309123034091C8 |
:10A8700024035091250357FF04C021503F4F4F4FF1 |
:10A880005F4F232F342F452F552747FD5A95809131 |
:10A89000600290916102820F931F909361028093F6 |
:10A8A000600206C081E080932E0302C010922E0346 |
:10A8B00020E0C21620EFD2062FEFE2062FEFF206BD |
:10A8C0000CF073C080912F03882309F46AC0D7016C |
:10A8D000C601F7FE07C088279927DC018C199D095E |
:10A8E000AE09BF099C01AD01B7FF04C021503E4F26 |
:10A8F0004F4F5F4FE9E05595479537952795EA9576 |
:10A90000D1F780912A0390912B03820F931F90938C |
:10A910002B0380932A03D701C601F7FE03C00796D5 |
:10A92000A11DB11D73E0B595A795979587957A956B |
:10A93000D1F78093220390932303A0932403B09331 |
:10A94000250388579C4EAF4FBF4F64F488E79CEEB9 |
:10A95000AFEFBFEF8093220390932303A0932403D0 |
:10A96000B0932503209122033091230340912403C7 |
:10A970005091250357FF04C021503F4F4F4F5F4F69 |
:10A98000232F342F452F552747FD5A95809160027C |
:10A9900090916102820F931F9093610280936002F5 |
:10A9A00011C081E080932F030DC010922F030AC0C5 |
:10A9B00010922B0310922A0384E690E09093870173 |
:10A9C000809386014889242F332780912A03909110 |
:10A9D0002B032817390724F430932B0320932A03E1 |
:10A9E0008091CC08882379F0282F332727FD3095D4 |
:10A9F00080912A0390912B032817390724F4309370 |
:10AA00002B0320932A034091140350911503609166 |
:10AA1000160370911703413851056105710574F0F3 |
:10AA20008091E6029091E70220912A0330912B0356 |
:10AA3000820F931F9093E7028093E60240585F4F86 |
:10AA40006F4F7F4FCCF48091E6029091E702209106 |
:10AA50002A0330912B03821B930B9093E702809380 |
:10AA6000E6020AC0109261021092600210925F0228 |
:10AA700010925E0210928E0280912008882341F489 |
:10AA8000109261021092600210925F0210925E02B8 |
:10AA90008091120890911308A0911408B0911508A4 |
:10AAA0008093300390933103A0933203B093330328 |
:10AAB00080911A0890911B08A0911C08B0911D0864 |
:10AAC0008093340390933503A0933603B0933703F8 |
:10AAD0001092C2021092C3021092C4021092C502D8 |
:10AAE0001092BE021092BF021092C0021092C102D8 |
:10AAF0001092BA021092BB021092BC021092BD02D8 |
:10AB0000109212081092130810921408109215084F |
:10AB100010921A0810921B0810921C0810921D081F |
:10AB200010920708109208081092090810920A085B |
:10AB30001092FA071092FB071092FC071092FD0783 |
:10AB40001092EE011092ED01E0908402F0908502E7 |
:10AB5000C701F7FE04C0882799278E199F0904971B |
:10AB60003CF080913B0884FD03C082E38093620245 |
:10AB700010914006A12EBB24CC24DD24B7018827E8 |
:10AB800077FD8095982F9701F7FE04C02227332781 |
:10AB90002E193F09442737FD4095542F0E94877A8C |
:10ABA0009B01AC01C601B5010E94877A97FF04C0E2 |
:10ABB00061507E4F8F4F9F4F59E0959587957795C0 |
:10ABC00067955A95D1F79B01812F99278E9DD001CA |
:10ABD0008F9DB00D9E9DB00D1124CD01B7FD039644 |
:10ABE0009595879595958795280F391F80913A02FD |
:10ABF00090913B028150924010F020E030E0809133 |
:10AC0000640290916502280F391F442737FD409553 |
:10AC1000542F20930403309305034093060350936D |
:10AC200007038091A2029091A302A091A402B09187 |
:10AC3000A502821B930BA40BB50B8093A2029093E9 |
:10AC4000A302A093A402B093A5028155934CA04007 |
:10AC5000B04064F080E593ECA0E0B0E08093A20205 |
:10AC60009093A302A093A402B093A5028091A202A4 |
:10AC70009091A302A091A402B091A502805B9C4395 |
:10AC8000AF4FBF4F64F480EB9CE3AFEFBFEF809317 |
:10AC9000A2029093A302A093A402B093A5020091F4 |
:10ACA0008A0110918B0117FDFCC080913B0883FF46 |
:10ACB000F8C080918901815080938901882309F02F |
:10ACC000F4C08DE0809389018091D2029091D302EB |
:10ACD000A091D402B091D502B7FF04C081509E4F1D |
:10ACE000AF4FBF4F39E0B595A795979587953A95A2 |
:10ACF000D1F77C0197FF04C0F094E194F108F3943C |
:10AD00008091CA029091CB02A091CC02B091CD0269 |
:10AD1000B7FF04C081509E4FAF4FBF4F29E0B5959C |
:10AD2000A795979587952A95D1F79C0197FF03C022 |
:10AD3000309521953F4FE216F3060CF47901B701E7 |
:10AD4000F7FE02C0695F7F4F2B0183E05594479463 |
:10AD50008A95E1F722E030E0420E531E60904B08E6 |
:10AD600070904C0880904D0890904E0820913C01C6 |
:10AD700030913D0140913E0150913F01C401B3012A |
:10AD80000E94FB7A59016A013093F8072093F70774 |
:10AD9000021B130BC801845E9D4F68E671E00E94A0 |
:10ADA000C67A9C01245B3040809186019091870196 |
:10ADB000009731F0019790938701809386011BC023 |
:10ADC00049E1E416F104BCF480918C0290918D026B |
:10ADD000820F931F90938D0280938C028091620268 |
:10ADE000882349F0815080936202882321F4B09235 |
:10ADF0009102A09290028091860190918701892B07 |
:10AE0000F9F4809188019927289FB001299F700D3E |
:10AE1000389F700D1124CB01B2010E94C67ACB017C |
:10AE2000AA2797FDA095BA2F680E791E8A1E9B1E31 |
:10AE300060924B0870924C0880924D0890924E0898 |
:10AE400080916202882369F580919002909191022D |
:10AE50002091F7073091F807821B930B845E9D4F7A |
:10AE600068E671E00E94C67A9C01245B30408091C4 |
:10AE7000730186959927289FD001299FB00D389F8F |
:10AE8000B00D11249D01B7FF02C0215F3F4F04E0C8 |
:10AE9000359527950A95E1F7309365022093640272 |
:10AEA00004C0109265021092640280918E02882381 |
:10AEB00081F01092960210929702109298021092CE |
:10AEC000990210929A0210929B0210929C02109288 |
:10AED0009D02F0905B02FF20F1F480912008282F62 |
:10AEE0003327442755278091D2029091D302A09115 |
:10AEF000D402B091D502BC01CD010E94877ADC0159 |
:10AF0000CB01BC01CD0128EF3AE240E050E00E94C5 |
:10AF1000FB7A390102C066247724E0905A02EE20C1 |
:10AF2000F1F480912008282F33274427552780915A |
:10AF3000CA029091CB02A091CC02B091CD02BC018B |
:10AF4000CD010E94877ADC01CB01BC01CD0128EF45 |
:10AF50003AE240E050E00E94FB7A290102C044241A |
:10AF600055248091F4079091F507893C91051CF0D8 |
:10AF700088EC90E005C088539F4F34F488E39FEF3E |
:10AF80009093F5078093F4078091FF079091000854 |
:10AF9000893C91051CF088EC90E005C088539F4FD8 |
:10AFA00034F488E39FEF909300088093FF0780912B |
:10AFB000010890910208AA2797FDA095BA2F209129 |
:10AFC0004908A22EBB24CC24DD24BC01CD01A6015E |
:10AFD00095010E94877A9B01AC018091F4079091C2 |
:10AFE000F507AA2797FDA095BA2F17E0880F991F9C |
:10AFF000AA1FBB1F1A95D1F7280F391F4A1F5B1FC5 |
:10B0000057FF04C0215C3F4F4F4F5F4FA6E055955F |
:10B01000479537952795AA95D1F78301020F131FFE |
:10B0200010930208009301088091F2079091F307B2 |
:10B03000AA2797FDA095BA2FBC01CD01A6019501C5 |
:10B040000E94877A9B01AC018091FF0790910008D4 |
:10B05000AA2797FDA095BA2FF7E0880F991FAA1F7E |
:10B06000BB1FFA95D1F7280F391F4A1F5B1F57FFE7 |
:10B0700004C0215C3F4F4F4F5F4FE6E05595479529 |
:10B0800037952795EA95D1F74201820E931E90924B |
:10B09000F3078092F2078091440890914508880F49 |
:10B0A000991FAA2797FDA095BA2F2091F90733275A |
:10B0B00044275527BC01CD010E94877A5B016C01B2 |
:10B0C00097FF08C02FE330E040E050E0A20EB31E2F |
:10B0D000C41ED51E76E0D594C794B794A7947A95EC |
:10B0E000D1F780910F08282F3327442755278091C7 |
:10B0F000B6029091B702A091B802B091B902BC011A |
:10B10000CD010E94877ADC01CB01BC01CD0120EF8B |
:10B1100035E540E050E00E94FB7AB501620F731FF5 |
:10B1200070934508609344080150104134F080E06A |
:10B1300090E190930208809301088091010890911A |
:10B1400002088050904F34F480E090EF9093020812 |
:10B150008093010851E0851650E1950634F080E0B7 |
:10B1600090E19093F3078093F2078091F20790911A |
:10B17000F3078050904F34F480E090EF9093F30702 |
:10B180008093F2076150704134F080E090E1909339 |
:10B190004508809344088091440890914508805068 |
:10B1A000904F34F480E090EF9093450880934408EA |
:10B1B00080910101482F5527809120019091210114 |
:10B1C0004817590794F420912001309121010981F9 |
:10B1D0001A81049FC001059F900D149F900D1124AA |
:10B1E000B9010E94B27A7A83698329813A81220F58 |
:10B1F000331F220F331F3A83298340913B0840FDC0 |
:10B2000002C00C945961EE2011F00C945961FF209A |
:10B2100011F00C94596180919C0399278F7790705D |
:10B22000009711F00C9459614C012091EA02309181 |
:10B23000EB022115310509F03FC080911601909174 |
:10B2400017018959934058F087B5853F20F48091C4 |
:10B25000F101815011C081E0809343034EC0809181 |
:10B260001601909117018436910508F587B58B304A |
:10B27000D0F08091F1018F5F8093F1019AE0890213 |
:10B28000900111248091D305821B87BD8CE291E04F |
:10B290009093DE018093DD018EE591E09093EB02C7 |
:10B2A0008093EA022AC081E08093420326C0F09294 |
:10B2B0004203F092430321C09093F0018093EF0189 |
:10B2C0008091720290917302A0917402B091750204 |
:10B2D00054E0880F991FAA1FBB1F5A95D1F780937E |
:10B2E000F2019093F301A093F401B093F501215082 |
:10B2F00030403093EB022093EA022091550241FF47 |
:10B3000025C02233E8F480918C01815080938C0118 |
:10B310008F3FE1F510928F0280917202909173023B |
:10B32000A0917402B091750280936E0290936F02A7 |
:10B33000A0937002B093710281E080938C0126C0CB |
:10B34000273420F188EC80938C011DC0809140014E |
:10B3500090914101820F911D209139063327829FE0 |
:10B36000A001839F500D929F500D1124CA01AA275E |
:10B3700097FDA095BA2F80936E0290936F02A093D1 |
:10B380007002B093710281E080938F028091D202AB |
:10B390009091D302A091D402B091D502E0903C01EB |
:10B3A000F0903D0100913E0110913F01BC01CD01A3 |
:10B3B000A80197010E94FB7A59016A018091CA0293 |
:10B3C0009091CB02A091CC02B091CD02BC01CD01F5 |
:10B3D000A80197010E94FB7AB901C5010E94B078CB |
:10B3E00090930C0880930B08CC9734F08CE390E09A |
:10B3F00090930C0880930B0880910B0890910C0897 |
:10B400000E949B6D90930C0880930B0880E28093C0 |
:10B410003B0110926D0210926C0280918F02882382 |
:10B4200009F4ABC580913F0299279C0120713070CF |
:10B4300084FDA3C580913E02826080933E0270919C |
:10B440001E08872F992741E0C42ED12CC822D9226B |
:10B4500080FD04C080913B0881FD10C0E980FA8026 |
:10B46000309339032093380330936D0220936C029C |
:10B4700080913F02806C80933F02DFC280913F0247 |
:10B4800081FFAEC200917C0110917D01C8010F9631 |
:10B49000A0908202B09083028A159B050CF06EC0CA |
:10B4A00080914203882309F069C080913A0390910A |
:10B4B0003B03459784F08091E9019091EA01A091C6 |
:10B4C000EB01B091EC0180936E0290936F02A09318 |
:10B4D0007002B093710280913F0287FF15C0809186 |
:10B4E0003F028F7780933F028091E9019091EA01BA |
:10B4F000A091EB01B091EC0180936E0290936F02EA |
:10B50000A0937002B093710280913F028064809397 |
:10B510003F02E090FE07EE20F1F080916E029091E4 |
:10B520006F02A0917002B0917102BC01CD0124E6BE |
:10B5300030E040E050E00E94FB7A8E2D9927AA2748 |
:10B54000BB2782179307A407B5072CF4D0926D028E |
:10B55000C0926C0210C0C501801B910B0F9797FF22 |
:10B5600003C0909581959F4F90936D0280936C02DC |
:10B570008BE280933B011092660234C1C8010F97A1 |
:10B58000A816B906C4F5209143032223A1F58091A2 |
:10B590003F0286FF15C080913F028F7B80933F0260 |
:10B5A0008091E9019091EA01A091EB01B091EC0149 |
:10B5B00080936E0290936F02A0937002B093710219 |
:10B5C00080913F02806880933F02C501801B910BF0 |
:10B5D0000F9697FF03C0909581959F4F9095819509 |
:10B5E0009F4F90936D0280936C028DE280933B019C |
:10B5F00020936602F7C08DE380933B016091670260 |
:10B60000662371F1209168023091690240916A02CB |
:10B6100050916B0280916E0290916F02A091700226 |
:10B62000B091710282179307A407B507CCF48091FB |
:10B630003F02806480933F02862F992790936D028A |
:10B6400080936C028AE0809366028EE580933B01D2 |
:10B6500080913F0287FFC6C080913F028F7733C041 |
:10B66000662309F443C02091680230916902409139 |
:10B670006A0250916B0280916E0290916F02A091CC |
:10B680007002B0917102281739074A075B0774F5F9 |
:10B6900080913F02806880933F02862F9927909582 |
:10B6A00081959F4F90936D0280936C0286EF8093FB |
:10B6B000660286E780933B0180913F0286FF92C03D |
:10B6C00080913F028F7B80933F028091E9019091AE |
:10B6D000EA01A091EB01B091EC0180936E0290938E |
:10B6E0006F02A0937002B09371027CC080913F0200 |
:10B6F000807C09F477C080916602882309F04CC0F1 |
:10B700008091E9019091EA01A091EB01B091EC01E7 |
:10B71000885C9040A040B04020916E0230916F0252 |
:10B72000409170025091710282179307A407B507E8 |
:10B730006CF08091E9019091EA01A091EB01B09148 |
:10B74000EC01885C9040A040B0401DC08091E901B0 |
:10B750009091EA01A091EB01B091EC0188539F4FC9 |
:10B76000AF4FBF4F281739074A075B07BCF08091DE |
:10B77000E9019091EA01A091EB01B091EC018853AD |
:10B780009F4FAF4FBF4F80936E0290936F02A09375 |
:10B790007002B093710202C01092660280913F0263 |
:10B7A0008F7380933F02109239031092380371FF18 |
:10B7B00006C084EF91E09093DE018093DD018091DB |
:10B7C0007602882379F48091720290917302A0919D |
:10B7D0007402B0917502C397A105B1051CF081E018 |
:10B7E00080937602609138037091390380916C02E6 |
:10B7F00090916D02680F791F70933903609338033D |
:10B80000CB0177FF04C088279927861B970B855F9C |
:10B8100091400CF4CEC040916602442389F180919E |
:10B8200068029091690220916E0230916F02821B32 |
:10B83000930B0996439748F48091680290916902AE |
:10B84000A0916A02B0916B0212C0242F332727FD0A |
:10B850003095432F532F80916E0290916F02A091EB |
:10B860007002B0917102820F931FA41FB51F8093C5 |
:10B870006E0290936F02A0937002B093710224C085 |
:10B880008091390620916E0230916F0240917002D2 |
:10B89000509171021616170644F463E00E94A67ACE |
:10B8A000280F311D411D511D07C063E00E94A67A7B |
:10B8B000281B31094109510920936E0230936F0210 |
:10B8C0004093700250937102109239031092380322 |
:10B8D000E0907202F0907302009174021091750270 |
:10B8E000D801C70180509440A040B04020916E0222 |
:10B8F00030916F024091700250917102821793074C |
:10B90000A407B5075CF4D801C70180509C4FAF4F26 |
:10B91000BF4F281739074A075B0744F080936E0230 |
:10B9200090936F02A0937002B093710280911E08F1 |
:10B9300081FF06C084E690E09093DE018093DD01F4 |
:10B9400080913D068823A9F580916702882389F5B7 |
:10B9500040915C0250915D0257FF02C04D5F5F4F06 |
:10B9600055954795559547958091200190912101D6 |
:10B97000209101013327489FB001499F700D589FC6 |
:10B98000700D1124CB01B9010E94C67A70937D011C |
:10B9900060937C01663471051CF486E490E005C078 |
:10B9A0006739710534F086E990E090937D018093CA |
:10B9B0007C018091EA029091EB02892BD1F1809178 |
:10B9C000E9019091EA01A091EB01B091EC01809323 |
:10B9D0006E0290936F02A0937002B093710229C01F |
:10B9E0008091720290917302A0917402B0917502DD |
:10B9F00080599140A040B04080936E0290936F02B6 |
:10BA0000A0937002B093710280913D06882311F0DB |
:10BA1000992702C088E790E090937D0180937C0194 |
:10BA200089819A8190935D0280935C028EE280937B |
:10BA30003B01E0905C02F0905D028091E901909101 |
:10BA4000EA01A091EB01B091EC0120916E023091DE |
:10BA50006F024091700250917102281739074A070E |
:10BA60005B0724F080911E0880FDD3C280913702CD |
:10BA7000882309F0CEC28091EA029091EB02892BD3 |
:10BA800049F0E0905C02F0905D0210923B0310924E |
:10BA90003A03E1C08091E9019091EA01A091EB01A4 |
:10BAA000B091EC01821B930BA40BB50B80930803A0 |
:10BAB00090930903A0930A03B0930B038230E0E84C |
:10BAC0009E07EFEFAE07EFEFBE072CF481E090E8A2 |
:10BAD000AFEFBFEF09C08F5F9F47A040B04064F059 |
:10BAE0008FEF9FE7A0E0B0E08093080390930903F5 |
:10BAF000A0930A03B0930B0380910803909109036C |
:10BB000090933B0380933A0380917501282F33274C |
:10BB1000442755278091080390910903A0910A03B7 |
:10BB2000B0910B03BC01CD010E94877A97FF04C03E |
:10BB3000615E7F4F8F4F9F4F25E095958795779555 |
:10BB400067952A95D1F76093080370930903809352 |
:10BB50000A0390930B0365300EEF70070FEF800719 |
:10BB60000FEF90072CF484E09EEFAFEFBFEF09C01A |
:10BB7000605074408040904064F080E094E0A0E029 |
:10BB8000B0E08093080390930903A0930A03B09355 |
:10BB90000B0380900803909009032091EF013091EE |
:10BBA000F00137FF02C0295F3F4F03E0359527952D |
:10BBB0000A95E1F74FEF223834071CF421E83FEFF4 |
:10BBC00005C02038310514F020E830E0C901AA276B |
:10BBD00097FDA095BA2F209176013327442755274A |
:10BBE000BC01CD010E94877A97FF04C06D5F7F4F33 |
:10BBF0008F4F9F4F12E095958795779567951A958A |
:10BC0000D1F79B015FEF613075071CF420E03FEF37 |
:10BC100006C06F3F710519F014F020E031E080910B |
:10BC20003F02807C49F0C90137FD03969C013595A0 |
:10BC30002795359527950DC080911E0880FF09C076 |
:10BC4000C90137FD07969C01A3E035952795AA9574 |
:10BC5000E1F7820E931E20917401222309F454C04F |
:10BC6000609192027091930280919402909195025A |
:10BC700097FF04C061587F4F8F4F9F4FF7E0959516 |
:10BC8000879577956795FA95D1F7332744275527F8 |
:10BC90000E94877A97FF04C0615E7F4F8F4F9F4F4E |
:10BCA000E5E09595879577956795EA95D1F7609347 |
:10BCB00008037093090380930A0390930B03613880 |
:10BCC000AFEF7A07AFEF8A07AFEF9A072CF480E85F |
:10BCD0009FEFAFEFBFEF0AC06F3F71058105910580 |
:10BCE00069F064F080E091E0A0E0B0E080930803A8 |
:10BCF00090930903A0930A03B0930B038091080368 |
:10BD000090910903880E991E80917201282F332784 |
:10BD10008091CF08992787FD9095289FF001299F52 |
:10BD2000F00D389FF00D11249F01F7FF02C021583C |
:10BD30003F4F220F232F221F330BFFEF21383F07E6 |
:10BD40001CF420E83FEF06C02F3F310519F014F036 |
:10BD500020E031E0280D391DC901AA2797FDA095E3 |
:10BD6000BA2F00915C0210915D029801442737FDC3 |
:10BD70004095542FBC01CD010E94877A97FF04C0E3 |
:10BD800061507E4F8F4F9F4F59E0959587957795DE |
:10BD900067955A95D1F7E61AF70A80916C0290914F |
:10BDA0006D02892B09F064C0101611060CF060C0FA |
:10BDB00020913A0330913B03C90137FF03C030950E |
:10BDC00021953F4F2D33310540F480918A029091A7 |
:10BDD0008B028E159F0574F526C02C53304045E02C |
:10BDE000369527954A95E1F72031310510F02FE07F |
:10BDF00030E040918A0250918B0218161906E4F443 |
:10BE000080E190E0821B930B489F9001499F300D89 |
:10BE1000589F300D1124B4E036952795BA95E1F777 |
:10BE20002E153F0520F580917A0190917B01E8164F |
:10BE3000F906F4F07C011CC0205F3F4F80917A012D |
:10BE400090917B01829FB001839F700D929F700D36 |
:10BE500011249B01A4E036952795AA95E1F74E158C |
:10BE60005F0514F07A0104C0E216F30608F07901C8 |
:10BE7000C701AA2797FDA095BA2FFDE0880F991F4B |
:10BE8000AA1FBB1FFA95D1F720910B0830910C081F |
:10BE9000442737FD4095542FBC01CD010E94FB7A09 |
:10BEA00020930C0330930D0340930E0350930F0324 |
:10BEB000E0900C03F0900D0380913C0390913D03C2 |
:10BEC0009C01220F331F280F391F2E0D3F1D37FFF6 |
:10BED00002C02D5F3F4FA901559547955595479550 |
:10BEE00050933D0340933C0380913506282F332720 |
:10BEF000220F331F220F331F241735076CF4809154 |
:10BF00004308282F3327220F331F220F331F2055BA |
:10BF100030404217530724F030933D0320933C03F5 |
:10BF200080911E0880FF14C080913C0390913D03D6 |
:10BF3000A981BA818A179B0724F0B0933D03A0938F |
:10BF40003C03E0913C03F0913D03FA83E98361C037 |
:10BF500029813A81201B310B37FF02C02D5F3F4FF3 |
:10BF60003595279535952795E0903C03F0903D0356 |
:10BF7000E20EF31EFA82E9824CC080913D068823CE |
:10BF800001F560915C0270915D0277FF02C06D5F08 |
:10BF90007F4F7595679575956795409120015091F4 |
:10BFA000210180910101282F3327649FC001659FE3 |
:10BFB000900D749F900D1124B9010E94C67ACB0197 |
:10BFC00001C0992790937D0180937C0180917C0131 |
:10BFD00090917D01873491051CF486E490E005C0C2 |
:10BFE0008639910534F086E990E090937D01809345 |
:10BFF0007C0109811A8110933D0300933C038091D9 |
:10C000003F02806C80933F0280913E028D7F80933F |
:10C010003E0280913F0299279C012270307081FF7F |
:10C0200039C180913E0390913F03A0914003B091AC |
:10C0300041030097A105B10521F08091760281307E |
:10C04000B9F480915C0290915D02AA2797FDA095BA |
:10C05000BA2F1EE0880F991FAA1FBB1F1A95D1F790 |
:10C0600080933E0390933F03A0934003B09341031A |
:10C0700080917602813019F482E0809376022981E2 |
:10C080003A8179010027F7FC0095102F80910B0869 |
:10C0900090910C089C01442737FD4095542FC8010E |
:10C0A000B7010E94877ADC01CB0180930C03909347 |
:10C0B0000D03A0930E03B0930F03B7FF04C081508C |
:10C0C000904EAF4FBF4F7C018D01ADE015950795A8 |
:10C0D000F794E794AA95D1F7E0920C03F0920D0340 |
:10C0E00000930E0310930F03609140027091410280 |
:10C0F0003FE0603A730750F580913E0390913F0313 |
:10C10000A0914003B09141039C01AD01FAE0569526 |
:10C11000479537952795FA95D1F7821B930BA40B7A |
:10C12000B50BA8019701E4E0220F331F441F551FF0 |
:10C13000EA95D1F7820F931FA41FB51F80933E038A |
:10C1400090933F03A0934003B093410360547F4119 |
:10C1500018F580913E0390913F03A0914003B09168 |
:10C1600041039C01AD016CE05695479537952795A5 |
:10C170006A95D1F7821B930BA40BB50BA80197010D |
:10C18000F2E0220F331F441F551FFA95D1F7820F9B |
:10C19000931FA41FB51F41C08091EF019091F00142 |
:10C1A0008091EF019091F00197FF03C090958195E8 |
:10C1B0009F4F84369105CCF58091E9019091EA0179 |
:10C1C000A091EB01B091EC019C0180916E029091E5 |
:10C1D0006F02281B390B37FF03C0309521953F4F65 |
:10C1E0002F3F310509F00CF580913E0390913F03FC |
:10C1F000A0914003B09141039C01AD01EEE0569542 |
:10C20000479537952795EA95D1F7821B930BA40B99 |
:10C21000B50B8E0D9F1DA01FB11F80933E03909301 |
:10C220003F03A0934003B093410380913E0390915C |
:10C230003F03A0914003B09141037EE0B695A795DE |
:10C24000979587957A95D1F790935D0280935C02DC |
:10C2500040913B06442399F055279C01BA010E9466 |
:10C26000C67AC901861B970B90938B0280938A0232 |
:10C27000260F371F30937B0120937A011FC0109245 |
:10C280008B0210928A028FEF93E090937B01809350 |
:10C290007A0114C01092760210923E0310923F036E |
:10C2A000109240031092410330935D0220935C0290 |
:10C2B00005C080913F02806C80933F0280915203C1 |
:10C2C00081FF37C089819A8197FD0396959587955F |
:10C2D0009595879520913C0230913D0228173907AA |
:10C2E00060F480915C0290915D02892B31F0220F05 |
:10C2F000331F220F331F3A8329838091E9019091E4 |
:10C30000EA01A091EB01B091EC0180936E02909351 |
:10C310006F02A0937002B093710288E99AE3909340 |
:10C32000DE018093DD0180E09EE090930B0180931D |
:10C330000A0120910608822F9927880F991F880FDC |
:10C34000991F889669817A818617970714F09A83D6 |
:10C350008983709143087D8B872F9927880F991FB8 |
:10C36000880F991F80559040A981BA818A179B0731 |
:10C3700014F49A83898380912702882341F4809161 |
:10C38000D6088F3F21F4809156038823E9F08091ED |
:10C390004002909141020297C097B0F4E981FA817E |
:10C3A0001E161F068CF481E090E09093410280936A |
:10C3B0004002E22EFF24EE0CFF1CEE0CFF1C870156 |
:10C3C000085D1F4F1A83098329813A8130939105B3 |
:10C3D000209390058091040390910503A09106039A |
:10C3E000B091070312E0880F991FAA1FBB1F1A956F |
:10C3F000D1F70091440810914508081B190B213A08 |
:10C4000031058CF0C90137FD019695958795801708 |
:10C4100091070CF48C01909581959F4F081719078F |
:10C420006CF48C010BC00135110514F000E510E02F |
:10C430003FEF003B130714F400EB1FEF4D89242F4F |
:10C440003327220F331F220F331FC90169817A81DD |
:10C45000861B970B801791070CF48C0189819A81B8 |
:10C46000821B930B081719070CF48C0180910108AB |
:10C47000909102086091880270918902861B970B47 |
:10C480009093110880931008D090200820919A0270 |
:10C4900030919B0240919C0250919D02DD2041F021 |
:10C4A000661A770AC301AA2797FDA095BA2F04C080 |
:10C4B000AA2797FDA095BA2F280F391F4A1F5B1F87 |
:10C4C00020939A0230939B0240939C0250939D02CA |
:10C4D00080919A0290919B02A0919C02B0919D0242 |
:10C4E00081509A4FA040B04064F080E09AEFA0E005 |
:10C4F000B0E080939A0290939B02A0939C02B09329 |
:10C500009D0280919A0290919B02A0919C02B09111 |
:10C510009D0280509640AF4FBF4F64F480E096E09C |
:10C52000AFEFBFEF80939A0290939B02A0939C027F |
:10C53000B0939D02C0904A062091100830911108D6 |
:10C5400078E0E72EEC1498F08C2D9927829FA001BB |
:10C55000839F500D929F500D1124CA0157FD0796DD |
:10C560007C0163E0F594E7946A95E1F712C08C2DA5 |
:10C5700086959927829FB001839F700D929F700DC1 |
:10C580001124CB0177FD03967C01F594E794F59493 |
:10C59000E794A0907701B09078019501442737FD8A |
:10C5A0004095542F80919A0290919B02A0919C02F9 |
:10C5B000B0919D02BC01CD010E94FB7AE20EF31EF8 |
:10C5C00090906101692D772788279927980117FF97 |
:10C5D00004C022273327201B310B37FF02C02F5FF7 |
:10C5E0003F4F35952795A981BA812A0F3B1F4427D4 |
:10C5F00037FD4095542F0E94877A97FF04C0615CF5 |
:10C600007F4F8F4F9F4F26E095958795779567953C |
:10C610002A95D1F79B016E157F050CF47B013095AF |
:10C6200021953F4FE216F3060CF479018091F20751 |
:10C630009091F3076091860270918702861B970B99 |
:10C640009093F1078093F007209196023091970222 |
:10C650004091980250919902DD2041F0461A570A04 |
:10C66000C201AA2797FDA095BA2F04C0AA2797FD5B |
:10C67000A095BA2F280F391F4A1F5B1F20939602DF |
:10C6800030939702409398025093990280919602BA |
:10C6900090919702A0919802B091990281509A4F7F |
:10C6A000A040B04064F080E09AEFA0E0B0E080935A |
:10C6B000960290939702A0939802B093990280916A |
:10C6C000960290919702A0919802B09199028050A1 |
:10C6D0009640AF4FBF4F64F480E096E0AFEFBFEFFE |
:10C6E0008093960290939702A0939802B093990238 |
:10C6F0002091F0073091F10748E04C1598F08C2D0F |
:10C700009927829FB001839F700D929F700D112415 |
:10C71000CB0177FD07966C0193E0D594C7949A9569 |
:10C72000E1F712C0C6948C2D9927829FD001839F78 |
:10C73000B00D929FB00D1124CD01B7FD03966C0191 |
:10C74000D594C794D594C7949501442737FD409557 |
:10C75000542F8091960290919702A0919802B091E7 |
:10C760009902BC01CD010E94FB7AC20ED31E692D35 |
:10C77000772788279927980117FF04C02227332796 |
:10C78000201B310B37FF02C02F5F3F4F3595279598 |
:10C79000E981FA812E0F3F1F442737FD4095542F22 |
:10C7A0000E94877A97FF04C0615C7F4F8F4F9F4F35 |
:10C7B000A6E09595879577956795AA95D1F79B0102 |
:10C7C0006C157D050CF46B01309521953F4FC21619 |
:10C7D000D3060CF4690180910608282E332450906A |
:10C7E0008C06FCEF8F2EF6E09F2EE3EBAE2EE6E0FC |
:10C7F000BE2E7BE0472E61E2662E68E0762ED501E4 |
:10C800002C9112160CF029C1203429F4E981FA8107 |
:10C81000FF8BEE8B1FC049815A81CA01AA2797FD61 |
:10C82000A095BA2F332727FD3095432F532FBC01F6 |
:10C83000CD010E94877A97FF04C0615C7F4F8F4FC4 |
:10C840009F4F56E095958795779567955A95D1F7BF |
:10C850007F8B6E8BF5012181203439F42E893F893D |
:10C860002E0D3F1D3F8B2E8B2AC0203C39F44E8964 |
:10C870005F894E195F095F8B4E8B21C0C701AA27C4 |
:10C8800097FDA095BA2F332727FD3095432F532FBF |
:10C89000BC01CD010E94877A97FF04C0615C7F4F85 |
:10C8A0008F4F9F4F46E095958795779567954A9569 |
:10C8B000D1F7AE89BF89A60FB71FBF8BAE8BF5012D |
:10C8C0002281203439F42E893F892C0D3D1D3F8B68 |
:10C8D0002E8B2AC0203C39F44E895F894C195D09A2 |
:10C8E0005F8B4E8B21C0C601AA2797FDA095BA2F5A |
:10C8F000332727FD3095432F532FBC01CD010E94D4 |
:10C90000877A97FF04C0615C7F4F8F4F9F4F36E05F |
:10C9100095958795779567953A95D1F7AE89BF89B3 |
:10C92000A60FB71FBF8BAE8BF5012381203439F4DE |
:10C930002E893F89200F311F3F8B2E8B2AC0203C30 |
:10C9400039F44E895F89401B510B5F8B4E8B21C0A0 |
:10C95000C801AA2797FDA095BA2F332727FD309548 |
:10C96000432F532FBC01CD010E94877A97FF04C04B |
:10C97000615C7F4F8F4F9F4F26E095958795779508 |
:10C9800067952A95D1F7AE89BF89A60FB71FBF8BD0 |
:10C99000AE8BF301808191812E893F8982179307A5 |
:10C9A00064F4B901680F791F77FF02C06F5F7F4F92 |
:10C9B000759567957F8B6E8B1DC0552049F44E8908 |
:10C9C0005F89440F551F481B590B5F8B4E8B12C05C |
:10C9D00051E0551578F4252D33276E897F89861B04 |
:10C9E000970BB9010E94C67AAE89BF89A60FB71FFF |
:10C9F000BF8BAE8BC101880F991F880F991FEE89DD |
:10CA0000FF898E179F0764F4FD898F2F9927880F60 |
:10CA1000991F880F991F2E893F892817390714F00D |
:10CA20009F8B8E8B8E899F8997FD03969595879511 |
:10CA300095958795F4018183880F991F880F991F19 |
:10CA40002E893F89281B390BC901880F8283EE8903 |
:10CA5000FF89D301ED93FC9303C0F401118212828C |
:10CA60004A9422E030E0620E731E44E050E0A40ECF |
:10CA7000B51E68E070E0860E971E47FEC0CEE2E16C |
:10CA8000C95E0C94327B84B1806A84B93D9A82E598 |
:10CA90008CBD1DBC459A81E0809355088AEA80933D |
:10CAA000660883E8809367088AE08093680810929C |
:10CAB0006A081092690810926C0810926B08109224 |
:10CAC000CE0810928A08089530915508332309F052 |
:10CAD00070C00DB407FE6DC083E08093DC01459A01 |
:10CAE0002EB58091590399278130910589F08230C4 |
:10CAF00091051CF4892B21F03EC00297B9F03BC090 |
:10CB00003093890820935A032138A9F581E008C0A1 |
:10CB1000253549F480915A03820F80935A0382E0AD |
:10CB20008093590328C03093590325C08091890808 |
:10CB3000E82FFF27E555F74F20838F5F8093890803 |
:10CB400090915A038032A0F0291769F480E2ABEA91 |
:10CB5000B8E0EBE8F8E00D9001928A95E1F781E00A |
:10CB600080938A0802C030938A081092590303C048 |
:10CB7000920F90935A03209165082232A0F44598B1 |
:10CB80000000000000000000E0915E08F0915F08E6 |
:10CB9000E20FF11D80818EBD809187089081890F01 |
:10CBA0008093870803C081E0809355082F5F20930E |
:10CBB00065080895EF92FF920F931F9380914306AB |
:10CBC0009927880F991F880F991F7C010027F7FC70 |
:10CBD0000095102F8091D2029091D302A091D4029F |
:10CBE000B091D502BC01CD01A80197010E94FB7A4A |
:10CBF00030936A08209369088091CA029091CB0211 |
:10CC0000A091CC02B091CD02BC01CD01A801970149 |
:10CC10000E94FB7A30936C0820936B0820914B089C |
:10CC200030914C0840914D0850914E08DA01C901ED |
:10CC300073E0880F991FAA1FBB1F7A95D1F7820F47 |
:10CC4000931FA41FB51F820F931FA41FB51F209110 |
:10CC50003C0130913D0140913E0150913F01BC01AA |
:10CC6000CD010E94FB7A3093720820937108809165 |
:10CC7000E4029091E5022091FC013091FD01821BBC |
:10CC8000930B9093780880937708E091DA02F09103 |
:10CC9000DB028091170890911808BF010E94C67AA4 |
:10CCA000CB019B01220F331F220F331F280F391F87 |
:10CCB000280F391F37FF02C02D5F3F4F359527954D |
:10CCC0003595279530936E0820936D08809147081D |
:10CCD00090914808BF010E94C67A9B01220F331F22 |
:10CCE000220F331F260F371F260F371F37FF02C0B3 |
:10CCF0002D5F3F4F359527953595279530937008D3 |
:10CD000020936F081092DB021092DA02109218083A |
:10CD100010921708109248081092470880916808EE |
:10CD20009927AA27BB27FC013A97E830F10508F0BC |
:10CD300014C2E858FF4F0C944D7B809154028093AD |
:10CD40007B088091530280937C08809152028093EB |
:10CD50007D088091510280937E08809150028093DB |
:10CD60007F0880914F028093800880914E028093CB |
:10CD7000810880914D028093820880913F028093C8 |
:10CD8000830880913F02837F80933F02809100015E |
:10CD90008093840880918D068093850880913E025F |
:10CDA000809386084299D9C180913E02877F809303 |
:10CDB0003E02D3C18091D0089091D10890937C0815 |
:10CDC00080937B088091D4089091D50890937E0839 |
:10CDD00080937D08809120019091210180937F08AC |
:10CDE000809178060E94E6408093800880913B0104 |
:10CDF0008093810890915B0390938208E92FFF272D |
:10CE000013E0EE0FFF1F1A95E1F7E450F94F86810A |
:10CE10008093830883818093840887818093850829 |
:10CE20008581809386089F5F90935B03E92FFF279E |
:10CE3000EE0FFF1FEE0FFF1FEA55F94F8585882380 |
:10CE400009F08BC1992309F488C1892F992701968C |
:10CE50006CE070E00E94C67A9C01982FE82FFF27B3 |
:10CE6000EE0FFF1FEE0FFF1FEA55F94F8585882350 |
:10CE700011F4222351F720935B036FC180910101CC |
:10CE800080937B088091790680937C0880917A0654 |
:10CE900080937D0880917B0680937E0880917C063C |
:10CEA00080937F088091800680938008809181061E |
:10CEB0008093810880918206809382088091850604 |
:10CEC00080938308809183068093840880918406F0 |
:10CED00080938508809186063EC180917706809375 |
:10CEE0007B0810927C088091940680937D0835C160 |
:10CEF000F89480912A06E82FFF27EE0FFF1FE35AD0 |
:10CF0000F84F0190F081E02DE038F1051CF0EFE7DB |
:10CF1000F0E006C02FEFE138F20714F4E1E8FFEF8C |
:10CF2000E0937B0880912B06E82FFF27EE0FFF1F71 |
:10CF3000E35AF84F0190F081E02DE038F1051CF044 |
:10CF4000EFE7F0E006C07FEFE138F70714F4E1E81F |
:10CF5000FFEFE0937C0880912906E82FFF27EE0F72 |
:10CF6000FF1FE35AF84F0190F081E02DE038F10502 |
:10CF70001CF0EFE7F0E006C08FEFE138F80714F49B |
:10CF8000E1E8FFEFE0937D0880912806E82FFF2776 |
:10CF9000EE0FFF1FE35AF84F0190F081E02DE038CB |
:10CFA000F1051CF0EFE7F0E006C02FEFE138F207E3 |
:10CFB00014F4E1E8FFEF7894E0937E088091790221 |
:10CFC00080937F0880917A028093800880917B0211 |
:10CFD0008093810880917C028093820880917D02F9 |
:10CFE0008093830880917E028093840880917F02E1 |
:10CFF0008093850880918002AEC08091B70386300F |
:10D0000018F01092B70385E080937B088091870623 |
:10D0100080937C088091720290917302A0917402B7 |
:10D02000B0917502BC01CD0125E030E040E050E058 |
:10D030000E94FB7A30937E0820937D0880916E02D7 |
:10D0400090916F02A0917002B0917102BC01CD016C |
:10D0500025E030E040E050E00E94FB7A3093800809 |
:10D0600020937F0880917D068093810880917E06C1 |
:10D070008093820880917F06809383088091780254 |
:10D080008093840810928508809190059091910575 |
:10D0900097FD039695958795959587955CC0109219 |
:10D0A0007B088BE580937C088BE080937D0887E389 |
:10D0B00080937E088091020180937F0880919C0379 |
:10D0C0008093800890919D03909381088F7780933F |
:10D0D0009C03907190939D031092820880913B086D |
:10D0E0008093830880911E0880938408809189062C |
:10D0F00080938508809198062EC080915C0680936D |
:10D100007B088091960680937C08809169018093CA |
:10D110007D088091550680937E0880915606809305 |
:10D120007F088091570680938008809168018093E2 |
:10D130008108809159068093820880915A068093D5 |
:10D14000830880915B06809384088091D608809341 |
:10D1500085088091BA058093860880918A08882383 |
:10D1600009F451C160918B0880919D01681719F0F5 |
:10D170008AEF80939B0160939D0181E080938901F8 |
:10D1800040918C0850918D08CA0181509E4F8F5F4D |
:10D190009340B0F420918E0830918F08C9018150DE |
:10D1A0009E4F8F5F934060F48091340685FF08C0E6 |
:10D1B000509348034093470330934603209345031D |
:10D1C000809192089091930821E08936920724F487 |
:10D1D00090938B0180938A0120919C0830919D0847 |
:10D1E0008091DD019091DE018217930740F48091D8 |
:10D1F000B001882321F43093DE012093DD01862FD6 |
:10D2000099278836910509F468C08936910524F478 |
:10D210008736910551F0FFC08936910509F496C013 |
:10D220008B36910509F4E2C0F6C080919E08809388 |
:10D23000CB0880919F088093CD088091A0088093AF |
:10D24000CC088091A108809388018091A2088093E6 |
:10D25000CF088091A30880939C018091A4088093BB |
:10D2600058038091A5088093440380914C02882341 |
:10D27000F9F02091A6083091A70837FD19C0309326 |
:10D2800091022093900290915E06992389F08FE09D |
:10D29000989FC0011124281B390BC90188599E4F42 |
:10D2A00068E671E00E94C67A9093910280939002A2 |
:10D2B00020914F03309150038091A8089091A908C4 |
:10D2C000280F391F37FF02C02F5F3F4F3595279535 |
:10D2D0003093500320934F039EC080919E0880930B |
:10D2E000600880919F08809361088091A0088093D6 |
:10D2F00062088091A108809363088091A2088093BE |
:10D300006408809180059091A308892B8093800503 |
:10D310009091810593708091A4088C70982B9093C4 |
:10D3200081058091A508809356038091A60880937B |
:10D330008D018091A7088093CE088091A8088093E2 |
:10D3400052038091A9088093510365C080919E0883 |
:10D350008093560880919F08809357088091A00879 |
:10D36000809358088091A108809359088091A20861 |
:10D370009091A30890935B0880935A088091A40829 |
:10D380009091A50890935D0880935C088091A60811 |
:10D39000992787FD909590939807809397078091A0 |
:10D3A000A708809367028091A8089091A9089C0122 |
:10D3B000442737FD4095542FDA01C90163E0880FF7 |
:10D3C000991FAA1FBB1F6A95D1F7820F931FA41F35 |
:10D3D000B51F820F931FA41FB51F809368029093FF |
:10D3E0006902A0936A02B0936B0215C080919E08F7 |
:10D3F0008093550380919F08809354038091A008E7 |
:10D400008093530308C01092480310924703109270 |
:10D410004603109245031F910F91FF90EF900895DE |
:10D4200080915508882319F1459886E698E09093F5 |
:10D430005F0880935E0890915703E92FFF27E2571A |
:10D44000FE4F9F5F909357038081809368089D30C3 |
:10D4500010F010925703109255080E94DA6581E08F |
:10D460008093650880916608809387088EBD089533 |
:10D4700087B18C6087B94298439810925D0380E829 |
:10D4800080939F0110925C0380939E010895809188 |
:10D4900097079091980781589F4F39F0809197078F |
:10D4A000909198078158809367038091620381501F |
:10D4B000809362038F3F09F043C189E08093620348 |
:10D4C00080913F02992780739070892B21F480917D |
:10D4D0009D0380FF1DC080917506882351F08091C7 |
:10D4E0006503882319F484E080935D0381E08093D1 |
:10D4F0006503809176068823B9F0809166038823BE |
:10D5000019F484E080935C0381E0809366030CC08F |
:10D5100010926503109266038091710680936303F5 |
:10D52000809173068093640380916503882309F0DA |
:10D5300073C080919506282F332724FF07C0809160 |
:10D540007702882319F425FD80C081C0909172066E |
:10D55000983F48F0809119088D3D28F08091630331 |
:10D5600088236CF00AC0983F68F0809119088530D4 |
:10D5700049F48091630387FF02C0429801C0429A38 |
:10D5800081E032C080915D03815080935D038F3FC5 |
:10D5900009F05EC08091980685FF29C090916703CD |
:10D5A000892F869580935D03992351F480916303BD |
:10D5B00087FF02C0429801C0429A10929F0148C062 |
:10D5C00080919F0190916303882341F480936703C6 |
:10D5D00080E880939F019923D4F137C0982311F0FC |
:10D5E000429A01C04298869580939F0131C08091F4 |
:10D5F0001908869580935D0380919F01813021F405 |
:10D600001092670380E801C0869580939F01809106 |
:10D610009F019091630317C080915D0381508093B7 |
:10D620005D038F3FA9F489E080935D0380919F01A2 |
:10D63000813011F480E801C0869580939F0180912C |
:10D640009F0190917506892311F0429A01C042987A |
:10D6500080916603882309F043C09091950697FF57 |
:10D6600007C080917702882319F496FD52C053C0F9 |
:10D6700090917406983F48F0809142088D3D28F0C3 |
:10D680008091640388236CF00AC0983F78F0809101 |
:10D690004208853059F48091640387FF02C04398A3 |
:10D6A00001C0439A81E080939E0136C080915C0363 |
:10D6B000815080935C038F3F79F580914208869575 |
:10D6C00080935C0380919E01813011F480E801C059 |
:10D6D000869580939E0180919E019091640317C06E |
:10D6E00080915C03815080935C038F3FA9F489E0B3 |
:10D6F00080935C0380919E01813011F480E801C029 |
:10D70000869580939E0180919E0190917606892353 |
:10D7100011F0439A01C04398429B05C080913E029C |
:10D72000886080933E02439B06C080913E028061E8 |
:10D7300080933E02089580913E028F7E80933E0248 |
:10D7400008954FB724E130E0F8948091C9008F77B5 |
:10D750008093C9008091C9008F7B8093C90080911C |
:10D76000C9008F7D8093C900832F99278093CD00B6 |
:10D770002093CC008091C80082608093C80080E133 |
:10D780008093C9008091CA008F778093CA008091EE |
:10D79000CA008F7B8093CA008091CA008F7D8093DE |
:10D7A000CA008091CA008F7E8093CA008091CA000F |
:10D7B000877F8093CA008091C9008B7F8093C900C6 |
:10D7C0008091CA0084608093CA008091CA00826000 |
:10D7D0008093CA008091C80087FF03C08091CE006B |
:10D7E000F9CF8091C90080688093C9004FBF089528 |
:10D7F000EF92FF920F931F93CF93DF93482F00E098 |
:10D8000010E08091A001813061F41092A00184E4C5 |
:10D810008093680310926A031092690310926B035D |
:10D8200039C180916803882319F421E030E001C0F8 |
:10D83000980190916903992371F4232B11F081E0F1 |
:10D8400010C084E48093680390936A039093690303 |
:10D8500090936B0308C1913069F4232B09F0F9C050 |
:10D8600082E08093690380916A038F5F80936A03EB |
:10D8700083E0F7C09230D1F4232B09F0EAC083E0B3 |
:10D880008093680340936B0390916A03923039F45C |
:10D8900010926C0347FF03C081E080936C0383E028 |
:10D8A000809369039F5F90936A03DDC0933009F012 |
:10D8B000D0C0232B09F0CDC09093680382E0809301 |
:10D8C000690380916A038F5F80936A0320916B03E1 |
:10D8D000822F9927782F6627842F9927682B792BF9 |
:10D8E00080914E06813049F47370CB018050924094 |
:10D8F00063E070E00E94C67A17C0823061F47770EE |
:10D90000CB018050944066E070E00E94C67A269574 |
:10D91000269526950BC0737068567140CB0177FD34 |
:10D920000196BC017595679526952695022F1127BE |
:10D930000F7010700F5F1F4F0D30110508F082C07F |
:10D940007801E00EF11EF701E35AF84F80819181D2 |
:10D950009B01281B390BC90137FF03C090958195A6 |
:10D960009F4F069704F5E0919006EE2351F0FF27B4 |
:10D97000EE0FFF1FE35AF84F8081918184369105A5 |
:10D9800094F480917802883C30F480917802865F2C |
:10D990008093780208C088EC8093780280916F00B1 |
:10D9A0008F7D80936F00F701E35AF84F808191815A |
:10D9B0009C01220F331F280F391F260F371F37FFF7 |
:10D9C00002C02D5F3F4FE901D595C795D595C79505 |
:10D9D000CB0101968C179D0714F4219706C0615066 |
:10D9E0007040C617D7070CF4219680917802843BCB |
:10D9F000D0F0F701E35AF84F80819181FE01E81BD6 |
:10DA0000F90BCF0163E070E00E94C67ACB01880F6A |
:10DA1000991F860F971F23EA37E0E20EF31EF701E6 |
:10DA20009183808307C023EA37E0E20EF31EF701FB |
:10DA300011821082000F111F035A184FF801D18371 |
:10DA4000C08311C00231110570F081E08093A00104 |
:10DA50000AC081E08093A00110926A0310926C03C7 |
:10DA600084E48093680380916A03803198F0809108 |
:10DA70006C03882331F48091A001882311F48093F2 |
:10DA80003A0110926A0310926C031092690384E4C5 |
:10DA900080936803E6E0CDB7DEB70C943E7BCF936E |
:10DAA000FC0197FF05C0CFEFF095E195FF4F01C056 |
:10DAB000C1E028E631E0CF01B9010E94C67AFC013D |
:10DAC0008B35910554F08B5590408A35910538F48B |
:10DAD00084EB90E08E1B9F0BFC0141E00DC0CF0159 |
:10DAE000855B90408A35910518F4E45BF04003C0F3 |
:10DAF0002E1B3F0BF9014FEFEE0FFF1FE954F74FBD |
:10DB0000259134918C2F992787FD9095289FB001FE |
:10DB1000299F700D389F700D1124842F992787FD40 |
:10DB20009095689FA001699F500D789F500D11241A |
:10DB3000CA01CF9108952AE530E0281B390BC901AD |
:10DB40000E944F6D0895CF93DF9380E00E94A971EA |
:10DB500080912001909121016AE070E00E94C67AD4 |
:10DB60009F938F9380912001909121016AE070E052 |
:10DB70000E94C67A7F936F938BE899E09F938F936F |
:10DB8000CCE9D1E7DF93CF93E0918303F091840355 |
:10DB900009952DB73EB7285F3F4F2DBF80919B0160 |
:10DBA000882361F186E00E94A97180918D019927F7 |
:10DBB0009F938F9380915A0890915B086AE070E080 |
:10DBC0000E94B27A7F936F938FED90E09F938F9333 |
:10DBD0008091F7079091F8079F938F9384E999E0DC |
:10DBE0009F938F93DF93CF93E0918303F09184030E |
:10DBF00009958DB79EB70C968DBF12C086E00E9426 |
:10DC0000A97182EA99E09F938F93DF93CF93E0917C |
:10DC10008303F091840309950F900F900F900F905C |
:10DC2000809156038823F9F086E00E94A9718091C3 |
:10DC3000560399279F938F9389EA99E09F938F9337 |
:10DC4000DF93CF93E0918303F091840309952DB77F |
:10DC50003EB72A5F3F4F2DBF80917702882319F08E |
:10DC600083E58093A80180E10E94A9718091AA01B7 |
:10DC70009091AB016CE370E00E94B27A9F938F9316 |
:10DC80008091AA019091AB016CE370E00E94B27A9E |
:10DC90007F936F938091D4089091D5089F938F9331 |
:10DCA00085EB99E09F938F93CCE9D1E7DF93CF93F6 |
:10DCB000E0918303F0918403099580913B082DB78F |
:10DCC0003EB7265F3F4F2DBF80FF29C08AE10E94EB |
:10DCD000A97180913B0199279F938F938091720244 |
:10DCE00090917302A0917402B0917502BC01CD01B4 |
:10DCF00024E630E040E050E00E94FB7A3F932F930F |
:10DD000082EC99E09F938F93DF93CF93E09183030D |
:10DD1000F091840309958DB79EB708968DBFDF916A |
:10DD2000CF910895CF93DF9380E00E94A9718091F5 |
:10DD30001B07992787FD90959F938F9380911307D9 |
:10DD4000992787FD90959F938F9380910B07992733 |
:10DD500087FD90959F938F9380910307992787FD67 |
:10DD600090959F938F9389EC99E09F938F93CCE943 |
:10DD7000D1E7DF93CF93E0918303F091840309957A |
:10DD800080E10E94A9712DB73EB7245F3F4F2DBFA0 |
:10DD900080913B07992787FD90959F938F93809162 |
:10DDA0003307992787FD90959F938F9380912B0739 |
:10DDB000992787FD90959F938F93809123079927AB |
:10DDC00087FD90959F938F9389ED99E09F938F9313 |
:10DDD000DF93CF93E0918303F091840309958091C1 |
:10DDE00026062DB73EB7245F3F4F2DBF853098F4F0 |
:10DDF00080E10E94A97189EE99E09F938F93DF9350 |
:10DE0000CF93E0918303F091840309950F900F90D5 |
:10DE10000F900F9018C08730B0F488E10E94A9716C |
:10DE20008FED90E09F938F938AEF99E09F938F936C |
:10DE3000DF93CF93E0918303F091840309958DB72D |
:10DE40009EB706968DBFDF91CF9108950F931F93D4 |
:10DE500080E00E94A9712AE030E08091D008909182 |
:10DE6000D108B9010E94B27A9F938F938091D00814 |
:10DE70009091D108B9010E94B27A7F936F938091FB |
:10DE8000200190912101B9010E94C67A9F938F933E |
:10DE90008091200190912101B9010E94C67A7F935F |
:10DEA0006F9383E09AE09F938F930CE911E71F93A0 |
:10DEB0000F93E0918303F0918403099580E10E9420 |
:10DEC000A9718DB79EB70C968DBF8091D4089091A3 |
:10DED000D5089F938F938091D2089091D3089F93F8 |
:10DEE0008F9385E19AE09F938F931F930F93E09117 |
:10DEF0008303F091840309958DB79EB708968DBF73 |
:10DF00001F910F910895EF92FF920F931F9380E05E |
:10DF10000E94A9718FEDE82EF12CFF92EF92809173 |
:10DF20008A0190918B019F938F938091550399273C |
:10DF30009F938F9381E29AE09F938F930CE911E76F |
:10DF40001F930F93E0918303F0918403099580E17F |
:10DF50000E94A9718DB79EB70A968DBF8091530319 |
:10DF600099279F938F93FF92EF9280915403992763 |
:10DF70009F938F9384E39AE09F938F931F930F93C4 |
:10DF8000E0918303F091840309958DB79EB70A96BB |
:10DF90008DBF1F910F91FF90EF9008950F931F93E6 |
:10DFA000CF93DF9380919B01CCE9D1E7882309F4DB |
:10DFB0007DC080E00E94A9718091570899279F93A6 |
:10DFC0008F938091590899279F938F9387E49AE0C4 |
:10DFD0009F938F938E01DF93CF93E0918303F09112 |
:10DFE000840309958DB79EB708968DBF8091580818 |
:10DFF000833031F48CE00E94A97186E59AE005C077 |
:10E000008CE00E94A9718BE59AE09F938F93DF9338 |
:10E01000CF93E0918303F091840309950F900F90C3 |
:10E020000F900F908091560881FF12C08CE00E94E3 |
:10E03000A97180E69AE09F938F931F930F93E091CD |
:10E040008303F091840309950F900F900F900F9028 |
:10E0500080E10E94A97180918D0199279F938F93F0 |
:10E060008FED90E09F938F9380915C0890915D0875 |
:10E070009F938F9380915A0890915B086AE070E0BB |
:10E080000E94B27A7F936F9385E69AE09F938F9375 |
:10E090008CE991E79F938F93E0918303F091840340 |
:10E0A00009958DB79EB70C968DBF12C082E00E9475 |
:10E0B000A97188E79AE09F938F93DF93CF93E091C4 |
:10E0C0008303F091840309950F900F900F900F90A8 |
:10E0D000DF91CF911F910F910895CF93C82F209179 |
:10E0E0006D0320936E0399278F329105E1F0803301 |
:10E0F00091051CF44F9779F027C08F349105D9F022 |
:10E100008F38910509F586E0289FF0011124E35925 |
:10E11000F64F849117C086E0289FF0011124E25940 |
:10E12000F64F84910FC086E0289FF0011124E15939 |
:10E13000F64F849107C086E0289FF0011124E05932 |
:10E14000F64F849180936D0390916D0380916E03DF |
:10E150009813C0E08091A101282F33278F5F80930F |
:10E16000A10120FF0FC00E94AF7190916D0386E066 |
:10E17000989FF0011124EF58F64F259134918C2F80 |
:10E18000F901099580E090E0CF9108951092D108AF |
:10E190001092D0081092D5081092D4081092D3088B |
:10E1A0001092D2081092D6088AE090E00E9447169A |
:10E1B0009093700380936F030895CF93DF938091C2 |
:10E1C0006F03909170030E945016882309F4AFC02A |
:10E1D00080916F03909170030A96909370038093DF |
:10E1E0006F03E0E0F0E09F0190E05FEFACEFB6E09E |
:10E1F0004BE0ED018B8187FF0BC09F5F8D81E80FA6 |
:10E20000F11D8981280F311D8E81851708F4582F43 |
:10E210004150189647FFEDCF5093D608232B41F578 |
:10E2200020917503309176034091770350917803E4 |
:10E23000BB27A52F942F832F909374038093730390 |
:10E24000AA27BB27281B390B4A0B5B0BCF01AA2738 |
:10E25000BB27280F391F4A1F5B1F2093750330937C |
:10E2600076034093770350937803E5E0F0E013C022 |
:10E2700020917303309174032E173F0718F4E21BAB |
:10E28000F30B02C0E0E0F0E0892F9927880F991F77 |
:10E29000E80FF91F3596F093D108E093D008EF3FCF |
:10E2A000F10578F480912001909121018E9F9001D9 |
:10E2B0008F9F300D9E9F300D1124C90164E670E0E0 |
:10E2C00013C0CF019695879596958795209120014B |
:10E2D00030912101289FA001299F500D389F500D9A |
:10E2E0001124CA0169E170E00E94B27A7093D308E8 |
:10E2F0006093D20820917103309172032E0F3F1F5B |
:10E3000030937203209371035EE02131350778F07A |
:10E310008091D4089091D50801969093D508809368 |
:10E32000D40820513E403093720320937103DF9153 |
:10E33000CF9108950895089590917C03933240F40D |
:10E34000E92FFF27E952F74F80839F5F90937C036B |
:10E350000895833218F48D5F80937C03089590E2D2 |
:10E36000EAEDF8E08FE19193815087FFFCCF0895AB |
:10E37000CF93CFB723E031E0F8948091C9008F7735 |
:10E380008093C9008091C9008F7B8093C9008091E0 |
:10E39000C9008F7D8093C900832F99278093CD007A |
:10E3A0002093CC008091C80082608093C80088E1EF |
:10E3B0008093C9008091CA008F778093CA008091B2 |
:10E3C000CA008F7B8093CA008091CA0080628093CC |
:10E3D000CA008091CA0080618093CA008091CA00FF |
:10E3E00088608093CA008091C90084608093C900CE |
:10E3F0008091CA0084608093CA008091CA008260C4 |
:10E400008093CA008091C80087FF03C08091CE002E |
:10E41000F9CF8091C90080688093C9008091C900BC |
:10E4200080648093C9000E94AF71CFBFCF910895DF |
:10E43000282F99278F709070892B31F42095809127 |
:10E440007B03822B80937B0308958091A401882312 |
:10E4500009F44BC080913F0285FD04C08091A80162 |
:10E46000882381F082E98093D70883E28093D808DB |
:10E470008091A801882309F485E58093D90810923A |
:10E48000A80102C08093D7088091A5018F3071F454 |
:10E4900080917B030E946D70882341F081E9809315 |
:10E4A000D7088093D80881E38093D9081092A401FB |
:10E4B0008091C80085FFFCCF8091C9008F7E80933A |
:10E4C000C9008091C9008E7F8093C9008091D708D0 |
:10E4D000882311F48EEF01C08EE78093CE008091E7 |
:10E4E0007B038093A50110927B0308951F920F92E6 |
:10E4F0000FB60F9211248F939F93EF93FF939091F8 |
:10E50000A401992309F040C080917D03882361F420 |
:10E510008091D708882311F483E003C0813999F4EE |
:10E5200081E080937D030FC0833099F48091D708F8 |
:10E53000882349F09093D7088091C9008E7F8093FB |
:10E54000C9008EEF1EC08091C90081608093C90010 |
:10E550000EC0833261F48091C9008E7F8093C90020 |
:10E560008FEF8093CE0081E08093A40118C080914A |
:10E570007D03E82FFF27E952F74F8F5F80937D03DC |
:10E5800080818093CE000BC010927D0310927E0399 |
:10E5900010927F038091C90080618093C900FF9130 |
:10E5A000EF919F918F910F900FBE0F901F90189534 |
:10E5B000EF92FF920F931F93CF93DF937C018B0118 |
:10E5C000EA01452B39F0F80181918F01F701099596 |
:10E5D0002197C9F7E6E0CDB7DEB70C943E7BEF920A |
:10E5E000FF920F931F93CF93DF937C018B01EA017E |
:10E5F000452B41F0F8010F5F1F4F8491F7010995FA |
:10E600002197C1F7E6E0CDB7DEB70C943E7B0F93C0 |
:10E610001F93CF938C01C62F161634F480E2F801B5 |
:10E620000995C1501C16D4F3CF911F910F910895F5 |
:10E630000F931F93CF938C01C62F161634F480E3EB |
:10E64000F8010995C1501C16D4F3CF911F910F9179 |
:10E650000895A5E3B0E0EFE2F3E70C94167B2E9665 |
:10E66000EEADFFAD2E9788249924540180917A0352 |
:10E67000882321F42C961FAE1EAE2C97AEE44A2EB2 |
:10E68000512C4C0E5D1E6F01B60105C0153239F0DC |
:10E690000894C11CD11CF60114911123B9F7A601ED |
:10E6A000461B570B31F02C968EAD9FAD2C970E94D8 |
:10E6B000EF72112309F46AC20894C11CD11CFF2413 |
:10E6C000FDA6FCA67FEFE72EF9A6F6010894C11C73 |
:10E6D000D11C1491153721F0812F80628837B1F455 |
:10E6E000F0FE0AC0F20124E030E0420E531E8080AA |
:10E6F0009180A280B3800AC0F20142E050E0440E53 |
:10E70000551E808191814C01AA24BB24103221F432 |
:10E7100089A58823D1F61DC0133219F458E0F52AD3 |
:10E72000D4CF1A3211F01D3291F41A3259F4F20199 |
:10E7300082E090E0480E591EE081ECA7EE232CF613 |
:10E74000E195ECA790E1F92AAFEDFA22BECF1B329A |
:10E7500011F419A7BACF1E32C1F5F6010894C11CF5 |
:10E76000D11C14911A3279F4F20122E030E0420E09 |
:10E77000531E408151813FEF4F3F530714F44FEF39 |
:10E780005FEFE42EA2CF40E050E0812F80538A302B |
:10E79000A0F4CA0163E0880F991F6A95E1F7840F1E |
:10E7A000951F480F591F410F511D40535040F6010E |
:10E7B0000894C11CD11C1491E8CF8FEF4F3F58072C |
:10E7C00014F44FEF5FEFE42E85CF103329F4F4FCFF |
:10E7D0007CCF90E2F92A79CF812F81538930D8F408 |
:10E7E00040E050E0CA0133E0880F991F3A95E1F705 |
:10E7F000840F951F480F591F410F511D4053504022 |
:10E80000F6010894C11CD11C1491812F80538A30C9 |
:10E8100048F34CA75FCF183619F4A4E0FA2A55CF75 |
:10E820001C3619F4B1E0FB2A50CF133661F43E01D7 |
:10E830000894611C711CF20122E030E0420E531E6C |
:10E84000808189833CC1143421F0143611F01936CB |
:10E8500051F5143411F431E0F32AF0FE0AC0F2014C |
:10E8600044E050E0440E551E80809180A280B38029 |
:10E870000CC0F20182E090E0480E591E8081918127 |
:10E880004C01AA2497FCA094BA2CB7FE0AC0B094FD |
:10E89000A09490948094811C911CA11CB11C8DE2C9 |
:10E8A00089A70AE06FC01F3411F01F3631F41F34FE |
:10E8B00011F491E0F92A08E064C0103779F4F2010C |
:10E8C000A2E0B0E04A0E5B1E808191814C01AA2437 |
:10E8D000BB2400E1B0E4FB2A18E753C01337C1F5AD |
:10E8E000F20122E030E0420E531E6080718061141C |
:10E8F000710489F43E010894611C711C88E28983CB |
:10E900008EE6F301818385E78B838CE68C838D8390 |
:10E9100089E28E831F82E7FC13C08E2D992787FD25 |
:10E920009095AC0160E070E0C3010E94E37800972D |
:10E9300029F0382E3618E3140CF0C3C03E2CC1C0A9 |
:10E94000F30101900020E9F731973E2E3618B9C047 |
:10E95000153511F0153731F4153511F4F1E0FF2AB2 |
:10E960000AE00FC0183519F0183709F0A0C000E10F |
:10E97000F3FE07C081149104A104B10411F020E456 |
:10E98000F22A19A6EDA6E7FC02C03FEDF32229E228 |
:10E99000622E712C6C0E7D1E81149104A104B104B1 |
:10E9A00021F44DA5442309F47BC0802F9927AA2781 |
:10E9B000BB278EA79FA7A8ABB9AB202E332490E02E |
:10E9C000891690E0990691E0A90690E0B90648F012 |
:10E9D000C501B4012EA53FA548A959A90E94D97A1D |
:10E9E00017C0AFEF8A169104A104B10449F040F0BA |
:10E9F000C401B1010E94B27A9B014427552708C087 |
:10EA0000882D602F0E94A67A282F33274427552768 |
:10EA10002AAB3BAB4CAB5DAB0A3059F48AA9880FEB |
:10EA2000880F880F9AA9990F890F382D381B832FCB |
:10EA300010C0003139F48AA98295807F482D481B87 |
:10EA4000842F07C08AA9880F880F880F582D581B5C |
:10EA5000852F90E02EA53FA548A959A982169306B7 |
:10EA6000A406B50608F091E08AA89BA8ACA8BDA8AA |
:10EA70008A3010F4805D04C0895A183509F48F7DFE |
:10EA8000D3018E933D01992309F099CF083041F4C9 |
:10EA9000F3FE06C0803321F080E3FD0182933F0145 |
:10EAA000CE010196382E3618F8E23F0E0BC0112326 |
:10EAB00009F46CC03E010894611C711C198391E03B |
:10EAC000392E19A6032D2DA4231827FC222489A54D |
:10EAD000882311F00F5F02C0F6FC0E5F020DEF2CD1 |
:10EAE000FF24C70180739070892B49F48CA5801B8B |
:10EAF000682F2C968EAD9FAD2C970E94077389A529 |
:10EB0000882331F041E050E0BE01675D7F4F0AC0CD |
:10EB1000E6FE0EC080E38AA71BA742E050E0BE01DC |
:10EB2000665D7F4F2C968EAD9FAD2C970E94D8725C |
:10EB3000C70180739070809749F48CA5801B682F63 |
:10EB40002C968EAD9FAD2C970E941873622D2C963B |
:10EB50008EAD9FAD2C970E941873832D992787FD4A |
:10EB60009095AC01B3012C968EAD9FAD2C970E9471 |
:10EB7000D872E4FE89CD2CA5201B2CA7622F2C96E1 |
:10EB80008EAD9FAD2C970E9407737ECDE2E1CB5CEA |
:10EB90000C94327B2FB740E0F894E0E0F0E081E2A3 |
:10EBA000809357009491E2E0F0E080935700349115 |
:10EBB000E4E0F0E08093570084912FBF9E3199F4F8 |
:10EBC000363941F4893011F441E00DC08A3059F4EE |
:10EBD00042E009C0373939F4863011F443E003C00C |
:10EBE000853009F444E0842F992708959FB7F8945D |
:10EBF0008091C900877F8093C9008091C9008F7E72 |
:10EC00008093C9008091C9008F778093C90080915B |
:10EC1000C9008F7B8093C9008091C9008F7D80934C |
:10EC2000C9009FBF08951F93CF93DF93182F809142 |
:10EC30007A03882309F4A0C08091A301181709F46E |
:10EC40009BC080917903882321F40E94CA75809328 |
:10EC5000790382ED91E0909339018093380184E249 |
:10EC60009BE09F938F93CBE2D2E1DF93CF93E09130 |
:10EC70008303F091840309950F900F900F900F90EC |
:10EC8000812F992784309105F1F0853091051CF48E |
:10EC9000892B51F00CC086309105D9F08630910552 |
:10ECA000ACF0089741F12AC080E29BE002C087E106 |
:10ECB0009BE09F938F93DF93CF93E0918303F09139 |
:10ECC0008403099527C082E19BE0F3CF8AE09BE0B3 |
:10ECD000F0CF82E09BE09F938F93DF93CF93E091FF |
:10ECE0008303F0918403099588ED91E090933901B5 |
:10ECF000809338010FC08DEF9AE0DBCF81E39BE07A |
:10ED00009F938F93DF93CF93E0918303F0918403DC |
:10ED1000099510E00F900F900F900F90809179035C |
:10ED2000843011F0823099F40E94F675812F815061 |
:10ED3000833018F40E94A16B1DC0143019F40E9496 |
:10ED4000B87118C01830B1F40E949A7113C0112321 |
:10ED500089F087E49BE09F938F938BE292E19F93EE |
:10ED60008F93E0918303F091840309950F900F90A6 |
:10ED70000F900F901093A301DF91CF911F910895F1 |
:10ED80001F93CF93DF93182F81E080937A034091F4 |
:10ED9000A201EDEAFAE020E030E05FE484919927F7 |
:10EDA0002F5F3F4F829FB001839F700D929F700D28 |
:10EDB000112446275150319657FFF0CF4093A201BE |
:10EDC000E5E8FAE020E030E057E2849199272F5FF0 |
:10EDD0003F4F829FB001839F700D929F700D112451 |
:10EDE00046275150319657FFF0CF4093A2018091B2 |
:10EDF0007903882321F40E94CA7580937903809156 |
:10EE0000A201833459F088E190E029E20FB6F8942A |
:10EE1000A895809360000FBE2093600089E293E77D |
:10EE200090938403809383030E9422068CE690E0F3 |
:10EE30009F938F938BE590E09F938F931F921F92E8 |
:10EE4000809102016AE00E94A67A892F99279F93F8 |
:10EE50008F93809102010E94A67A99279F938F93A6 |
:10EE600082E69BE09F938F93CBE2D2E1DF93CF9337 |
:10EE7000E0918303F091840309958DEA9AE09F93D2 |
:10EE80008F93DF93CF93E0918303F09184030995EF |
:10EE900085E89AE09F938F93DF93CF93E09183036C |
:10EEA000F091840309950E94220683EC80938100EF |
:10EEB00080916F00806280936F008DB79EB74696F9 |
:10EEC0008DBF133081F086E99BE09F938F93DF9392 |
:10EED000CF93E0918303F091840309950F900F90F5 |
:10EEE0000F900F90F0CFDF91CF911F9108958091F7 |
:10EEF0008E068D3338F08091560887FD03C08CE371 |
:10EF000080938E0680913D06882331F080558536AA |
:10EF100018F08FE780933D060895CF9380917A0390 |
:10EF2000882309F472C0809180038150809380030C |
:10EF3000882309F053C089E18093800380918E0675 |
:10EF40008E3338F08091560887FD03C08DE380939F |
:10EF50008E0680917802823820F58091400290914F |
:10EF60004102805D974020F08091D608843620F4DD |
:10EF70001092820310928103809181039091820309 |
:10EF8000009739F101979093820380938103419711 |
:10EF900028F18091560884FF21C080913E02846050 |
:10EFA0001BC080917802853BC8F090918E0684E169 |
:10EFB000989FC001112440962091810330918203D3 |
:10EFC0002817390730F42F5F3F4F30938203209387 |
:10EFD000810380913E028B7F80933E02C091A60107 |
:10EFE000CC2321F0C150C093A6010FC08BE48093C5 |
:10EFF000A6018091A301843011F40E9425728091B2 |
:10F00000A201833411F0C0937A03CF9108951F9227 |
:10F010000F920FB60F9211242F933F934F935F934C |
:10F020006F937F938F939F93AF93BF93EF93FF93D0 |
:10F030002091CE008091B2018823B1F02093C600C8 |
:10F040008091B201823029F52F3F19F58FEF94E3BB |
:10F05000ACE0B0E0C297A109B109B7FFFBCF809146 |
:10F06000C6038093CE0015C09091A301892F8150D3 |
:10F07000833020F4822F0E94F86B0BC0943021F46F |
:10F08000822F0E94187205C0983019F4822F0E94B6 |
:10F090009B71FF91EF91BF91AF919F918F917F9164 |
:10F0A0006F915F914F913F912F910F900FBE0F90F5 |
:10F0B0001F901895002422273327442751E0BB27AF |
:10F0C000EE27FF27A0E1660F771F881F991F001CFE |
:10F0D000221F331F441F660F771F881F991F001CB4 |
:10F0E000221F331F441F2AF4050E2B1F3E1F4F1FE4 |
:10F0F00004C0051A2B0B3E0B4F0B550FBB1FEE1F09 |
:10F10000587F556047FD5250AA95E9F6E695B795A8 |
:10F110005795E695B7955795852F9B2F08952227EC |
:10F12000332741E0552768E0880F991F221F331FBE |
:10F13000880F991F221F331F1AF4240F351F02C096 |
:10F14000241B350B440F551F487F456037FD425047 |
:10F150006A9551F75695479556954795842F08958A |
:10F16000AA2797FF04C0809590958A1F9A1F77FF62 |
:10F1700004C0609570956A1F7A1F669F9001779F03 |
:10F18000A001679F300D411D5A1F300D411D5A1FB0 |
:10F19000889FF001999F2E0F3F1F401D511D899F91 |
:10F1A000300D411D5A1F300D411D5A1FCA01B901B2 |
:10F1B000112480CFFB01DC0102C005900D9241506B |
:10F1C0005040D8F70895FC014150504030F0019074 |
:10F1D0000616D1F73197CF0108958827992708950A |
:10F1E000A0E0B0E0E6EFF8E70C941E7B6C017B0139 |
:10F1F000EA01590121978FEFCF3FD80789F08601A7 |
:10F200000894C11CD11CC7010894E11CF11CF50134 |
:10F210000995F80180832197FFEFCF3FDF0779F74A |
:10F22000EAE0CDB7DEB70C943A7BCF92DF92EF9253 |
:10F23000FF920F931F937C016B01FB010995082F2F |
:10F24000C7010196F6010995182FC8011F910F916A |
:10F25000FF90EF90DF90CF900895A0E0B0E0E3E35F |
:10F26000F9E70C94207B8C017B01EA01690121976D |
:10F270008FEFCF3FD80771F0F70121917F01C801CF |
:10F280000F5F1F4F622FF60109952197FFEFCF3FC8 |
:10F29000DF0791F7E8E0CDB7DEB70C943C7BCF9267 |
:10F2A000DF92EF92FF920F931F936C018B017A0113 |
:10F2B000FA010995812F9927682FC6010196F70158 |
:10F2C00009951F910F91FF90EF90DF90CF900895D7 |
:10F2D0005058BB27AA270ED0E0C0D1D030F0D6D0EE |
:10F2E00020F031F49F3F11F41EF4C6C00EF4E095F7 |
:10F2F000E7FBBCC0E92FE2D080F3BA1762077307BF |
:10F300008407950718F071F49EF5FAC00EF4E095A5 |
:10F310000B2EBA2FA02D0B01B90190010C01CA01CF |
:10F32000A0011124FF27591B99F0593F50F4503E7A |
:10F3300068F11A16F040A22F232F342F4427585F6C |
:10F34000F3CF469537952795A795F0405395C9F784 |
:10F350007EF41F16BA0B620B730B840BBAF091503C |
:10F36000A1F0FF0FBB1F661F771F881FC2F70EC0DB |
:10F37000BA0F621F731F841F48F4879577956795AE |
:10F38000B795F7959E3F08F0B3CF9395880F08F097 |
:10F390009927EE0F97958795089598D088F09F57F5 |
:10F3A00090F0B92F9927B751A0F0D1F0660F771FD1 |
:10F3B000881F991F1AF0BA95C9F712C0B13081F0B1 |
:10F3C0009FD0B1E008959CC0672F782F8827B85F41 |
:10F3D00039F0B93FCCF3869577956795B395D9F712 |
:10F3E0003EF490958095709561957F4F8F4F9F4F1C |
:10F3F0000895E89409C097FB3EF490958095709528 |
:10F4000061957F4F8F4F9F4F9923A9F0F92F96E970 |
:10F41000BB279395F695879577956795B795F111E5 |
:10F42000F8CFFAF4BB0F11F460FF1BC06F5F7F4F82 |
:10F430008F4F9F4F16C0882311F096E911C0772394 |
:10F4400021F09EE8872F762F05C0662371F096E89D |
:10F45000862F70E060E02AF09A95660F771F881F6C |
:10F46000DAF7880F9695879597F9089597F99F672A |
:10F4700080E870E060E008959FEF80EC089500243C |
:10F480000A941616170618060906089500240A9409 |
:10F4900012161306140605060895092E0394000C8F |
:10F4A00011F4882352F0BB0F40F4BF2B11F460FF1E |
:10F4B00004C06F5F7F4F8F4F9F4F089557FD905847 |
:10F4C000440F551F59F05F3F71F04795880F97FB28 |
:10F4D000991F61F09F3F79F08795089512161306E2 |
:10F4E0001406551FF2CF4695F1DF08C01616170611 |
:10F4F0001806991FF1CF8695710561050894089546 |
:10F50000E894BB2766277727CB0197F90895629F78 |
:10F51000D001739FF001829FE00DF11D649FE00D0B |
:10F52000F11D929FF00D839FF00D749FF00D659F6C |
:10F53000F00D9927729FB00DE11DF91F639FB00D6B |
:10F54000E11DF91FBD01CF0111240895991B79E038 |
:10F5500004C0991F961708F0961B881F7A95C9F763 |
:10F5600080950895AA1BBB1B51E107C0AA1FBB1FB2 |
:10F57000A617B70710F0A61BB70B881F991F5A953F |
:10F58000A9F780959095BC01CD01089597FB092EB0 |
:10F5900007260AD077FD04D0E5DF06D000201AF454 |
:10F5A000709561957F4F0895F6F7909581959F4FDF |
:10F5B0000895A1E21A2EAA1BBB1BFD010DC0AA1FB4 |
:10F5C000BB1FEE1FFF1FA217B307E407F50720F0CC |
:10F5D000A21BB30BE40BF50B661F771F881F991F47 |
:10F5E0001A9469F760957095809590959B01AC0190 |
:10F5F000BD01CF01089597FB092E05260ED057FDBA |
:10F6000004D0D7DF0AD0001C38F4509540953095CF |
:10F6100021953F4F4F4F5F4F0895F6F79095809596 |
:10F62000709561957F4F8F4F9F4F08952F923F9216 |
:10F630004F925F926F927F928F929F92AF92BF9202 |
:10F64000CF92DF92EF92FF920F931F93CF93DF93AE |
:10F65000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE0B |
:10F66000CDBF09942A88398848885F846E847D8458 |
:10F670008C849B84AA84B984C884DF80EE80FD805A |
:10F680000C811B81AA81B981CE0FD11D0FB6F894D0 |
:10F69000DEBF0FBECDBFED010895EE0FFF1F059039 |
:08F6A000F491E02D0994FFCF65 |
:10F6A800035E0A010164FF010020FFFFC01FC01FA5 |
:10F6B800010101737373FF03007D0000C409C409CD |
:10F6C8006400104167696C650051756164726F0070 |
:10F6D8000000000000006400D20101200B050000BA |
:10F6E800ECFF00020406070808080706040200FEEB |
:10F6F800FCFAF9F8F8F8F9FAFCFE00020406070823 |
:10F70800086440415A4655326464640A02969696E3 |
:10F71800960840403A1030380132FF03780090D004 |
:10F72800030090D0030032002064FFFF64200B0A1E |
:10F738000D0B0E100B0A0C0F0B1110FA20680101AB |
:08F74800010170FF010F6400D4 |
:00000001FF |
/branches/V0.91L_ACC-HH_MartinR/Hex-Files/License.txt |
---|
0,0 → 1,69 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/branches/V0.91L_ACC-HH_MartinR/Hex-Files/WasIstWas.txt |
---|
0,0 → 1,14 |
+++++++++++++++++++++++++ |
+ Flight-Ctrl: |
+++++++++++++++++++++++++ |
Flight-Ctrl_MEGA1284_Vx_yy.hex |
Flight-Ctrl_MEGA644_Vx_yy.hex |
Aktuelle Firmware |
Wird per serielle Schnittstelle (durch den Bootloader) eingespielt |
Achtung: Die Programme für den ATMEGA1284 dürfen ausschliesslich per Bootloader, also seriell (MKUSB) eingespielt werden und NICHT per ISP |
Warning: do not program the ATMEGA1284 (FC2.1) via SPI. Only use the MKUSB and the Koptertool for update! |
/branches/V0.91L_ACC-HH_MartinR/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/branches/V0.91L_ACC-HH_MartinR/Settings.h |
---|
--- Spektrum.c (nonexistent) |
+++ Spektrum.c (revision 2360) |
@@ -0,0 +1,406 @@ |
+/*####################################################################################### |
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
+#######################################################################################*/ |
+ |
+#include "Spektrum.h" |
+#include "main.h" |
+ |
+unsigned char SpektrumTimer = 0; |
+ |
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander |
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
+signed char s_exdata[11]; // Data for Spektrum-Expander |
+ |
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in |
+{ |
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3; |
+ else PPM_diff[channel] = 0; |
+ PPM_in[channel] = value; |
+} |
+#endif |
+ |
+//############################################################################ |
+// USART1 initialisation from killagreg |
+void SpektrumUartInit(void) |
+//############################################################################ |
+ { |
+ // -- Start of USART1 initialisation for Spekturm seriell-mode |
+ // USART1 Control and Status Register A, B, C and baud rate register |
+ uint8_t sreg = SREG; |
+ |
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1); |
+ |
+ // disable all interrupts before reconfiguration |
+ cli(); |
+ // disable RX-Interrupt |
+ UCSR1B &= ~(1 << RXCIE1); |
+ // disable TX-Interrupt |
+ UCSR1B &= ~(1 << TXCIE1); |
+ // disable DRE-Interrupt |
+ UCSR1B &= ~(1 << UDRIE1); |
+/* |
+ // set direction of RXD1 and TXD1 pins |
+ // set RXD1 (PD2) as an input pin |
+ PORTD |= (1 << PORTD2); |
+ DDRD &= ~(1 << DDD2); |
+ // set TXD1 (PD3) as an output pin |
+ PORTD |= (1 << PORTD3); |
+ DDRD |= (1 << DDD3); |
+*/ |
+ // USART0 Baud Rate Register |
+ // set clock divider |
+ UBRR1H = (uint8_t)(ubrr>>8); |
+ UBRR1L = (uint8_t)ubrr; |
+ // enable double speed operation |
+ UCSR1A |= (1 << U2X1); |
+ // enable receiver and transmitter |
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
+ |
+ UCSR1B = (1<<RXEN1); |
+ // set asynchronous mode |
+ UCSR1C &= ~(1 << UMSEL11); |
+ UCSR1C &= ~(1 << UMSEL10); |
+ // no parity |
+ UCSR1C &= ~(1 << UPM11); |
+ UCSR1C &= ~(1 << UPM10); |
+ // 1 stop bit |
+ UCSR1C &= ~(1 << USBS1); |
+ // 8-bit |
+ UCSR1B &= ~(1 << UCSZ12); |
+ UCSR1C |= (1 << UCSZ11); |
+ UCSR1C |= (1 << UCSZ10); |
+ // flush receive buffer explicit |
+ while(UCSR1A & (1<<RXC1)) UDR1; |
+ // enable RX-interrupts at the end |
+ UCSR1B |= (1 << RXCIE1); |
+ // -- End of USART1 initialisation |
+ // restore global interrupt flags |
+ |
+ SREG = sreg; |
+ return; |
+ } |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) Rainer Walther |
+// + RC-routines from original MK rc.c (c) H&I |
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2 |
+// + only for non-profit use |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// |
+// 20080808 rw Modified for Spektrum AR6100 (PPM) |
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only) |
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels) |
+// Replace AR6100-coding with original composit-signal routines |
+// |
+// --- |
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben! |
+// Binding is not implemented. Bind with external Receiver. |
+// Servo output J3, J4, J5 not serviced |
+// |
+// Anschuß Spektrum Receiver |
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!) |
+// Schwarz: GND |
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker |
+// |
+// --- |
+// Satellite-Reciever connected on USART1: |
+// |
+// DX7/DX6i: One data-frame at 115200 baud every 22ms. |
+// DX7se: One data-frame at 115200 baud every 11ms. |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data (FLT-Mode) |
+// byte5: and byte6: channel data (Roll) |
+// byte7: and byte8: channel data (Nick) |
+// byte9: and byte10: channel data (Gier) |
+// byte11: and byte12: channel data (Gear Switch) |
+// byte13: and byte14: channel data (Gas) |
+// byte15: and byte16: channel data (AUX2) |
+// |
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9 |
+// 1st Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: channel data |
+// byte9: and byte10: channel data |
+// byte11: and byte12: channel data |
+// byte13: and byte14: channel data |
+// byte15: and byte16: channel data |
+// 2nd Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: 0xffff |
+// byte9: and byte10: 0xffff |
+// byte11: and byte12: 0xffff |
+// byte13: and byte14: 0xffff |
+// byte15: and byte16: 0xffff |
+// |
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as: |
+// |
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 |
+// |
+// 0 means a '0' bit |
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only) |
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter) |
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel |
+// |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#define MIN_FRAMEGAP 68 // 7ms |
+#define MAX_BYTEGAP 3 // 310us |
+ |
+ |
+//############################################################################ |
+// Wird im UART-Interrupt aufgerufen |
+//############################################################################ |
+void SpektrumParser(unsigned char c) |
+{ |
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0; |
+ unsigned int Channel, index = 0; |
+ signed int signal = 0, tmp; |
+ int bCheckDelay; |
+// c = UDR1; // get data byte |
+ if(ReSync == 1) |
+ { |
+ // wait for beginning of new frame |
+ ReSync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ else |
+ { |
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer); |
+ if ( Sync == 0 ) |
+ { |
+ if(bCheckDelay) |
+ { |
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden |
+ // Zeichen ignorieren, da Bedeutung unbekannt |
+ Sync = 1; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else |
+ { |
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause |
+ // warten auf erstes Sync-Zeichen |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ } |
+ else if((Sync == 1) && !bCheckDelay) |
+ { |
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt |
+ Sync = 2; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else if((Sync == 2) && !bCheckDelay) |
+ { |
+ SpektrumTimer = MAX_BYTEGAP; |
+ // Datenbyte high |
+ ByteHigh = c; |
+ if (FrameCnt == 2) |
+ { |
+ // is 1st Byte of Channel-data |
+ // Frame 1 with Channel 1-7 comming next |
+ Frame2 = 0; |
+ if(ByteHigh & 0x80) |
+ { |
+ // DS9: Frame 2 with Channel 8-9 comming next |
+ Frame2 = 1; |
+ } |
+ } |
+ Sync = 3; |
+ FrameCnt ++; |
+ } |
+ else if((Sync == 3) && !bCheckDelay) |
+ { |
+ // Datenbyte low |
+ // High-Byte for next channel comes next |
+ SpektrumTimer = MAX_BYTEGAP; |
+ Sync = 2; |
+ FrameCnt ++; |
+ Channel = ((unsigned int)ByteHigh << 8) | c; |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 0x200; // Offset, range 0x000..0x3ff? |
+ signal = signal/3; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ else |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES) |
+ { |
+ signal = Channel & 0x7ff; |
+ signal -= 0x400; // Offset, range 0x000..0x7ff? |
+ signal = signal/6; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 3) & 0x0f; |
+ } |
+ else |
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 360; // Offset, range 0x000..0x3ff? |
+ signal = signal/2; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ |
+ index++; |
+ if(index < 13) |
+ { |
+ // Stabiles Signal |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
+ else if (index == 4) index = 2; |
+#endif |
+ if(abs(signal - PPM_in[index]) < 6) |
+ { |
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
+ { |
+ if(SenderOkay < 200) SenderOkay += 10; |
+ else |
+ { |
+ SenderOkay = 200; |
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
+ } |
+ } |
+ } |
+ tmp = (3 * (PPM_in[index]) + signal) / 4; |
+ if(tmp > signal+1) tmp--; else |
+ if(tmp < signal-1) tmp++; |
+ |
+#ifdef RECEIVER_SPEKTRUM_DX7EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ s_update(6,s_exdata[3]); // Elevator (CH6) |
+ s_update(11,s_exdata[4]); // Aileron (CH11) |
+ s_update(12,s_exdata[5]); // Rudder (CH12) |
+ |
+ if (s_excnt == 9) // New Mode (12 Channels) |
+ { |
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8) |
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8) |
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
+ s_update(10,s_exdata[6]); // AUX2 (CH10) |
+ } |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 5) s_update(7,signal); // Gear (CH7) |
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9) |
+ |
+#elif defined RECEIVER_SPEKTRUM_DX8EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ |
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6) |
+ |
+ |
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9) |
+ |
+ s_update(10,s_exdata[5]); // Gear (CH10) |
+ s_update(12,s_exdata[4]); // Mix (CH12) |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 7) s_update(7,signal); // R Trim (CH7) |
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8) |
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11) |
+ |
+#else |
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
+ else PPM_diff[index] = 0; |
+ PPM_in[index] = tmp; |
+#endif |
+ } |
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren |
+ } |
+ else |
+ { |
+ // hier stimmt was nicht: neu synchronisieren |
+ ReSync = 1; |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ // new frame next, nach fruehestens 7ms erwartet |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ |
+ // 16 Bytes eingetroffen -> Komplett |
+ if(FrameCnt >= 16) |
+ { |
+ // Frame complete |
+ if(Frame2 == 0) |
+ { |
+ // Null bedeutet: Neue Daten |
+ // nur beim ersten Frame (CH 0-7) setzen |
+ if(!ReSync) NewPpmData = 0; |
+ } |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ Sync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ } |
+} |
+ |
+ |
/branches/V0.91L_ACC-HH_MartinR/Spektrum.h |
---|
0,0 → 1,12 |
/*####################################################################################### |
Dekodieren eines Spektrum Signals |
#######################################################################################*/ |
#ifndef _SPEKTRUM_H |
#define _SPEKTRUM_H |
void SpektrumUartInit(void); |
void SpektrumBinding(void); |
extern unsigned char SpektrumTimer; |
extern void SpektrumParser(unsigned char c); |
#endif //_RC_H |
/branches/V0.91L_ACC-HH_MartinR/analog.c |
---|
0,0 → 1,385 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0; |
volatile int HiResNick = 2500, HiResRoll = 2500; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile long SummenHoehe = 0; |
volatile long StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
signed char ExpandBaro = 0; |
volatile int VarioMeter = 0; |
volatile unsigned int ZaehlMessungen = 0; |
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
volatile unsigned char AdReady = 1; |
volatile long HoehenWertF = 0; |
//####################################################################################### |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ANALOG_ON; |
} |
#define DESIRED_H_ADC 800 |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
ExpandBaro = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
{ |
unsigned char off2; |
OCR0A = 150; |
off2 = GetParamByte(PID_PRESSURE_OFFSET); |
if(off2 < 230) off2 += 10; |
OCR0B = off2; |
Delay_ms_Mess(100); |
if(MessLuftdruck > DESIRED_H_ADC) off2 = 240; |
for(; off2 >= 5; off2 -= 5) |
{ |
OCR0B = off2; |
Delay_ms_Mess(50); |
printf("*"); |
if(MessLuftdruck > DESIRED_H_ADC) break; |
} |
SetParamByte(PID_PRESSURE_OFFSET, off2); |
if(off2 >= 15) off = 140; else off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms_Mess(50); |
printf("."); |
if(MessLuftdruck < DESIRED_H_ADC) break; |
} |
DruckOffsetSetting = off; |
} |
#else |
off = GetParamByte(PID_PRESSURE_OFFSET); |
if(off > 20) off -= 10; |
OCR0A = off; |
Delay_ms_Mess(100); |
if(MessLuftdruck < DESIRED_H_ADC) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms_Mess(50); |
printf("."); |
if(MessLuftdruck < DESIRED_H_ADC) break; |
} |
DruckOffsetSetting = off; |
SetParamByte(PID_PRESSURE_OFFSET, off); |
#endif |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE; |
OCR0A = off; |
Delay_ms_Mess(300); |
} |
void SucheGyroOffset(void) |
{ |
unsigned char i, ready = 0; |
int timeout; |
timeout = SetDelay(2000); |
for(i=140; i != 0; i--) |
{ |
if(ready == 3 && i > 10) i = 9; |
ready = 0; |
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); |
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;}; |
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;} |
AdReady = 0; |
ANALOG_ON; |
while(!AdReady); |
if(i<10) Delay_ms_Mess(10); |
} |
Delay_ms_Mess(70); |
} |
/* |
0 n |
1 r |
2 g |
3 y |
4 x |
5 n |
6 r |
7 u |
8 z |
9 L |
10 n |
11 r |
12 g |
13 y |
14 x |
15 n |
16 r |
17 L |
*/ |
//####################################################################################### |
// |
ISR(ADC_vect) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static signed int subcount = 0; |
static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
static signed int accy, accx; |
static long tmpLuftdruck = 0; |
static char messanzahl_Druck = 0; |
switch(state++) |
{ |
case 0: |
nick1 = ADC; |
kanal = AD_ROLL; |
break; |
case 1: |
roll1 = ADC; |
kanal = AD_GIER; |
break; |
case 2: |
gier1 = ADC; |
kanal = AD_ACC_Y; |
break; |
case 3: |
Aktuell_ay = NeutralAccY - ADC; |
accy = Aktuell_ay; |
kanal = AD_ACC_X; |
break; |
case 4: |
Aktuell_ax = ADC - NeutralAccX; |
accx = Aktuell_ax; |
kanal = AD_NICK; |
break; |
case 5: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 6: |
roll1 += ADC; |
kanal = AD_UBAT; |
break; |
case 7: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference |
else |
#endif |
UBat = (3 * UBat + ADC / 3) / 4; |
kanal = AD_ACC_Z; |
break; |
case 8: |
Aktuell_az = ADC; |
AdWertAccHoch = Aktuell_az - NeutralAccZ - (int) NeutralAccZfine; |
if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations |
{ |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 750) |
{ |
subcount += 5; |
if(modell_fliegt < 500) subcount += 10; |
if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
} |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 550) |
{ |
subcount -= 5; |
if(modell_fliegt < 500) subcount -= 10; |
if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
if(CosAttitude > 8192 - 50) // horizontal leveled within 6° |
{ |
if(AdWertAccHoch > 1) |
{ |
if(++subcount > 5000) |
{ |
if(NeutralAccZfine < 6) NeutralAccZfine++; |
subcount -= 5000; |
} |
} |
else |
if(AdWertAccHoch < -1) |
{ |
if(--subcount < -5000) |
{ |
if(NeutralAccZfine > -6) NeutralAccZfine--; |
subcount += 5000; |
} |
} |
} |
#endif |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = AD_DRUCK; |
break; |
// "case 9:" fehlt hier absichtlich |
case 10: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 11: |
roll1 += ADC; |
kanal = AD_GIER; |
break; |
case 12: |
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
else |
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1); |
else AdWertGier = (ADC + gier1); |
kanal = AD_ACC_Y; |
break; |
case 13: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = (Aktuell_ay + accy); |
kanal = AD_ACC_X; |
break; |
case 14: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = (Aktuell_ax + accx); |
kanal = AD_NICK; |
break; |
case 15: |
nick1 += ADC; |
if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4; |
AdWertNick = nick1 / 8; |
nick_filter = (nick_filter + nick1) / 2; |
HiResNick = nick_filter - AdNeutralNick; |
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; |
kanal = AD_ROLL; |
break; |
case 16: |
roll1 += ADC; |
if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4; |
AdWertRoll = roll1 / 8; |
roll_filter = (roll_filter + roll1) / 2; |
HiResRoll = roll_filter - AdNeutralRoll; |
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
kanal = AD_DRUCK; |
break; |
case 17: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
HoehenWertF = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm |
} |
else HoehenWertF = HoehenWert; |
#else |
HoehenWertF = HoehenWert; |
#endif |
state = 0; |
AdReady = 1; |
ZaehlMessungen++; |
// "break" fehlt hier absichtlich |
case 9: |
//MessLuftdruck = ADC; // MartinR: so war es |
MessLuftdruck = ADC + ((Parameter_UserParam4 * AdWertAccHoch) / 256) ; // MartinR: |
// mit Korrektur der Beschleunigungsempfindlichkeit des Luftdrucksensors |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
tmpLuftdruck = MessLuftdruck - 523 * (long)ExpandBaro; // -523 counts per offset step |
Luftdruck -= Luftdruck/16; |
Luftdruck += tmpLuftdruck; |
HoehenWert = StartLuftdruck - Luftdruck; // cm |
} |
else |
#endif |
{ // old version (until FC V2.1) |
tmpLuftdruck += MessLuftdruck; |
if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
{ |
signed int tmp; |
Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
HoehenWert = StartLuftdruck - Luftdruck; |
SummenHoehe -= SummenHoehe/SM_FILTER; |
SummenHoehe += HoehenWert; |
tmp = (HoehenWert - SummenHoehe/SM_FILTER); |
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
tmpLuftdruck /= 2; |
messanzahl_Druck = 16/2; |
} |
} |
kanal = AD_NICK; |
break; |
default: |
kanal = 0; state = 0; kanal = AD_NICK; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/branches/V0.91L_ACC-HH_MartinR/analog.h |
---|
0,0 → 1,49 |
#ifndef _ANALOG_H |
#define _ANALOG_H |
/*####################################################################################### |
#######################################################################################*/ |
#define SM_FILTER 16 |
#define SA_FILTER 512 |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int HiResNick, HiResRoll; |
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile long SummenHoehe; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern signed char ExpandBaro; |
extern volatile int VarioMeter; |
extern volatile unsigned int MessLuftdruck; |
extern volatile long StartLuftdruck; |
extern volatile char MessanzahlNick; |
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier; |
extern volatile unsigned char AdReady; |
volatile long HoehenWertF; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
void SucheGyroOffset(void); |
#define AD_GIER 0 |
#define AD_ROLL 1 |
#define AD_NICK 2 |
#define AD_DRUCK 3 |
#define AD_UBAT 4 |
#define AD_ACC_Z 5 |
#define AD_ACC_Y 6 |
#define AD_ACC_X 7 |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
//Signle trigger Mode, Interrupt on |
#endif //_ANALOG_H |
/branches/V0.91L_ACC-HH_MartinR/capacity.c |
---|
0,0 → 1,144 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "capacity.h" |
#include "twimaster.h" |
#include "main.h" |
#include "timer0.h" |
#include "analog.h" |
#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms |
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A |
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A |
// global varialbles |
unsigned short update_timer = 0; |
Capacity_t Capacity; |
// initialize capacity calculation |
void Capacity_Init(void) |
{ |
Capacity.ActualCurrent = 0; |
Capacity.UsedCapacity = 0; |
Capacity.ActualPower = 0; |
Capacity.MinOfMaxPWM = 0; |
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL); |
} |
// called in main loop at a regular interval |
void Capacity_Update(void) |
{ |
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060 |
static unsigned short SubCounter = 0; |
static unsigned short CurrentOffset = 0; |
static unsigned long SumCurrentOffset = 0; |
unsigned char i, NumOfMotors, MinOfMaxPWM; |
if(CheckDelay(update_timer)) |
{ |
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks |
// determine sum of all present BL currents and setpoints |
Current = 0; |
SetSum = 0; |
NumOfMotors = 0; |
MinOfMaxPWM = 255; |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
NumOfMotors++; |
Current += (unsigned int)(Motor[i].Current); |
SetSum += (unsigned int)(Motor[i].SetPoint); |
if(Motor[i].MaxPWM < MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; |
} |
} |
Capacity.MinOfMaxPWM = MinOfMaxPWM; |
if(SetSum == 0) // if all setpoints are 0 |
{ // determine offsets of motor currents |
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time |
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE); |
SumCurrentOffset -= CurrentOffset; |
SumCurrentOffset += Current; |
// after averaging set current to static offset |
Current = FC_OFFSET_CURRENT; |
} |
else // some motors are running, includes also motor test condition, where "MotorRunning" is false |
{ // subtract offset |
if(Current > CurrentOffset) Current -= CurrentOffset; |
else Current = 0; |
// add the FC and BL Offsets |
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT; |
} |
// update actual Current |
Capacity.ActualCurrent = Current; |
// update actual Power |
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution |
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W |
// update used capacity |
SubCounter += Current; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
if(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} // EOF check delay update timer |
} |
/branches/V0.91L_ACC-HH_MartinR/capacity.h |
---|
0,0 → 1,18 |
#ifndef _CAPACITY_H |
#define _CAPACITY_H |
typedef struct |
{ |
unsigned short ActualCurrent; // in 0.1A Steps |
unsigned short ActualPower; // in 0.1W |
unsigned short UsedCapacity; // in mAh |
unsigned char MinOfMaxPWM; // BL Power Limit |
} __attribute__((packed)) Capacity_t; |
extern Capacity_t Capacity; |
void Capacity_Init(void); |
void Capacity_Update(void); |
#endif //_CAPACITY_H |
/branches/V0.91L_ACC-HH_MartinR/debug.c |
---|
0,0 → 1,48 |
#include "main.h" |
#include "debug.h" |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#warning : "### DEBUG-Funktion aktiv ###" |
unsigned char Debug_BufPtr = 0; |
struct str_Debug tDebug; |
unsigned char SendDebugOutput = 0; |
// function called from _printf_P to output character |
void Debug_Putchar(char c) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer |
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow |
} |
} |
void DebugSend(unsigned char cmd) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Cmd = cmd; |
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker |
Debug_BufPtr = 0; // set bufferindex to 0 |
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function |
} |
} |
#endif |
/* |
add the following code block to the serial transmit function |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
*/ |
/branches/V0.91L_ACC-HH_MartinR/debug.h |
---|
0,0 → 1,60 |
#ifndef _DEBUG_H |
#define _DEBUG_H |
// ---------------------------------------------- |
#define CMD_NONE 0x00 |
#define CMD_RAW_OUTPUT 0x01 |
#define CMD_ERROR_MSG 0x02 |
#define CMD_WARNING_MSG 0x04 |
#define CMD_GREEN_MSG 0x08 |
// debug console in MK-Tool can also handle ANSI ESC seq. |
#define ANSI_ATTRIBUTE_OFF "\033[0m" |
#define ANSI_BOLD "\033[1m" |
#define ANSI_UNDERSCORE "\033[4m" |
#define ANSI_BLINK "\033[5m" |
#define ANSI_INVERSE "\033[7m" |
#define ANSI_INVISIBLE "\033[8m" |
#define ANSI_COLOR_BLACK "\033[30m" |
#define ANSI_COLOR_RED "\033[31m" |
#define ANSI_COLOR_GREEN "\033[32m" |
#define ANSI_COLOR_YELLOW "\033[33m" |
#define ANSI_COLOR_BLUE "\033[34m" |
#define ANSI_COLOR_VIOLETT "\033[35m" |
#define ANSI_COLOR_KOBALTBLUE "\033[36m" |
#define ANSI_COLOR_WHITE "\033[37m" |
#define ANSI_CLEAR "\033[2J" |
#define ANSI_HOME "\033[H" |
// macros for easier use |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); } |
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); } |
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); } |
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); } |
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); } |
struct str_Debug |
{ |
unsigned char Cmd; // bitcoded command |
char Text[32]; |
}; |
extern struct str_Debug tDebug; |
unsigned char SendDebugOutput; |
void Debug_Putchar(char c); |
void DebugSend(unsigned char cmd); |
#else // dummy macros (won't waste flash, if #DEBUG is disabled) |
#define Debug(format, args...) ; |
#define Debug_Raw(format, args...) ; |
#define Debug_Warning(format, args...) ; |
#define Debug_Error(format, args...) ; |
#define Debug_OK(format, args...) ; |
#endif |
// ---------------------------------------------- |
#endif |
/branches/V0.91L_ACC-HH_MartinR/eeprom.c |
---|
0,0 → 1,653 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#include <avr/eeprom.h> |
#include <string.h> |
#include "eeprom.h" |
#include "uart.h" |
#include "led.h" |
#include "main.h" |
#include "fc.h" |
#include "twimaster.h" |
paramset_t EE_Parameter; |
MixerTable_t Mixer; |
uint8_t RequiredMotors; |
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t i; |
for(i=0; i<len; i++) |
{ |
crc += pBuffer[i]; |
} |
return crc; |
} |
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t off; |
for(off=0; off<len; off++) |
{ |
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));; |
} |
return crc; |
} |
void ParamSet_DefaultStickMapping(void) |
{ |
EE_Parameter.Kanalbelegung[K_GAS] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_NICK] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.Kanalbelegung[K_POTI5] = 9; |
EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
} |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void CommonDefaults(void) |
{ |
EE_Parameter.Revision = EEPARAM_REVISION; |
memset(EE_Parameter.Name,0,12); // delete name |
if(PlatinenVersion >= 20) |
{ |
EE_Parameter.Gyro_D = 10; |
EE_Parameter.Driftkomp = 0; |
EE_Parameter.GyroAccFaktor = 27; |
EE_Parameter.WinkelUmschlagNick = 78; |
EE_Parameter.WinkelUmschlagRoll = 78; |
} |
else |
{ |
EE_Parameter.Gyro_D = 3; |
EE_Parameter.Driftkomp = 32; |
EE_Parameter.GyroAccFaktor = 30; |
EE_Parameter.WinkelUmschlagNick = 85; |
EE_Parameter.WinkelUmschlagRoll = 85; |
} |
EE_Parameter.GyroAccAbgleich = 32; // 1/k |
EE_Parameter.BitConfig = 0; // Looping usw. |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP | CFG_LEARNABLE_CAREFREE; |
EE_Parameter.Receiver = RECEIVER_HOTT; |
EE_Parameter.MotorSafetySwitch = 0; |
EE_Parameter.ExternalControl = 0; |
EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
EE_Parameter.KompassWirkung = 64; // Wert : 0-247 |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.HoeheChannel = 5; // Wert : 0-32 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
EE_Parameter.Hoehe_P = 20; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 40; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 1; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 127;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL;// |
EE_Parameter.FailSafeTime = 30; // 0 = off |
} |
else |
#endif |
{ |
EE_Parameter.Hoehe_P = 15; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL; |
EE_Parameter.FailSafeTime = 0; // 0 = off |
} |
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag) |
EE_Parameter.StartLandChannel = 0; |
EE_Parameter.LandingSpeed = 12; |
EE_Parameter.UserParam1 = 0; // zur freien Verwendung //MartinR: Umschaltung HH-Mode |
EE_Parameter.UserParam2 = 40; // zur freien Verwendung //MartinR: I-Faktor im HH-Mode |
EE_Parameter.UserParam3 = 7; // zur freien Verwendung //MartinR: Stick-P-Wert im HH-Mode |
EE_Parameter.UserParam4 = 8; // zur freien Verwendung //MartinR: Beschleunigungskompensation des Höhensensors: |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung // MartinR: |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung // MartinR: |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung //MartinR: Abschaltung des Kameraausgleichs: <50: mit Ausgleich, 50..100 nur Rollausgleich (kein Nickausgleich), >100: kein Ausgleich |
EE_Parameter.UserParam8 = 125; // zur freien Verwendung //MartinR: Pan Servo |
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 24; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickRefresh = 4; |
EE_Parameter.Servo3 = 125; |
EE_Parameter.Servo4 = 125; |
EE_Parameter.Servo5 = 125; |
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoManualControlSpeed = 60; |
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps |
EE_Parameter.J16Bitmask = 95; |
EE_Parameter.J17Bitmask = 243; |
EE_Parameter.WARN_J16_Bitmask = 0xAA; |
EE_Parameter.WARN_J17_Bitmask = 0xAA; |
EE_Parameter.J16Timing = 40; |
EE_Parameter.J17Timing = 40; |
EE_Parameter.NaviOut1Parameter = 0; // Photo release in meter |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.NaviGpsModeChannel = 6; // Kanal 6 |
EE_Parameter.NaviGpsGain = 100; |
EE_Parameter.NaviGpsP = 100; |
EE_Parameter.NaviGpsI = 90; |
EE_Parameter.NaviGpsD = 120; |
EE_Parameter.NaviGpsA = 40; |
EE_Parameter.NaviGpsPLimit = 75; |
EE_Parameter.NaviGpsILimit = 85; |
EE_Parameter.NaviGpsDLimit = 75; |
EE_Parameter.NaviGpsMinSat = 6; |
EE_Parameter.NaviStickThreshold = 8; |
EE_Parameter.NaviWindCorrection = 50; |
EE_Parameter.NaviAccCompensation = 42; |
EE_Parameter.NaviOperatingRadius = 245; |
EE_Parameter.NaviAngleLimitation = 140; |
EE_Parameter.NaviPH_LoginTime = 2; |
EE_Parameter.OrientationAngle = 0; |
EE_Parameter.CareFreeChannel = 0; |
EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent) |
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.MotorSmooth = 0; |
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change |
EE_Parameter.MaxAltitude = 150; // 0 = off |
EE_Parameter.AchsKopplung1 = 125; |
EE_Parameter.AchsKopplung2 = 52; |
EE_Parameter.FailsafeChannel = 0; |
EE_Parameter.ServoFilterNick = 0; |
EE_Parameter.ServoFilterRoll = 0; |
} |
/* |
void ParamSet_DefaultSet1(void) // sport |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 14; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 12; // Wert : 1-20 |
EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 1; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k; |
EE_Parameter.DynamicStability = 100; |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
*/ |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void ParamSet_DefaultSet1(void) // normal |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 10; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 60; |
EE_Parameter.DynamicStability = 75; |
memcpy(EE_Parameter.Name, "Fast",4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 2 */ |
/***************************************************/ |
void ParamSet_DefaultSet2(void) // Agil |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 8; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Agile",5); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 3 */ |
/***************************************************/ |
void ParamSet_DefaultSet3(void) // Easy |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 6; // Wert : 1-20 |
EE_Parameter.Stick_D = 10; // Wert : 0-20 |
EE_Parameter.StickGier_P = 4; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Easy", 4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as byte */ |
/***************************************************/ |
uint8_t GetParamByte(uint16_t param_id) |
{ |
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as byte */ |
/***************************************************/ |
void SetParamByte(uint16_t param_id, uint8_t value) |
{ |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as word */ |
/***************************************************/ |
uint16_t GetParamWord(uint16_t param_id) |
{ |
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as word */ |
/***************************************************/ |
void SetParamWord(uint16_t param_id, uint16_t value) |
{ |
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter Set from EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
uint16_t eeaddr; |
// range the setnumber |
if((1 > setnumber) || (setnumber > 5)) setnumber = 3; |
// calculate eeprom addr |
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1); |
// calculate checksum from eeprom |
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1); |
// check crc |
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0; |
// read paramset from eeprom |
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
/***************************************************/ |
/* Write Parameter Set to EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) return 0; |
LIBFC_CheckSettings(); |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas |
{ |
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas |
} |
// update checksum |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
// write paramset to eeprom |
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
// backup channel settings to separate block in eeprom |
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
// write crc of channel block to eeprom |
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung)); |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc); |
// update active settings number |
SetActiveParamSet(setnumber); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
// wrong revision |
return 0; |
} |
/***************************************************/ |
/* Read MixerTable from EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_ReadFromEEProm(void) |
{ |
uint8_t crc; |
// calculate checksum in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1); |
// check crc |
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0; |
// read mixer table |
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
/***************************************************/ |
/* Write Mixer Table to EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_WriteToEEProm(void) |
{ |
if(Mixer.Revision == EEMIXER_REVISION) |
{ |
// update crc |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
// write to eeprom |
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
else return 0; |
} |
/***************************************************/ |
/* Default Values for Mixer Table */ |
/***************************************************/ |
void MixerTable_Default(void) // Quadro |
{ |
uint8_t i; |
Mixer.Revision = EEMIXER_REVISION; |
// clear mixer table |
for(i = 0; i < 16; i++) |
{ |
Mixer.Motor[i][MIX_GAS] = 0; |
Mixer.Motor[i][MIX_NICK] = 0; |
Mixer.Motor[i][MIX_ROLL] = 0; |
Mixer.Motor[i][MIX_YAW] = 0; |
} |
// default = Quadro |
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64; |
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64; |
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64; |
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64; |
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12); |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
} |
/***************************************************/ |
/* Get active parameter set */ |
/***************************************************/ |
uint8_t GetActiveParamSet(void) |
{ |
uint8_t setnumber; |
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET)); |
if(setnumber > 5) |
{ |
setnumber = 3; |
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber); |
} |
ActiveParamSet = setnumber; |
return(setnumber); |
} |
/***************************************************/ |
/* Set active parameter set */ |
/***************************************************/ |
void SetActiveParamSet(uint8_t setnumber) |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) setnumber = 1; |
ActiveParamSet = setnumber; |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber); |
} |
/***************************************************/ |
/* Set default parameter set */ |
/***************************************************/ |
void SetDefaultParameter(uint8_t set, uint8_t restore_channels) |
{ |
if(set > 5) set = 5; |
else if(set < 1) set = 1; |
switch(set) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Kamera |
break; |
case 3: |
ParamSet_DefaultSet3(); // Beginner |
break; |
default: |
ParamSet_DefaultSet3(); // Beginner |
break; |
} |
if(restore_channels) |
{ |
uint8_t crc; |
// 1st check for a valid channel backup in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) |
{ |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else ParamSet_DefaultStickMapping(); |
} |
else ParamSet_DefaultStickMapping(); |
ParamSet_WriteToEEProm(set); |
} |
/***************************************************/ |
/* Initialize EEPROM Parameter Sets */ |
/***************************************************/ |
void ParamSet_Init(void) |
{ |
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION)) |
{ |
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2 |
SetParamByte(PID_HARDWARE_VERSION,PlatinenVersion); // Remember the Version number |
wdt_enable(WDTO_15MS); // Reset-Commando |
printf("\n\r--> Hardware Version Byte Changed <--"); |
while(1); |
} |
#endif |
if((EEPARAM_REVISION) != GetParamByte(PID_EE_REVISION)) |
{ |
ee_default = 1; // software update or forced by mktool |
} |
// 1st check for a valid channel backup in eeprom |
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1; |
// parameter check |
// check all 5 parameter settings |
for (i = 1;i < 6; i++) |
{ |
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom |
{ |
bad_params = 1; |
printf("\n\rGenerating default Parameter Set %d",i); |
switch(i) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Normal |
break; |
default: |
ParamSet_DefaultSet3(); // Easy |
break; |
} |
if(channel_backup) // if we have an channel mapping backup in eeprom |
{ // restore it from eeprom |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else |
{ // use default mapping |
ParamSet_DefaultStickMapping(); |
} |
ParamSet_WriteToEEProm(i); |
} |
} |
if(bad_params) // at least one of the parameter settings were invalid |
{ |
// default-Setting is parameter set 3 |
SetActiveParamSet(3); |
} |
// read active parameter set to ParamSet stucture |
i = GetActiveParamSet(); |
ParamSet_ReadFromEEProm(i); |
printf("\n\rUsing Parameter Set %d", i); |
// load mixer table |
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() ) |
{ |
printf("\n\rGenerating default Mixer Table"); |
MixerTable_Default(); // Quadro |
MixerTable_WriteToEEProm(); |
} |
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION)); |
// determine motornumber |
RequiredMotors = 0; |
for(i = 0; i < 16; i++) |
{ |
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++; |
} |
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors); |
PrintLine();// ("\n\r==================================="); |
} |
/branches/V0.91L_ACC-HH_MartinR/eeprom.h |
---|
0,0 → 1,281 |
#ifndef _EEPROM_H |
#define _EEPROM_H |
#include <inttypes.h> |
#include "twimaster.h" |
#define EEPARAM_REVISION 95 // is count up, if paramater stucture has changed (compatibility) |
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility) |
#define EEPROM_ADR_PARAM_BEGIN 0 |
#define EE_DUMMY 0 // Byte |
#define PID_EE_REVISION 1 // byte |
#define PID_ACTIVE_SET 2 // byte |
#define PID_PRESSURE_OFFSET 3 // byte |
#define PID_ACC_NICK 4 // word |
#define PID_ACC_ROLL 6 // word |
#define PID_ACC_TOP 8 // word |
#define PID_FLIGHT_MINUTES_TOTAL 10 // word |
#define PID_FLIGHT_MINUTES 14 // word |
#define PID_SPEAK_HOTT_CFG 16 // Byte |
#define PID_HARDWARE_VERSION 17 // Byte |
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc |
#define EEPROM_ADR_PARAMSET 100 // 100 - 725, 5 * 125 bytes |
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes |
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes |
#define MIX_GAS 0 |
#define MIX_NICK 1 |
#define MIX_ROLL 2 |
#define MIX_YAW 3 |
typedef struct |
{ |
uint8_t Revision; |
int8_t Name[12]; |
int8_t Motor[16][4]; |
uint8_t crc; |
} __attribute__((packed)) MixerTable_t; |
extern MixerTable_t Mixer; |
extern uint8_t RequiredMotors; |
//GlobalConfig3 |
#define CFG3_NO_SDCARD_NO_START 0x01 |
#define CFG3_DPH_MAX_RADIUS 0x02 |
#define CFG3_VARIO_FAILSAFE 0x04 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 |
#define CFG3_NO_GPSFIX_NO_START 0x10 |
#define CFG3_USE_NC_FOR_OUT1 0x20 |
#define CFG3_SPEAK_ALL 0x40 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
//BitConfig |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
#define CFG_MOTOR_BLINK1 0x10 |
#define CFG_MOTOR_OFF_LED1 0x20 |
#define CFG_MOTOR_OFF_LED2 0x40 |
#define CFG_MOTOR_BLINK2 0x80 |
// ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// bit mask for ParamSet.Config0 |
#define CFG0_AIRPRESS_SENSOR 0x01 |
#define CFG0_HEIGHT_SWITCH 0x02 |
#define CFG0_HEADING_HOLD 0x04 |
#define CFG0_COMPASS_ACTIVE 0x08 |
#define CFG0_COMPASS_FIX 0x10 |
#define CFG0_GPS_ACTIVE 0x20 |
#define CFG0_AXIS_COUPLING_ACTIVE 0x40 |
#define CFG0_ROTARY_RATE_LIMITER 0x80 |
// bitcoding for EE_Parameter.ServoCompInvert |
#define SERVO_NICK_INV 0x01 |
#define SERVO_ROLL_INV 0x02 |
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value |
// defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
#define RECEIVER_SPEKTRUM_HI_RES 2 |
#define RECEIVER_SPEKTRUM_LOW_RES 3 |
#define RECEIVER_JETI 4 |
#define RECEIVER_ACT_DSL 5 |
#define RECEIVER_HOTT 6 |
#define RECEIVER_SBUS 7 |
#define RECEIVER_USER 8 |
#define RECEIVER_UNKNOWN 0xFF |
// defines for lookup ParamSet.ChannelAssignment |
#define K_NICK 0 |
#define K_ROLL 1 |
#define K_GAS 2 |
#define K_GIER 3 |
#define K_POTI1 4 |
#define K_POTI2 5 |
#define K_POTI3 6 |
#define K_POTI4 7 |
#define K_POTI5 8 |
#define K_POTI6 9 |
#define K_POTI7 10 |
#define K_POTI8 11 |
// values above 247 representing poti1 to poti8 |
// poti1 = 255 |
// poti2 = 254 |
// poti3 = 253 |
// poti4 = 252 |
// poti5 = 251 |
// poti6 = 250 |
// poti7 = 249 |
// poti8 = 248 |
typedef struct |
{ |
unsigned char Revision; |
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char HoeheChannel; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Hoehe_HoverBand; // Wert : 0-250 |
unsigned char Hoehe_GPS_Z; // Wert : 0-250 |
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char StickGier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char Gyro_D; // Wert : 0-250 |
unsigned char Gyro_Gier_P; // Wert : 10-250 |
unsigned char Gyro_Gier_I; // Wert : 0-250 |
unsigned char Gyro_Stability; // Wert : 0-16 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
//--- Seit V0.75 |
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoRollComp; // Wert : 0-250 |
unsigned char ServoRollMin; // Wert : 0-250 |
unsigned char ServoRollMax; // Wert : 0-250 |
//--- |
unsigned char ServoNickRefresh; // Speed of the Servo |
unsigned char ServoManualControlSpeed;// |
unsigned char CamOrientation; // |
unsigned char Servo3; // Value or mapping of the Servo Output |
unsigned char Servo4; // Value or mapping of the Servo Output |
unsigned char Servo5; // Value or mapping of the Servo Output |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//---Output --------------------------------------------- |
unsigned char J16Bitmask; // for the J16 Output |
unsigned char J16Timing; // for the J16 Output |
unsigned char J17Bitmask; // for the J17 Output |
unsigned char J17Timing; // for the J17 Output |
// seit version V0.75c |
unsigned char WARN_J16_Bitmask; // for the J16 Output |
unsigned char WARN_J17_Bitmask; // for the J17 Output |
//---NaviCtrl--------------------------------------------- |
unsigned char NaviOut1Parameter; // for the J16 Output |
unsigned char NaviGpsModeChannel; // Parameters for the Naviboard |
unsigned char NaviGpsGain; |
unsigned char NaviGpsP; |
unsigned char NaviGpsI; |
unsigned char NaviGpsD; |
unsigned char NaviGpsPLimit; |
unsigned char NaviGpsILimit; |
unsigned char NaviGpsDLimit; |
unsigned char NaviGpsA; |
unsigned char NaviGpsMinSat; |
unsigned char NaviStickThreshold; |
unsigned char NaviWindCorrection; |
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation |
unsigned char NaviOperatingRadius; |
unsigned char NaviAngleLimitation; |
unsigned char NaviPH_LoginTime; |
//---Ext.Ctrl--------------------------------------------- |
unsigned char ExternalControl; // for serial Control |
//---CareFree--------------------------------------------- |
unsigned char OrientationAngle; // Where is the front-direction? |
unsigned char CareFreeChannel; // switch for CareFree |
unsigned char MotorSafetySwitch; |
unsigned char MotorSmooth; |
unsigned char ComingHomeAltitude; |
unsigned char FailSafeTime; |
unsigned char MaxAltitude; |
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost" |
unsigned char ServoFilterNick; |
unsigned char ServoFilterRoll; |
unsigned char StartLandChannel; |
unsigned char LandingSpeed; |
//------------------------------------------------ |
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen |
unsigned char ExtraConfig; // bitcodiert |
unsigned char GlobalConfig3; // bitcodiert |
char Name[12]; |
unsigned char crc; // must be the last byte! |
} paramset_t; // 127 bytes |
#define PARAMSET_STRUCT_LEN sizeof(paramset_t) |
extern paramset_t EE_Parameter; |
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len); |
extern void ParamSet_Init(void); |
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels); |
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber); |
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber); |
extern uint8_t GetActiveParamSet(void); |
extern void SetActiveParamSet(uint8_t setnumber); |
extern uint8_t MixerTable_ReadFromEEProm(void); |
extern uint8_t MixerTable_WriteToEEProm(void); |
extern uint8_t GetParamByte(uint16_t param_id); |
extern void SetParamByte(uint16_t param_id, uint8_t value); |
extern uint16_t GetParamWord(uint16_t param_id); |
extern void SetParamWord(uint16_t param_id, uint16_t value); |
#endif //_EEPROM_H |
/branches/V0.91L_ACC-HH_MartinR/fc.c |
---|
0,0 → 1,2380 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "mymath.h" |
#include "isqrt.h" |
unsigned char h,m,s; |
unsigned int BaroExpandActive = 0; |
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
int TrimNick, TrimRoll; |
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
int Mittelwert_AccNick, Mittelwert_AccRoll; |
unsigned int NeutralAccX=0, NeutralAccY=0; |
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
int NeutralAccZ = 0; |
signed char NeutralAccZfine = 0; |
unsigned char ControlHeading = 0;// in 2° |
long IntegralNick = 0,IntegralNick2 = 0; |
long IntegralRoll = 0,IntegralRoll2 = 0; |
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
long Integral_Gier = 0; |
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
long SummeNick=0,SummeRoll=0; |
volatile long Mess_Integral_Hoch = 0; |
int KompassValue = -1; |
int KompassSollWert = 0; |
//int KompassRichtung = 0; |
char CalculateCompassTimer = 100; |
unsigned char KompassFusion = 32; |
unsigned int KompassSignalSchlecht = 50; |
unsigned char MAX_GAS,MIN_GAS; |
unsigned char HoehenReglerAktiv = 0; |
unsigned char TrichterFlug = 0; |
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
long ErsatzKompass; |
int ErsatzKompassInGrad; // Kompasswert in Grad |
int GierGyroFehler = 0; |
char GyroFaktor,GyroFaktorGier; |
char IntegralFaktor,IntegralFaktorGier; |
int DiffNick,DiffRoll; |
int StickGasHover = 120, HoverGasMin = 0, HoverGasMax = 1023; |
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0; |
unsigned char Poti[9] = {0,0,0,0,0,0,0,0}; |
volatile unsigned char SenderOkay = 0; |
char MotorenEin = 0,StartTrigger = 0; |
long HoehenWert = 0; |
long SollHoehe = 0; |
signed int AltitudeSetpointTrimming = 0; |
long FromNC_AltitudeSetpoint = 0; |
unsigned char FromNC_AltitudeSpeed = 0; |
unsigned char carefree_old = 50; // to make the Beep when switching |
signed char WaypointTrimming = 0; |
int CompassGierSetpoint = 0; |
unsigned char CalibrationDone = 0; |
char NeueKompassRichtungMerken = 0; |
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
//float Ki = FAKTOR_I; |
int Ki = 10300 / 33; |
int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
unsigned char Looping_Nick = 0,Looping_Roll = 0; |
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250 |
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250 |
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250 |
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250 |
unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
unsigned char Parameter_UserParam1 = 0; |
unsigned char Parameter_UserParam2 = 0; |
unsigned char Parameter_UserParam3 = 0; |
unsigned char Parameter_UserParam4 = 0; |
unsigned char Parameter_UserParam5 = 0; |
unsigned char Parameter_UserParam6 = 0; |
unsigned char Parameter_UserParam7 = 0; |
unsigned char Parameter_UserParam8 = 0; |
unsigned char Parameter_NickControl = 100; |
unsigned char Parameter_ServoNickControl = 100; |
unsigned char Parameter_ServoRollControl = 100; |
unsigned char Parameter_ServoNickComp = 50; |
unsigned char Parameter_ServoRollComp = 85; |
unsigned char Parameter_LoopGasLimit = 70; |
unsigned char Parameter_AchsKopplung1 = 90; |
unsigned char Parameter_AchsKopplung2 = 65; |
unsigned char Parameter_CouplingYawCorrection = 64; |
//unsigned char Parameter_AchsGegenKopplung1 = 0; |
unsigned char Parameter_DynamicStability = 100; |
unsigned char Parameter_J16Bitmask; // for the J16 Output |
unsigned char Parameter_J16Timing; // for the J16 Output |
unsigned char Parameter_J17Bitmask; // for the J17 Output |
unsigned char Parameter_J17Timing; // for the J17 Output |
unsigned char Parameter_NaviGpsGain; |
unsigned char Parameter_NaviGpsP; |
unsigned char Parameter_NaviGpsI; |
unsigned char Parameter_NaviGpsD; |
unsigned char Parameter_NaviGpsA; |
unsigned char Parameter_NaviOperatingRadius; |
unsigned char Parameter_NaviWindCorrection; |
unsigned char Parameter_NaviSpeedCompensation; |
unsigned char Parameter_ExternalControl; |
unsigned char Parameter_GlobalConfig; |
unsigned char Parameter_ExtraConfig; |
unsigned char Parameter_MaximumAltitude; |
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
unsigned char CareFree = 0; |
//const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps // MartinR: so war es |
const signed char sintab[62] = { 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 16, 16, 16, 16, 15, 14, 13, 12, 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10, -12, -13, -14, -15, -16, -16, -16, -16, -16, -15, -14, -13, -12, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 16, 16}; // 7,5° steps //MartinR |
signed char cosinus, sinus; // MartinR : extern für PAN-Funktion |
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
//int MaxStickNick = 0,MaxStickRoll = 0; MartinR: so war es |
int MaxStickNick = 0,MaxStickRoll = 0,stick_nick_neutral = 0,stick_roll_neutral = 0; // MartinR: stick_.._neutral hinzugefügt |
//unsigned char stick_p; // MartinR: Test |
unsigned char Parameter_NaviGpsModeControl; // MartinR: |
unsigned int modell_fliegt = 0; |
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
long GIER_GRAD_FAKTOR = 1291; |
signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
signed int tmp_motorwert[MAX_MOTORS]; |
char VarioCharacter = ' '; |
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing |
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while |
signed int Variance = 0; |
signed int CosAttitude; // for projection of hoover gas |
unsigned char ACC_AltitudeControl = 0; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debugwerte zuordnen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void CopyDebugValues(void) |
{ |
DebugOut.Analog[0] = IntegralNick / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[1] = IntegralRoll / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[2] = Mittelwert_AccNick / 4; |
DebugOut.Analog[3] = Mittelwert_AccRoll / 4; |
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier; |
DebugOut.Analog[5] = HoehenWert/10; |
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512); |
DebugOut.Analog[8] = KompassValue; |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[11] = ErsatzKompassInGrad; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
DebugOut.Analog[16] = cosinus; // MartinR: zur Einstellung der Pan-Funktion |
DebugOut.Analog[17] = sinus; // MartinR: test zur Einstellung der Pan-Funktion |
DebugOut.Analog[18] = ServoPanValue; // MartinR: zur Einstellung der Pan-Funktion |
DebugOut.Analog[19] = ServoRollValue; // MartinR: Test |
DebugOut.Analog[20] = ServoNickValue; |
DebugOut.Analog[21] = HoverGas; |
DebugOut.Analog[22] = Capacity.ActualCurrent; |
DebugOut.Analog[23] = Capacity.UsedCapacity; |
DebugOut.Analog[24] = SollHoehe/10; |
DebugOut.Analog[27] = KompassSollWert; |
DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
DebugOut.Analog[30] = GPS_Nick; |
DebugOut.Analog[31] = GPS_Roll; |
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe; |
//DebugOut.Analog[16] = Variance; |
//DebugOut.Analog[17] = VarioMeter; |
//DebugOut.Analog[18] = HoehenWertF; |
//DebugOut.Analog[25] = Parameter_Hoehe_P; |
//DebugOut.Analog[26] = Parameter_Luftdruck_D; |
} |
void Piep(unsigned char Anzahl, unsigned int dauer) |
{ |
unsigned int wait = 0; |
if(MotorenEin) return; //auf keinen Fall im Flug! |
GRN_OFF; |
while(Anzahl--) |
{ |
beeptime = dauer; |
wait = dauer; |
while(beeptime || wait) |
{ |
if(UpdateMotor) |
{ |
UpdateMotor = 0; |
if(!beeptime) wait--; |
LIBFC_Polling(); |
}; |
} |
} |
GRN_ON; |
} |
//############################################################################ |
// Messwerte beim Ermitteln der Nullage |
void CalibrierMittelwert(void) |
//############################################################################ |
{ |
unsigned char i; |
if(PlatinenVersion == 13) SucheGyroOffset(); |
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
ANALOG_OFF; |
MesswertNick = AdWertNick; |
MesswertRoll = AdWertRoll; |
MesswertGier = AdWertGier; |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
// ADC einschalten |
ANALOG_ON; |
for(i=0;i<8;i++) |
{ |
int tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
LIMIT_MIN_MAX(tmp, 0, 255); |
if(Poti[i] > tmp) Poti[i]--; else if(Poti[i] < tmp) Poti[i]++; |
} |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
} |
//############################################################################ |
// Nullwerte ermitteln |
// Parameter: 0 -> after switch on (ignore ACC-Z fault) |
// Parameter: 1 -> before Start |
// Parameter: 2 -> calibrate and store ACC |
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess" |
//############################################################################ |
{ |
unsigned char i, sucess = 1; |
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0; |
VersionInfo.HardwareError[0] = 0; |
// HEF4017Reset_ON; |
NeutralAccX = 0; |
NeutralAccY = 0; |
NeutralAccZ = 0; |
NeutralAccZfine = 0; |
AdNeutralNick = 0; |
AdNeutralRoll = 0; |
AdNeutralGier = 0; |
Parameter_AchsKopplung1 = 0; |
Parameter_AchsKopplung2 = 0; |
ExpandBaro = 0; |
CalibrierMittelwert(); |
Delay_ms_Mess(100); |
CalibrierMittelwert(); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
#define NEUTRAL_FILTER 32 |
for(i=0; i<NEUTRAL_FILTER; i++) |
{ |
Delay_ms_Mess(10); |
gier_neutral += AdWertGier; |
nick_neutral += AdWertNick; |
roll_neutral += AdWertRoll; |
acc_z_neutral += Aktuell_az; |
} |
AdNeutralNick = (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralRoll = (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralGier = (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
NeutralAccZ = (acc_z_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
StartNeutralRoll = AdNeutralRoll; |
StartNeutralNick = AdNeutralNick; |
if(AdjustmentMode == 2) |
{ |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
// Save ACC neutral settings to eeprom |
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX); |
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY); |
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ); |
} |
else |
{ |
// restore from eeprom |
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK); |
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL); |
// strange settings? |
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048)/* || ((unsigned int) NeutralAccZ > 1024)*/) |
{ |
printf("\n\rACC not calibrated!\r\n"); |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
sucess = 0; |
} |
} |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
MesswertNick = 0; |
MesswertRoll = 0; |
MesswertGier = 0; |
Delay_ms_Mess(100); |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick = IntegralNick; |
Mess_IntegralRoll = IntegralRoll; |
Mess_Integral_Gier = 0; |
StartLuftdruck = Luftdruck; |
VarioMeter = 0; |
SummenHoehe = 0; Mess_Integral_Hoch = 0; |
KompassSollWert = KompassValue; |
KompassSignalSchlecht = 100; |
beeptime = 50; |
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L; |
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
ExternHoehenValue = 0; |
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
GierGyroFehler = 0; |
LED_Init(); |
FC_StatusFlags |= FC_STATUS_CALIBRATE; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
for(i=0;i<8;i++) |
{ |
Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
} |
SenderOkay = 100; |
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal |
else |
{ |
// if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4// else |
NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
CalculateServoSignals = 1; |
CalculateServo(); // nick |
CalculateServo(); // roll |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
signed int tilt1, tilt2; |
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
tilt1 = (int16_t)ihypot(tilt1,tilt2); // tilt angle over all |
CosAttitude = c_cos_8192(tilt1); |
NeutralAccZ = (long)((long) (NeutralAccZ - 512) * 8192 + 4096) / CosAttitude + 512; |
if(tilt1 > 20) sucess = 0; // calibration must be within 20° Tilt angle |
if(AdjustmentMode != 0 && ACC_AltitudeControl) if((NeutralAccZ < 682 - 25) || (NeutralAccZ > 682 + 25)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; sucess = 0;}; |
#else |
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP); |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
#endif |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; }; |
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; }; |
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; }; |
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; }; |
if(VersionInfo.HardwareError[0]) sucess = 0; |
carefree_old = 70; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
ACC_AltitudeFusion(2); // initalisation |
#endif |
return(sucess); |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
//############################################################################ |
{ |
static signed long tmpl,tmpl2,tmpl3,tmpl4; |
static signed int oldNick, oldRoll, d2Roll, d2Nick; |
signed long winkel_nick, winkel_roll; |
MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
MesswertNick = (signed int) AdWertNickFilter / 8; |
MesswertRoll = (signed int) AdWertRollFilter / 8; |
RohMesswertNick = MesswertNick; |
RohMesswertRoll = MesswertRoll; |
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L; |
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L; |
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
NaviAccNick += AdWertAccNick; |
NaviAccRoll += AdWertAccRoll; |
NaviCntAcc++; |
IntegralAccZ += Aktuell_az - NeutralAccZ; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// ADC einschalten |
ANALOG_ON; |
AdReady = 0; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
else winkel_roll = Mess_IntegralRoll; |
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L; |
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L; |
else winkel_nick = Mess_IntegralNick; |
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_Integral_Gier += MesswertGier; |
ErsatzKompass += MesswertGier; |
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
{ |
tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
tmpl3 *= Parameter_AchsKopplung2; //65 |
tmpl3 /= 4096L; |
tmpl4 = (MesswertNick * winkel_roll) / 2048L; |
tmpl4 *= Parameter_AchsKopplung2; //65 |
tmpl4 /= 4096L; |
KopplungsteilNickRoll = tmpl3; |
KopplungsteilRollNick = tmpl4; |
tmpl4 -= tmpl3; |
if(IntegralFaktor) // MartinR: nur im ACC-Mode |
{ |
ErsatzKompass += tmpl4; |
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
} |
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
tmpl *= Parameter_AchsKopplung1; // 90 |
tmpl /= 4096L; |
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
tmpl2 *= Parameter_AchsKopplung1; |
tmpl2 /= 4096L; |
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1; |
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
} |
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0; |
TrimRoll = tmpl - tmpl2 / 100L; |
TrimNick = -tmpl2 + tmpl / 100L; |
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralRoll2 += MesswertRoll + TrimRoll; |
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll; |
if(Mess_IntegralRoll > Umschlag180Roll) |
{ |
Mess_IntegralRoll = -(Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(Mess_IntegralRoll <-Umschlag180Roll) |
{ |
Mess_IntegralRoll = (Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralNick2 += MesswertNick + TrimNick; |
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick; |
if(Mess_IntegralNick > Umschlag180Nick) |
{ |
Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(Mess_IntegralNick <-Umschlag180Nick) |
{ |
Mess_IntegralNick = (Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
Integral_Gier = Mess_Integral_Gier; |
IntegralNick = Mess_IntegralNick; |
IntegralRoll = Mess_IntegralRoll; |
IntegralNick2 = Mess_IntegralNick2; |
IntegralRoll2 = Mess_IntegralRoll2; |
#define D_LIMIT 128 |
MesswertNick = HiResNick / 8; |
MesswertRoll = HiResRoll / 8; |
// MartinR : so war es Anfang |
/* |
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
// MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
*/ |
// MartinR : so war es Ende |
#ifdef NO_GYRO_PROGRESSION // MartinR; keine Begrenzung |
#warning : "### NO_GYRO_PROGRESSION ###" |
//nichts tun |
#else // mit Begrenzung |
// MartinR : Neu Anfang |
if(PlatinenVersion == 10) |
{ |
if(AdWertNick > 1010) MesswertNick = +600; |
if(AdWertNick > 1017) MesswertNick = +800; |
if(AdWertNick < 15) MesswertNick = -600; |
if(AdWertNick < 7) MesswertNick = -800; |
if(AdWertRoll > 1010) MesswertRoll = +600; |
if(AdWertRoll > 1017) MesswertRoll = +800; |
if(AdWertRoll < 15) MesswertRoll = -600; |
if(AdWertRoll < 7) MesswertRoll = -800; |
} |
else |
{ |
if(AdWertNick > 2000) MesswertNick = +1200; |
if(AdWertNick > 2015) MesswertNick = +1600; |
if(AdWertNick < 15) MesswertNick = -1200; |
if(AdWertNick < 7) MesswertNick = -1600; |
if(AdWertRoll > 2000) MesswertRoll = +1200; |
if(AdWertRoll > 2015) MesswertRoll = +1600; |
if(AdWertRoll < 15) MesswertRoll = -1200; |
if(AdWertRoll < 7) MesswertRoll = -1600; |
} |
// MartinR : Neu Ende |
#endif |
if(Parameter_Gyro_D) |
{ |
d2Nick = HiResNick - oldNick; |
oldNick = (oldNick + HiResNick)/2; |
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
d2Roll = HiResRoll - oldRoll; |
oldRoll = (oldRoll + HiResRoll)/2; |
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
} |
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
{ |
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256); |
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256); |
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256); |
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256); |
} |
} |
//############################################################################ |
// Senden der Motorwerte per I2C-Bus |
void SendMotorData(void) |
//############################################################################ |
{ |
unsigned char i; |
if(!MotorenEin) |
{ |
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY); |
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF; |
for(i=0;i<MAX_MOTORS;i++) |
{ |
if(!PC_MotortestActive) MotorTest[i] = 0; |
Motor[i].SetPoint = MotorTest[i]; |
Motor[i].SetPointLowerBits = 0; |
/* |
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution |
Motor[i].SetPointLowerBits = MotorTest[i] % 4; |
*/ |
} |
if(PC_MotortestActive) PC_MotortestActive--; |
} |
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN; |
if(I2C_TransferActive) |
{ |
I2C_TransferActive = 0; // enable for the next time |
} |
else |
{ |
motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode |
} |
} |
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel |
{ |
int tmp2; |
if(ch == 0) return(0); |
tmp2 = PPM_in[ch] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
return(tmp2); |
} |
//############################################################################ |
// Trägt ggf. das Poti als Parameter ein |
void ParameterZuordnung(void) |
//############################################################################ |
{ |
unsigned char tmp,i; |
for(i=0;i<8;i++) |
{ |
int tmp2; |
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
tmp2 = PPM_in[tmp] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter |
else |
if(tmp2 != Poti[i]) |
{ |
Poti[i] += (tmp2 - Poti[i]) / 4; |
if(Poti[i] > tmp2) Poti[i]--; |
else Poti[i]++; |
} |
} |
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255); |
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255); |
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} // Out1 (J16) |
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} |
else CHK_POTI_MM(Parameter_Servo3,EE_Parameter.Servo3, 24, 255); |
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} |
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} // Out2 (J17) |
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255); |
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255); |
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel); |
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P); |
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I); |
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor); |
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1); |
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2); |
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3); |
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4); |
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5); |
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6); |
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7); |
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8); |
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl); |
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl); |
CHK_POTI(Parameter_ServoNickComp,EE_Parameter.ServoNickComp); |
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp); |
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit); |
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1); |
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2); |
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude); |
if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude; |
Parameter_GlobalConfig = EE_Parameter.GlobalConfig; |
Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
Ki = 10300 / (Parameter_I_Faktor + 1); |
//Ki = (10300 / (Parameter_I_Faktor + 4)) + (StickGas /2); // MartinR: Test Gasabhängige Regelung |
if(Parameter_UserParam1 > 50) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
//if(Parameter_UserParam1 > 50) KiHH = (10300 / (Parameter_UserParam2 + 4)) + (StickGas /2); else KiHH = Ki; // MartinR : für HH über Schalter // MartinR: Test Gasabhängige Regelung |
//Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
Parameter_NaviGpsModeControl = GetChannelValue(EE_Parameter.NaviGpsModeChannel); //MartinR: Standard: EE_Parameter.NaviGpsModeChannel wird übertragen |
if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
// 0 = free; 100 = AID; 200 = coming home //neu |
MAX_GAS = EE_Parameter.Gas_Max; |
MIN_GAS = EE_Parameter.Gas_Min; |
if(EE_Parameter.CareFreeChannel) |
{ |
CareFree = 1; |
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0; |
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0; |
if(carefree_old != CareFree) |
{ |
if(carefree_old < 3) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; } |
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; } |
#else |
if(CareFree) beeptime = 1500; |
else beeptime = 200; |
#endif |
NeueKompassRichtungMerken = 5; |
carefree_old = CareFree; |
} else carefree_old--; |
} |
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; |
} |
else |
{ |
CareFree = 0; |
carefree_old = 10; |
} |
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert |
{ |
beeptime = 15000; |
BeepMuster = 0xA400; |
CareFree = 0; |
} |
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; /*if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;*/} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE; |
} |
//############################################################################ |
// |
void MotorRegler(void) |
//############################################################################ |
{ |
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
int GierMischanteil,GasMischanteil; |
static long SummeNickHH=0,SummeRollHH=0; // MartinR: hinzugefügt |
static long sollGier = 0,tmp_long,tmp_long2; |
static long IntegralFehlerNick = 0; |
static long IntegralFehlerRoll = 0; |
static unsigned int RcLostTimer; |
static unsigned char delay_neutral = 0; |
static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
static signed char move_safety_switch = 0; |
static long ausgleichNick, ausgleichRoll; |
int IntegralNickMalFaktor,IntegralRollMalFaktor; |
unsigned char i; |
Mittelwert(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gaswert ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE))) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) |
{ |
if(HoverGas && HoverGas < 150 * STICK_GAIN) |
{ |
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas |
} |
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet |
} else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
} |
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
{ |
StickGas = 0; // Hold Gas down in that case |
HooverGasEmergencyPercent = MIN_GAS; |
} |
GasMischanteil = StickGas; |
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Empfang schlecht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)) |
{ |
if(RcLostTimer) RcLostTimer--; |
else |
{ |
MotorenEin = 0; |
modell_fliegt = 0; |
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY); |
} |
ROT_ON; |
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken |
{ |
GasMischanteil = HooverGasEmergencyPercent; |
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING; |
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
} |
else |
{ |
MotorenEin = 0; |
} |
} |
else |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang gut |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay > 140) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
static unsigned int trigger = 1000; |
static unsigned char old_switch = 100; |
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed) |
{ |
if(PPM_in[EE_Parameter.StartLandChannel] > 50) |
{ |
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
old_switch = 150; |
} |
else |
if(PPM_in[EE_Parameter.StartLandChannel] < -50) |
{ |
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING; |
old_switch = 50; |
} |
else |
{ |
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
} |
#endif |
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING; |
RcLostTimer = EE_Parameter.NotGasZeit * 50; |
if(GasMischanteil > 40 && MotorenEin) |
{ |
if(modell_fliegt < 0xffff) modell_fliegt++; |
} |
if((modell_fliegt < 256)) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
old_switch = 100; |
#endif |
} |
else |
{ |
FC_StatusFlags |= FC_STATUS_FLY; |
if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((NC_To_FC_Flags & NC_TO_FC_AUTOSTART || FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) && (VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = 80; |
FromNC_AltitudeSetpoint = 500; |
SollHoehe = 500; |
trigger = 1000; |
if(NC_To_FC_Flags & NC_TO_FC_AUTOSTART) SpeakHoTT = SPEAK_NEXT_WP; |
/* if(StartTrigger != 2) |
{ |
StartTrigger = 1; |
if(HoverGas < STICK_GAIN * 35) HoverGas = STICK_GAIN * 35; |
} |
*/ |
} |
// else FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING); |
#endif |
if(HoehenWertF > 150 || HoehenWert < -350 || !(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
trigger = 1000; |
if(FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) { FromNC_AltitudeSpeed = 0; SollHoehe = 300;/*HoehenWertF + 100;*/} |
else SpeakHoTT = SPEAK_RISING; |
#endif |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
// sollGier = 0; |
if(modell_fliegt > 1000) modell_fliegt = 1000; // for the Hooverpoint-Estimation |
} |
else // Flying mode |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING) && (VarioCharacter == 'v' || VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
if(trigger < 1000) |
{ |
trigger++; |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
SollHoehe = HoehenWertF - 300; |
if(trigger == 1000 && FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING && VarioCharacter != '+') |
{ |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; // go back into starting state |
} |
} |
else |
if(ACC_AltitudeControl && (VarioCharacter == 'v' || VarioCharacter == '-') && HoehenWert < 1000 /*&& FromNC_AltitudeSetpoint < 0*/) |
{ |
if(Aktuell_az > 940) |
{ |
trigger = 0; |
SpeakHoTT = SPEAK_LANDING; |
}; |
} |
#endif |
} |
} // end of: modell_fliegt > 256 |
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// auf Nullwerte kalibrieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
{ |
unsigned char setting=1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
SetActiveParamSet(setting); // aktiven Datensatz merken |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) |
{ |
WinkelOut.CalcState = 1; |
CalibrationDone = 0; |
beeptime = 1000; |
} |
else |
{ |
ParamSet_ReadFromEEProm(ActiveParamSet); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
CalibrationDone = SetNeutral(1); |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
ShowSettingNameTime = 5; // for HoTT & Jeti |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
} |
else |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
CalibrationDone = SetNeutral(2); // store ACC values into EEPROM |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
else delay_neutral = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gas ist unten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < -100) |
{ |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100; |
else |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100; |
// Motoren Starten |
if(!MotorenEin) |
{ |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100))) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Einschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START; |
StartLuftdruck = Luftdruck; |
HoehenWertF = 0; |
HoehenWert = 0; |
SummenHoehe = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) delay_einschalten = 0; |
if(++delay_einschalten > 253) |
{ |
delay_einschalten = 0; |
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode) |
{ |
modell_fliegt = 1; |
MotorenEin = 1; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick2 = IntegralNick; |
Mess_IntegralRoll2 = IntegralRoll; |
SummeNick = 0; |
SummeRoll = 0; |
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
NeueKompassRichtungMerken = 100; // 2 sekunden |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_STARTING; |
#endif |
// MartinR: hinzugefügt Anfang |
stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
SummeNickHH = 0 ; // Zurücksetzen der Integratoren |
SummeRollHH = 0 ; // Zurücksetzen der Integratoren |
// MartinR: hinzugefügt Ende |
} |
else |
{ |
beeptime = 1500; // indicate missing calibration |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
#endif |
} |
} |
} |
else delay_einschalten = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
else // only if motors are running |
{ |
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0)) |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100))) |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) |
{ |
delay_ausschalten = 0; |
} |
else |
{ |
SummeNick = 0; |
SummeRoll = 0; |
StickNick = 0; |
StickRoll = 0; |
} |
if(++delay_ausschalten > 250) // nicht sofort |
{ |
MotorenEin = 0; |
delay_ausschalten = 0; |
modell_fliegt = 0; |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_MK_OFF; |
#endif |
} |
} |
else delay_ausschalten = 0; |
} |
if(GasIsZeroCnt < 1000) GasIsZeroCnt++; |
} |
else // gas not at minimum |
{ |
move_safety_switch = 0; |
GasIsZeroCnt = 0; |
} |
} |
else // Empfang zwischen 100 und 140 -> schlecht |
{ |
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost |
{ |
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed? |
{ |
GasIsZeroCnt = 30000; |
if(modell_fliegt > 1001) modell_fliegt = 1001; |
} |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der Funke |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
static int stick_nick,stick_roll; |
unsigned char stick_p; |
ParameterZuordnung(); |
stick_p = EE_Parameter.Stick_P; |
// MartinR: original: |
/* |
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
*/ |
// MartinR: geändert Anfang |
if(IntegralFaktor) // ACC-Mode |
{ |
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
} |
else // HH-Mode |
{ |
if(Parameter_UserParam1 > 49) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
{ |
stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * Parameter_UserParam3); |
stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * Parameter_UserParam3); |
} |
else |
{ |
stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * stick_p); |
stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * stick_p); |
} |
} |
// MartinR: geändert Ende |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// CareFree und freie Wahl der vorderen Richtung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(CareFree) // MartinR: so war es |
if(CareFree && IntegralFaktor) // MartinR: CareFree nur im ACC-Mode |
{ |
signed int nick, roll; |
nick = stick_nick / 4; |
roll = stick_roll / 4; |
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
} |
else |
{ |
//FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; //MartinR: so war es |
FromNC_Rotate_C = (sintab[EE_Parameter.OrientationAngle * 2 + 12]) / 2; //MartinR: feinere Auflösung |
//FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; //MartinR: so war es |
FromNC_Rotate_S = (sintab[EE_Parameter.OrientationAngle * 2]) / 2; //MartinR: feinere Auflösung |
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
} |
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
if(StickGier > 4) StickGier -= 4; else |
if(StickGier < -4) StickGier += 4; else StickGier = 0; |
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger |
{ |
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16; |
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16; |
} |
StickNick -= GPS_Nick; |
StickRoll -= GPS_Roll; |
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
GyroFaktor = (Parameter_Gyro_P + 10.0); |
// IntegralFaktor = Parameter_Gyro_I; // MartinR: war mal hier |
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
IntegralFaktorGier = Parameter_Gyro_Gier_I; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//+ Analoge Steuerung per Seriell |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
{ |
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
StickGier += ExternControl.Gier; |
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
} |
if(StickGas < 0) StickGas = 0; |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
{ |
MaxStickNick = abs(StickNick)/STICK_GAIN; |
if(MaxStickNick > 100) MaxStickNick = 100; |
} |
else MaxStickNick--; |
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll) |
{ |
MaxStickRoll = abs(StickRoll)/STICK_GAIN; |
if(MaxStickRoll > 100) MaxStickRoll = 100; |
} |
else MaxStickRoll--; |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Looping? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
else |
{ |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
else |
{ |
if(Looping_Rechts) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
else |
{ |
if(Looping_Oben) // Hysterese |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
else |
{ |
if(Looping_Unten) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
} |
} |
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
} // Ende neue Funken-Werte |
if(Looping_Roll || Looping_Nick) |
{ |
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
TrichterFlug = 1; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Bei Empfangsausfall im Flug |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
{ |
StickNick = -GPS_Nick; |
StickRoll = -GPS_Roll; |
StickGas = StickGasHover; |
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER); |
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV; |
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP); |
Parameter_HoehenSchalter = 200; // switch on |
} |
else |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) |
{ |
StickGier = 0; |
StickNick = 0; |
StickRoll = 0; |
GyroFaktor = 90; |
IntegralFaktor = 120; |
GyroFaktorGier = 90; |
IntegralFaktorGier = 120; |
Looping_Roll = 0; |
Looping_Nick = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Integrale auf ACC-Signal abgleichen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ABGLEICH_ANZAHL 256L |
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
MittelIntegralRoll += IntegralRoll; |
MittelIntegralNick2 += IntegralNick2; |
MittelIntegralRoll2 += IntegralRoll2; |
if((!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: |
// nur im Moment des Umschaltens von HH auf ACC erfolgt ein Reset der Integrale, nicht aber bei normalem HH |
// um einen im HH-Mode eventuell schwindelig geflogenen ACC_Mode zu resetten! |
// bis zur Umschaltung werden die Integrale für den Kameraausgleich verwendet |
{ |
IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
Mess_IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
Mess_IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
Mess_Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
sollGier = 0; |
Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
//Mess_Integral_Gier2 = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
KompassSollWert = KompassValue; // MartinR: aktuelle Ausrichtung beibehalten |
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; // MartinR: aktuelle Ausrichtung beibehalten |
NeueKompassRichtungMerken = 1; // MartinR: aktuelle Ausrichtung beibehalten |
} |
// if(Looping_Nick || Looping_Roll) // MartinR: so war es |
if(Looping_Nick || Looping_Roll || (!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: erweitert |
// MartinR: beim ACC-Loop oder beim zurückschalten von HH auf ACC |
{ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
Mess_IntegralNick2 = Mess_IntegralNick; |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
ZaehlMessungen = 0; |
LageKorrekturNick = 0; |
LageKorrekturRoll = 0; |
} |
if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 49)) IntegralFaktor = 0; // MartinR geändert und verschoben |
else IntegralFaktor = Parameter_Gyro_I; // MartinR: geändert |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
{ |
long tmp_long, tmp_long2; |
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/) |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN)); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR)); |
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 2; |
tmp_long2 /= 2; |
} |
if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
} |
else |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
tmp_long /= 16; |
tmp_long2 /= 16; |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
KompassFusion = 25; |
#define AUSGLEICH 32 |
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
} |
Mess_IntegralNick -= tmp_long; |
Mess_IntegralRoll -= tmp_long2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
{ |
static int cnt = 0; |
static char last_n_p,last_n_n,last_r_p,last_r_n; |
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
//if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
{ |
MittelIntegralNick /= ABGLEICH_ANZAHL; |
MittelIntegralRoll /= ABGLEICH_ANZAHL; |
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
#define MAX_I 0 |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL; |
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL; |
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1)) |
{ |
LageKorrekturNick /= 2; |
LageKorrekturRoll /= 2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gyro-Drift ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
tmp_long = IntegralNick2 - IntegralNick; |
tmp_long2 = IntegralRoll2 - IntegralRoll; |
IntegralFehlerNick = tmp_long; |
IntegralFehlerRoll = tmp_long2; |
Mess_IntegralNick2 -= IntegralFehlerNick; |
Mess_IntegralRoll2 -= IntegralFehlerRoll; |
if(EE_Parameter.Driftkomp) |
{ |
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; } |
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; } |
} |
GierGyroFehler = 0; |
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2) |
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4 |
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16 |
#define BEWEGUNGS_LIMIT 20000 |
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerNick > FEHLER_LIMIT2) |
{ |
if(last_n_p) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick > 5000) ausgleichNick = 5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_p = 1; |
} else last_n_p = 0; |
if(IntegralFehlerNick < -FEHLER_LIMIT2) |
{ |
if(last_n_n) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick < -5000) ausgleichNick = -5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_n = 1; |
} else last_n_n = 0; |
} |
else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerRoll > FEHLER_LIMIT2) |
{ |
if(last_r_p) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_p = 1; |
} else last_r_p = 0; |
if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
{ |
if(last_r_n) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_n = 1; |
} else last_r_n = 0; |
} else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
} |
else |
{ |
LageKorrekturRoll = 0; |
LageKorrekturNick = 0; |
TrichterFlug = 0; |
} |
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick_Alt = MittelIntegralNick; |
MittelIntegralRoll_Alt = MittelIntegralRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
IntegralAccZ = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
ZaehlMessungen = 0; |
} // ZaehlMessungen >= ABGLEICH_ANZAHL |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(abs(StickGier) > 3) // war 15 |
{ |
// KompassSignalSchlecht = 1000; |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX)) |
{ |
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen |
}; |
} |
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero |
tmp_int += CompassGierSetpoint; |
sollGier = tmp_int; |
Mess_Integral_Gier -= tmp_int; |
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Kompass |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) // MartinR: so war es |
if((KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) && !(Parameter_UserParam1 > 50)) // MartinR: bei HH über Schalter wird der Kompass abgeschaltet |
{ |
if(CalculateCompassTimer-- == 1) |
{ |
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
CalculateCompassTimer = 13; // falls keine Navi-Daten |
// max. Korrekturwert schätzen |
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
v = abs(IntegralRoll /512); |
if(v > w) w = v; // grösste Neigung ermitteln |
// korrektur = w / 4 + 1; |
korrektur = w / 8 + 2; |
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR; |
// Kompassfehlerwert bestimmen |
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180; |
// GIER_GRAD_FAKTOR ist ca. 1200 |
// Kompasswert einloggen |
if(KompassSignalSchlecht) KompassSignalSchlecht--; |
else |
if(w < 25) |
{ |
GierGyroFehler += fehler; |
if(NeueKompassRichtungMerken) |
{ |
if(--NeueKompassRichtungMerken == 0) |
{ |
KompassSollWert = ErsatzKompassInGrad; |
} |
} |
} |
// Kompass fusionieren |
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur; |
// MK Gieren |
if(!NeueKompassRichtungMerken) |
{ |
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180; |
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten |
CompassGierSetpoint = v / 16; |
} |
else CompassGierSetpoint = 0; |
} // CalculateCompassTimer |
} |
else CompassGierSetpoint = 0; |
//DebugOut.Analog[16] = KompassFusion; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
#define TRIM_MAX 200 |
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
//MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
//MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
if(!IntegralFaktor) // MartinR : HH-Mode hinzugefügt |
{ |
MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
//MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN); |
//Mess_Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
//Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
} |
else // MartinR: ACC-Mode so war es |
{ |
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
} |
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
// Maximalwerte abfangen |
#define MAX_SENSOR (4096) |
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Höhenregelung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
GasMischanteil *= STICK_GAIN; |
//MartinR: Höhenregler nur mit 1284er Prozessor: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// if height control is activated |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
{ |
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define OPA_OFFSET_STEP 15 |
#else |
#define OPA_OFFSET_STEP 10 |
#endif |
int HCGas, GasReduction = 0; |
static int HeightTrimming = 0; // rate for change of height setpoint |
static int HeightDeviation = 0, FilterHCGas = 0; |
static unsigned long HoverGasFilter = 0; |
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0; |
// Expand the measurement |
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs |
if(!BaroExpandActive) |
{ |
if(MessLuftdruck > 920) |
{ // increase offset |
if(OCR0A < (255 - OPA_OFFSET_STEP)) |
{ |
ExpandBaro -= 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down |
beeptime = 300; |
BaroExpandActive = 350; |
} |
else |
{ |
BaroAtLowerLimit = 1; |
} |
} |
// measurement of air pressure close to lower limit and |
else |
if(MessLuftdruck < 100) |
{ // decrease offset |
if(OCR0A > OPA_OFFSET_STEP) |
{ |
ExpandBaro += 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up |
beeptime = 300; |
BaroExpandActive = 350; |
} |
else |
{ |
BaroAtUpperLimit = 1; |
} |
} |
else |
{ |
BaroAtUpperLimit = 0; |
BaroAtLowerLimit = 0; |
} |
} |
else // delay, because of expanding the Baro-Range |
{ |
// now clear the D-values |
VarioMeter = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) ACC_AltitudeFusion(1); // init |
else SummenHoehe = HoehenWert * SM_FILTER; |
#else |
SummenHoehe = HoehenWert * SM_FILTER; |
#endif |
BaroExpandActive--; |
} |
// if height control is activated by an rc channel |
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
{ // check if parameter is less than activation threshold |
// if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR :so war es |
if((Parameter_HoehenSchalter < 50) || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH ohne Höhenregler über UsererParam1 an |
{ //height control not active |
if(!delay--) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
#endif |
HoehenReglerAktiv = 0; // disable height control |
SollHoehe = HoehenWert; // update SetPoint with current reading |
delay = 1; |
} |
} |
else |
if(Parameter_HoehenSchalter > 70) |
{ //height control is activated |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON; |
#endif |
delay = 200; |
HoehenReglerAktiv = 1; // enable height control |
} |
} |
else // no switchable height control |
{ |
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
// HoehenReglerAktiv = 1; // MartinR : so war es |
// MartinR : geändert Anfang |
if(Parameter_UserParam1 > 140) // HH über Schalter: HH an + Höhenregler abgeschaltet, Nachführen von Parametern |
{ |
HoehenReglerAktiv = 0; |
} |
else // Höhenregler mit Sollhöhe über Poti aktiv |
{ |
HoehenReglerAktiv = 1; |
} |
// MartinR : geändert Ende |
} |
// calculate cos of nick and roll angle used for projection of the vertical hoover gas |
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude |
VarioCharacter = ' '; |
AltitudeSetpointTrimming = 0; |
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
#define HEIGHT_CONTROL_STICKTHRESHOLD 15 |
// Holger original version |
// start of height control algorithm |
// the height control is only an attenuation of the actual gas stick. |
// I.e. it will work only if the gas stick is higher than the hover gas |
// and the hover height will be allways larger than height setpoint. |
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL; |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert) |
{ // old version |
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control |
HeightTrimming = 0; |
AltitudeSetpointTrimming = 0; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} |
else |
{ |
// alternative height control |
// PD-Control with respect to hoover point |
// the thrust loss out of horizontal attitude is compensated |
// the setpoint will be fine adjusted with the gas stick position |
if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
{ // gas stick is above hoover point |
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
{ |
if(HeightDeviation > 20) SollHoehe = HoehenWertF; // update setpoint to current heigth |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
// Limit the maximum Altitude |
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0; |
else |
{ |
// SollHoehe = (long) Parameter_MaximumAltitude * 100L; |
// HeightTrimming += abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD)); |
VarioCharacter = '+'; |
} |
WaypointTrimming = 0; |
} // gas stick is below hoover point |
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
// HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
VarioCharacter = '-'; |
WaypointTrimming = 0; |
} |
else // Gas Stick in Hover Range |
{ |
VarioCharacter = '='; |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = FromNC_AltitudeSpeed; |
//HeightTrimming += FromNC_AltitudeSpeed; |
WaypointTrimming = 10; |
VarioCharacter = '^'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed; |
//HeightTrimming -= FromNC_AltitudeSpeed; |
WaypointTrimming = -10; |
VarioCharacter = 'v'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
{ |
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-200), (HoehenWertF+200)) // max. 2m Unterschied |
else WaypointTrimming = 0; |
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
HeightTrimming = 0; |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500; |
if(!StartTrigger && HoehenWert > 50) |
{ |
StartTrigger = 1; |
} |
} |
} |
// Trim height set point |
HeightTrimming += AltitudeSetpointTrimming; |
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz |
{ |
if(WaypointTrimming) |
{ |
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint; |
else SollHoehe += WaypointTrimming; |
} |
else |
{ |
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3; |
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3; |
} |
HeightTrimming = 0; |
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100; |
//update hoover gas stick value when setpoint is shifted |
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0) |
{ |
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value |
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning; |
if(StickGasHover < 70) StickGasHover = 70; |
else if(StickGasHover > 150) StickGasHover = 150; |
} |
} |
if(BaroExpandActive) SollHoehe = HoehenWertF; // update setpoint to current altitude if Expanding is active |
} //if FCFlags & MKFCFLAG_FLY |
else |
{ |
SollHoehe = HoehenWert - 400; |
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
else StickGasHover = 120; |
HoverGas = GasMischanteil; |
VarioCharacter = '.'; |
} |
HCGas = HoverGas; // take hover gas (neutral point) |
} |
if(HoehenWertF > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) |
{ |
if(!ACC_AltitudeControl) |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense |
GasReduction = tmp_long; |
// ------------------------- D-Part 1: Vario Meter ---------------------------- |
tmp_int = VarioMeter / 8; |
LIMIT_MIN_MAX(tmp_int, -127, 128); |
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
else |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
GasReduction += tmp_int; |
} // EOF no baro range expanding |
// ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
if(Parameter_Hoehe_ACC_Wirkung) |
{ |
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_long; |
} |
// ------------------------ D-Part 3: GpsZ ---------------------------------- |
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_int; |
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
// ------------------------ ---------------------------------- |
HCGas -= GasReduction; |
// limit deviation from hoover point within the target region |
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero |
{ |
unsigned int tmp; |
tmp = abs(HeightDeviation); |
if(tmp <= 60) |
{ |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (tmp - 60) / 32; |
if(tmp > 15) tmp = 15; |
if(HeightDeviation > 0) |
{ |
tmp = (HoverGasMin * (16 - tmp)) / 16; |
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (HoverGasMax * (tmp + 16)) / 16; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point |
} |
} |
} |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else // ACC-Altitude control |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense |
GasReduction = tmp_long; |
// ------------------------ D-Part: ACC-Z Integral ------------------------ |
tmp_long = VarioMeter + (AdWertAccHoch * Parameter_Hoehe_ACC_Wirkung)/256; |
// ------------------------- D-Part: Vario Meter ---------------------------- |
if(WaypointTrimming) { |
Variance = AltitudeSetpointTrimming * 8; |
} else { |
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32; |
} |
tmp_long -= (long)Variance; |
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN); |
GasReduction += tmp_long; |
} // EOF no baro range expanding |
HCGas -= GasReduction; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas; |
} // end of ACC-Altitude control |
#endif |
} |
}// EOF height control active |
else // HC not active |
{ |
//update hoover gas stick value when HC is not active |
if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 150); // reserve some range for trim up and down |
FilterHCGas = GasMischanteil; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL; |
} |
// Hover gas estimation by averaging gas control output on small z-velocities |
// this is done only if height contol option is selected in global config and aircraft is flying |
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
//if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation |
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // 0.90f: geändert |
if(StartTrigger == 1) StartTrigger = 2; |
tmp_long2 = (int32_t)GasMischanteil; // take current thrust |
tmp_long2 *= CosAttitude; // apply attitude projection |
tmp_long2 /= 8192; |
// average vertical projected thrust |
if(modell_fliegt < 4000) // the first 8 seconds |
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L); |
HoverGasFilter += 16L * tmp_long2; |
} |
if(modell_fliegt < 8000) // the first 16 seconds |
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L); |
HoverGasFilter += 4L * tmp_long2; |
} |
else //later |
if(abs(VarioMeter) < 100 && abs(HoehenWertF - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending) |
{ |
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE; |
HoverGasFilter += tmp_long2; |
} |
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE); |
if(EE_Parameter.Hoehe_HoverBand) |
{ |
int16_t band; |
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range |
HoverGasMin = HoverGas - band; |
HoverGasMax = HoverGas + band; |
} |
else |
{ // no limit |
HoverGasMin = 0; |
HoverGasMax = 1023; |
} |
} |
else |
{ |
StartTrigger = 0; |
HoverGasFilter = 0; |
HoverGas = 0; |
} |
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL |
else |
{ |
// set undefined state to indicate vario off |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} // EOF no height control |
// MartinR: Höhenregler nur noch mit 1284er Prozessor |
#endif |
// Limits the maximum gas in case of "Out of Range emergency landing" |
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
{ |
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
beeptime = 15000; |
BeepMuster = 0x0E00; |
} |
// limit gas to parameter setting |
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN); |
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// all BL-Ctrl connected? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(MissingMotor || Capacity.MinOfMaxPWM != 255 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors |
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase |
{ |
modell_fliegt = 1; |
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Mischer und PI-Regler |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DebugOut.Analog[7] = GasMischanteil; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gier-Anteil |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier |
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren |
if(GasMischanteil > MIN_GIERGAS) |
{ |
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
} |
else |
{ |
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2; |
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
} |
tmp_int = MAX_GAS*STICK_GAIN; |
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick / Roll-Achse // MartinR: um Code zu sparen wurde Nick und Roll zusammengefasst |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
// PI-Regler für Nick und Roll |
if(EE_Parameter.Gyro_Stability <= 8) |
{ |
pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
} |
else |
{ |
pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
} |
if(IntegralFaktor) // MartinR : ACC-Mode |
{ |
SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
SummeNickHH = 0 ; |
SummeRoll += IntegralRollMalFaktor - StickRoll; |
if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
pd_ergebnis_roll += (SummeRoll / Ki); // PI-Regler für Roll |
SummeRollHH = 0; |
} |
else // MartinR : HH-Mode |
{ |
SummeNickHH += DiffNick; // I-Anteil bei HH |
if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
SummeNick = 0; |
SummeRollHH += DiffRoll; // I-Anteil bei HH |
if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
SummeRoll = 0; |
} |
// MartinR : geändert Ende |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
//tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
// MartinR: alt |
/* |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
else SummeNick += DiffNick; // I-Anteil bei HH |
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick |
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
pd_ergebnis_nick += SummeNick / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Roll-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
else SummeRoll += DiffRoll; // I-Anteil bei HH |
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll |
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
pd_ergebnis_roll += SummeRoll / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
*/ |
// MartinR: alt Ende |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Universal Mixer |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
for(i=0; i<MAX_MOTORS; i++) |
{ |
signed int tmp_int; |
if(Mixer.Motor[i][0] > 0) |
{ |
// Gas |
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L; |
// Nick |
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick; |
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick; |
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L; |
// Roll |
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll; |
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll; |
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L; |
// Gier |
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing |
// else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing |
else |
{ |
if(EE_Parameter.MotorSmooth == 0) |
{ |
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing |
} |
else // 1 means tmp_int = tmp_int; |
if(EE_Parameter.MotorSmooth > 1) |
{ |
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value. |
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int)/EE_Parameter.MotorSmooth); |
} |
} |
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4); |
Motor[i].SetPoint = tmp_int / 4; |
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total) |
tmp_motorwert[i] = tmp_int; |
} |
else |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
} |
//DebugOut.Analog[16] |
/branches/V0.91L_ACC-HH_MartinR/fc.h |
---|
0,0 → 1,152 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel |
//#define GIER_GRAD_FAKTOR 1160L |
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel |
#define STICK_GAIN 4 |
#define ACC_AMPLIFY 6 |
// FC_StatusFlags |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
#define FC_STATUS_START 0x08 |
#define FC_STATUS_EMERGENCY_LANDING 0x10 |
#define FC_STATUS_LOWBAT 0x20 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC_StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04 |
#define FC_STATUS2_OUT1_ACTIVE 0x08 |
#define FC_STATUS2_OUT2_ACTIVE 0x10 |
#define FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground |
#define FC_STATUS2_AUTO_STARTING 0x40 |
#define FC_STATUS2_AUTO_LANDING 0x80 |
//NC_To_FC_Flags |
#define NC_TO_FC_FLYING_RANGE 0x01 |
#define NC_TO_FC_EMERGENCY_LANDING 0x02 |
#define NC_TO_FC_AUTOSTART 0x04 |
#define NC_TO_FC_AUTOLANDING 0x08 // not used |
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2; |
extern void ParameterZuordnung(void); |
extern unsigned char GetChannelValue(unsigned char ch); // gives the unsigned value of the channel |
#define Poti1 Poti[0] |
#define Poti2 Poti[1] |
#define Poti3 Poti[2] |
#define Poti4 Poti[3] |
#define Poti5 Poti[4] |
#define Poti6 Poti[5] |
#define Poti7 Poti[6] |
#define Poti8 Poti[7] |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];} |
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;} |
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);} |
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);} |
extern unsigned char Sekunde,Minute; |
extern unsigned int BaroExpandActive; |
extern long IntegralNick,IntegralNick2; |
extern long IntegralRoll,IntegralRoll2; |
//extern int IntegralNick,IntegralNick2; |
//extern int IntegralRoll,IntegralRoll2; |
extern unsigned char Poti[9]; |
extern long Mess_IntegralNick,Mess_IntegralNick2; |
extern long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern long IntegralAccNick,IntegralAccRoll; |
extern long SummeNick,SummeRoll; |
extern volatile long Mess_Integral_Hoch; |
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern int KompassValue; |
extern int KompassSollWert; |
extern int KompassRichtung; |
extern char CalculateCompassTimer; |
extern unsigned char KompassFusion; |
extern unsigned char ControlHeading; |
extern int TrimNick, TrimRoll; |
extern long ErsatzKompass; |
extern int ErsatzKompassInGrad; // Kompasswert in Grad |
extern long HoehenWert; |
extern long SollHoehe; |
extern long FromNC_AltitudeSetpoint; |
extern unsigned char FromNC_AltitudeSpeed; |
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250 |
extern unsigned char CareFree; |
extern int MesswertNick,MesswertRoll,MesswertGier; |
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern unsigned int NeutralAccX, NeutralAccY; |
extern unsigned char HoehenReglerAktiv; |
extern int NeutralAccZ; |
extern signed char NeutralAccZfine; |
extern long Umschlag180Nick, Umschlag180Roll; |
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier; |
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8; |
extern int NaviAccNick,NaviAccRoll,NaviCntAcc; |
extern unsigned int modell_fliegt; |
extern void MotorRegler(void); |
extern void SendMotorData(void); |
//void CalibrierMittelwert(void); |
//void Mittelwert(void); |
extern unsigned char SetNeutral(unsigned char AccAdjustment); // retuns: "sucess" |
extern void Piep(unsigned char Anzahl, unsigned int dauer); |
extern void CopyDebugValues(void); |
extern unsigned char ACC_AltitudeControl; |
extern signed int CosAttitude; // for projection of hoover gas |
extern unsigned char h,m,s; |
extern int StickNick,StickRoll,StickGier,StickGas; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern int DiffNick,DiffRoll; |
//extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern unsigned char CalibrationDone; |
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
extern char VarioCharacter; |
extern signed int AltitudeSetpointTrimming; |
extern signed char WaypointTrimming; |
extern int HoverGas; |
extern unsigned char Parameter_Luftdruck_D; |
//extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_ServoRollControl; |
extern unsigned char Parameter_ServoNickComp; |
extern unsigned char Parameter_ServoRollComp; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsKopplung2; |
//extern unsigned char Parameter_AchsGegenKopplung1; |
extern unsigned char Parameter_J16Bitmask; // for the J16 Output |
extern unsigned char Parameter_J16Timing; // for the J16 Output |
extern unsigned char Parameter_J17Bitmask; // for the J17 Output |
extern unsigned char Parameter_J17Timing; // for the J17 Output |
extern unsigned char Parameter_GlobalConfig; |
extern unsigned char Parameter_ExtraConfig; |
extern unsigned char Parameter_NaviGpsModeControl; // MartinR: wird wiederverwendet für GPS free bei HH |
extern signed char MixerTable[MAX_MOTORS][4]; |
//extern const signed char sintab[31]; // MartinR: so war es |
extern const signed char sintab[62]; // MartinR: für feinere Auflösung |
#endif //_FC_H |
/branches/V0.91L_ACC-HH_MartinR/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File><File path="hottmenu.c"></File><File path="hottmenu.h"></File></Project> |
/branches/V0.91L_ACC-HH_MartinR/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/V0.91L_ACC-HH_MartinR/gps.h |
---|
0,0 → 1,3 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern unsigned char GPS_Aid_StickMultiplikator; |
/branches/V0.91L_ACC-HH_MartinR/hottmenu.c |
---|
0,0 → 1,820 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define VOICE_MINIMALE_EINGANSSPANNUNG 16 |
#define VOICE_BEEP 5 |
#define HoTT_GRAD 96 |
#define HoTT_LINKS 123 |
#define HoTT_RECHTS 124 |
#define HoTT_OBEN 125 |
#define HoTT_UNTEN 126 |
#define HOTT_KEY_RIGHT 1 |
#define HOTT_KEY_DOWN 2 |
#define HOTT_KEY_UP 4 |
#define HOTT_KEY_SET 6 |
#define HOTT_KEY_LEFT 8 |
#define VARIO_ZERO 30000 |
unsigned char NaviData_WaypointIndex = 0, NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0; |
unsigned int NaviData_TargetDistance = 0; |
GPSPacket_t GPSPacket; |
VarioPacket_t VarioPacket; |
ASCIIPacket_t ASCIIPacket; |
ElectricAirPacket_t ElectricAirPacket; |
HoTTGeneral_t HoTTGeneral; |
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER; |
unsigned char ToNC_SpeakHoTT = 0, ShowSettingNameTime = 0; |
int HoTTVarioMeter = 0; |
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "}; |
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "}; |
const char PROGMEM SETTING[] = {"Set :"}; |
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] = |
{ |
//0123456789123456 |
"No Error \0", // 0 |
"Not compatible \0", // 1 |
"MK3Mag not compa\0", // 2 |
"No FC communicat\0", // 3 |
"Compass communic\0", // 4 |
"GPS communicatio\0", // 5 |
"compass value \0", // 6 |
"RC Signal lost \0", // 7 |
"FC spi rx error \0", // 8 |
"No NC communicat\0", // 9 |
"FC Nick Gyro \0", // 10 |
"FC Roll Gyro \0", // 11 |
"FC Yaw Gyro \0", // 12 |
"FC Nick ACC \0", // 13 |
"FC Roll ACC \0", // 14 |
"FC Z-ACC \0", // 15 |
"Pressure sensor \0", // 16 |
"I2C FC->BL-Ctrl \0", // 17 |
"Bl Missing \0", // 18 |
"Mixer Error \0", // 19 |
"Carefree Error \0", // 20 |
"GPS Fix lost \0", // 21 |
"Magnet Error \0", // 22 |
"Motor restart \0", // 23 |
"BL Limitation \0", // 24 |
"GPS Range \0", // 25 |
"No SD-Card \0", // 26 |
"SD-Logging error\0", // 27 |
"Flying range! \0", // 28 |
"Max Altitude! \0", // 29 |
"No GPS fix \0", // 30 |
"compass not cal.\0" // 31 |
}; |
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] = |
{ // 1 -> only in flight 0 -> also on ground |
//0123456789123456 |
{0,0},// "No Error \0", // 0 |
{SPEAK_ERROR,0},// "Not compatible \0", // 1 |
{SPEAK_ERROR,0},// "MK3Mag not compa\0", // 2 |
{SPEAK_ERR_NAVI,1},// "No FC communicat\0", // 3 |
{SPEAK_ERR_COMPASS,1},// "MK3Mag communica\0", // 4 |
{SPEAK_ERR_GPS,0},// "GPS communicatio\0", // 5 |
{SPEAK_ERR_COMPASS,1},// "compass value \0", // 6 |
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7 |
{SPEAK_ERR_NAVI,0},// "FC spi rx error \0", // 8 |
{SPEAK_ERR_NAVI,0},// "No NC communicat\0", // 9 |
{SPEAK_ERR_SENSOR,0},// "FC Nick Gyro \0", // 10 |
{SPEAK_ERR_SENSOR,0},// "FC Roll Gyro \0", // 11 |
{SPEAK_ERR_SENSOR,0},// "FC Yaw Gyro \0", // 12 |
{SPEAK_ERR_SENSOR,0},// "FC Nick ACC \0", // 13 |
{SPEAK_ERR_SENSOR,0},// "FC Roll ACC \0", // 14 |
{SPEAK_ERR_SENSOR,0},// "FC Z-ACC \0", // 15 |
{SPEAK_ERR_SENSOR,0},// "Pressure sensor \0", // 16 |
{SPEAK_ERR_DATABUS,1},// "I2C FC->BL-Ctrl \0", // 17 |
{SPEAK_ERR_DATABUS,1},// "Bl Missing \0", // 18 |
{SPEAK_ERROR,0},// "Mixer Error \0", // 19 |
{SPEAK_CF_OFF,1},// "Carefree Error \0", // 20 |
{SPEAK_GPS_FIX,1},// "GPS Fix lost \0", // 21 |
{SPEAK_ERR_COMPASS,0},// "Magnet Error \0", // 22 |
{SPEAK_ERR_MOTOR,1},// "Motor restart \0", // 23 |
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24 |
{SPEAK_MAX_RANGE,1},// "GPS Range \0", // 25 |
{SPEAK_ERROR,1},// "No SD-Card \0", // 26 |
{SPEAK_ERROR,1},// "SD-Logging error\0", // 27 |
{SPEAK_MAX_RANGE,1},// "Flying range! \0", // 28 |
{SPEAK_MAX_ALTITUD,1},// "Max Altitude! \0" // 29 |
{SPEAK_GPS_FIX,1}// "no GPS Fix, // 30 |
}; |
unsigned char MaxBlTempertaure = 0; |
unsigned char MinBlTempertaure = 0; |
unsigned char HottestBl = 0; |
void GetHottestBl(void) |
{ |
static unsigned char search = 0,tmp_max,tmp_min,who; |
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;} |
else |
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature; |
if(++search > MAX_MOTORS) |
{ |
search = 0; |
if(tmp_min != 255) MinBlTempertaure = tmp_min; else MinBlTempertaure = 0; |
MaxBlTempertaure = tmp_max; |
HottestBl = who; |
tmp_min = 255; |
tmp_max = 0; |
who = 0; |
} |
} |
//--------------------------------------------------------------- |
void Hott_ClearLine(unsigned char line) |
{ |
HoTT_printfxy(0,line," "); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Waring(void) |
{ |
unsigned char status = 0; |
static char old_status = 0; |
static int repeat; |
//if(Parameter_UserParam1) return(Parameter_UserParam1); |
ToNC_SpeakHoTT = SpeakHoTT; |
if(FC_StatusFlags & FC_STATUS_LOWBAT) status = VOICE_MINIMALE_EINGANSSPANNUNG; |
else |
if(NC_ErrorCode) // Fehlercodes |
{ |
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]); |
} |
if(!status) // Sprachansagen |
{ |
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted? |
else status = SpeakHoTT; |
} |
else ToNC_SpeakHoTT = status; |
if(old_status == status) // Gleichen Fehler nur alle 5 sek bringen |
{ |
if(!CheckDelay(repeat)) return(0); |
repeat = SetDelay(5000); |
} |
else repeat = SetDelay(2000); |
if(status) |
{ |
if(status == SpeakHoTT) SpeakHoTT = 0; |
} |
old_status = status; |
// DebugOut.Analog[16] = status; |
return(status); |
} |
/* |
unsigned char HoTTErrorCode(void) |
{ |
return(NC_ErrorCode); |
} |
*/ |
//--------------------------------------------------------------- |
void NC_Fills_HoTT_Telemety(void) |
{ |
unsigned char *ptr = NULL; |
unsigned char max = 0,i,z; |
switch(FromNaviCtrl.Param.Byte[11]) |
{ |
case HOTT_VARIO_PACKET_ID: |
ptr = (unsigned char *) &VarioPacket; |
max = sizeof(VarioPacket); |
break; |
case HOTT_GPS_PACKET_ID: |
ptr = (unsigned char *) &GPSPacket; |
max = sizeof(GPSPacket); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
ptr = (unsigned char *) &ElectricAirPacket; |
max = sizeof(ElectricAirPacket); |
break; |
case HOTT_GENERAL_PACKET_ID: |
ptr = (unsigned char *) &HoTTGeneral; |
max = sizeof(HoTTGeneral); |
break; |
} |
z = FromNaviCtrl.Param.Byte[0]; // Data allocation |
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++) |
{ |
if(z >= max) break; |
ptr[z] = FromNaviCtrl.Param.Byte[2+i]; |
z++; |
} |
} |
unsigned int BuildHoTT_Vario(void) |
{ |
unsigned int tmp = VARIO_ZERO; |
if(VarioCharacter == '+' || VarioCharacter == '-') |
{ |
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3; |
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = VARIO_ZERO + HoTTVarioMeter; |
if(tmp > VARIO_ZERO) |
{ |
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO; |
else tmp -= 100; |
} |
if(tmp < VARIO_ZERO) |
{ |
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO; |
else tmp += 100; |
} |
} |
else |
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10; |
else |
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10; |
return(tmp); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Telemety(unsigned char packet_request) |
{ |
unsigned char i; |
//Debug("rqst: %02X",packet_request); |
switch(packet_request) |
{ |
case HOTT_VARIO_PACKET_ID: |
GPSPacket.WarnBeep = HoTT_Waring(); // Achtung: das ist richtig hier, damit der Varioton schon vorher abgestellt wird |
VarioPacket.Altitude = HoehenWert/100 + 500; |
if(!GPSPacket.WarnBeep) VarioPacket.m_sec = BuildHoTT_Vario(); else VarioPacket.m_sec = VARIO_ZERO; |
VarioPacket.m_3sec = VarioPacket.m_sec; |
VarioPacket.m_10sec = VarioPacket.m_sec; |
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude; |
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude; |
VarioPacket.WarnBeep = 0;//HoTT_Waring(); |
HoTT_DataPointer = (unsigned char *) &VarioPacket; |
VarioPacket.FreeCharacters[0] = VarioCharacter; |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' '; |
// VarioPacket.FreeCharacters[2] = ' '; |
if(NC_ErrorCode) |
{ |
VarioPacket.Text[0] = NC_ErrorCode/10 + '0'; |
VarioPacket.Text[1] = NC_ErrorCode%10 + '0'; |
VarioPacket.Text[2] = ':'; |
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]); |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error |
else |
if(ShowSettingNameTime) // no Error |
{ |
for(i=0; i<sizeof(SETTING);i++) VarioPacket.Text[i] = pgm_read_byte(&SETTING[i]); |
VarioPacket.Text[4] = '0' + ActiveParamSet; |
for(i=0; i<sizeof(EE_Parameter.Name);i++) VarioPacket.Text[i+7] = EE_Parameter.Name[i]; // no Error |
VarioPacket.Text[18] = ' '; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(NaviData_WaypointNumber) |
{ |
unsigned int tmp_int; |
unsigned char tmp; |
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P'; |
VarioPacket.Text[2] = ' '; |
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10; |
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10; |
VarioPacket.Text[5] = '/'; |
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10; |
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10; |
VarioPacket.Text[8] = ' '; |
tmp_int = NaviData_TargetDistance; |
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;} |
else VarioPacket.Text[9] = ' '; |
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;} |
else VarioPacket.Text[10] = ' '; |
VarioPacket.Text[11] = '0'+(tmp_int) / 10; |
VarioPacket.Text[12] = '0'+(tmp_int) % 10; |
VarioPacket.Text[13] = 'm'; |
VarioPacket.Text[14] = ' '; |
tmp = NaviData_TargetHoldTime; |
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' '; |
VarioPacket.Text[16] = '0'+(tmp) / 10; |
VarioPacket.Text[17] = '0'+(tmp) % 10; |
VarioPacket.Text[18] = 's'; |
VarioPacket.Text[19] = ' '; |
} |
else |
{ |
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error |
} |
return(sizeof(VarioPacket)); |
break; |
case HOTT_GPS_PACKET_ID: |
GPSPacket.Altitude = HoehenWert/100 + 500; |
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC |
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC |
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC |
// GPSPacket.WarnBeep = HoTT_Waring(); //(wird jetzt weiter oben gemacht) |
if(!GPSPacket.WarnBeep) GPSPacket.m_sec = BuildHoTT_Vario(); else GPSPacket.m_sec = VARIO_ZERO; |
GPSPacket.m_3sec = 120; |
GPSPacket.NumOfSats = GPSInfo.NumOfSats; |
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D'; |
else |
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' '; |
else GPSPacket.SatFix = '!'; |
HoTT_DataPointer = (unsigned char *) &GPSPacket; |
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter; |
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix; |
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230; |
return(sizeof(GPSPacket)); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
GetHottestBl(); |
ElectricAirPacket.Altitude = HoehenWert/100 + 500; |
ElectricAirPacket.Battery1 = UBat; |
ElectricAirPacket.Battery2 = UBat; |
ElectricAirPacket.VoltageCell1 = ErsatzKompassInGrad / 2; |
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1; |
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2; |
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20; |
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6; |
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7; |
if(!GPSPacket.WarnBeep) ElectricAirPacket.m_sec = BuildHoTT_Vario(); else ElectricAirPacket.m_sec = VARIO_ZERO; |
ElectricAirPacket.m_3sec = 120; |
ElectricAirPacket.InputVoltage = UBat; |
ElectricAirPacket.Temperature1 = MinBlTempertaure + 20; |
ElectricAirPacket.Temperature2 = MaxBlTempertaure + 20; |
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10; |
ElectricAirPacket.WarnBeep = 0;//HoTT_Waring(); |
ElectricAirPacket.Current = Capacity.ActualCurrent; |
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket; |
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60; |
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60; |
return(sizeof(ElectricAirPacket)); |
break; |
case HOTT_GENERAL_PACKET_ID: |
GetHottestBl(); |
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100; |
HoTTGeneral.VoltageCell1 = ErsatzKompassInGrad / 2; |
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2; |
if(UBat > BattLowVoltageWarning + 5) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 6)) * 3; |
else HoTTGeneral.FuelPercent = 0; |
HoTTGeneral.FuelCapacity = HoehenWert/100; |
if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0; |
HoTTGeneral.Altitude = HoehenWert/100 + 500; |
HoTTGeneral.Battery1 = UBat; |
HoTTGeneral.Battery2 = UBat; |
if(!GPSPacket.WarnBeep) HoTTGeneral.m_sec = BuildHoTT_Vario(); else HoTTGeneral.m_sec = VARIO_ZERO; |
HoTTGeneral.m_3sec = 120; |
HoTTGeneral.InputVoltage = UBat; |
HoTTGeneral.Temperature1 = MinBlTempertaure + 20; |
HoTTGeneral.Temperature2 = MaxBlTempertaure + 20; |
HoTTGeneral.Capacity = Capacity.UsedCapacity/10; |
HoTTGeneral.WarnBeep = 0;//HoTT_Waring(); |
HoTTGeneral.Current = Capacity.ActualCurrent; |
//HoTTGeneral.ErrorNumber = HoTTErrorCode(); |
HoTT_DataPointer = (unsigned char *) &HoTTGeneral; |
return(sizeof(HoTTGeneral)); |
break; |
default: return(0); |
} |
} |
//--------------------------------------------------------------- |
void HoTT_Menu(void) |
{ |
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0; |
unsigned char tmp; |
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8; |
if(page == 0) |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10) |
else |
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10) |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter) |
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,0,"ALT:---- "); |
break; |
case 1: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60) |
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
HoTT_printfxy(10,1,"DIR: %3d%c",ErsatzKompassInGrad, HoTT_GRAD); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," "); |
break; |
case 2: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity) |
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity); |
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
break; |
case 3: |
HoTT_printfxy(9,0,":"); |
HoTT_printfxy(9,1,":"); |
HoTT_printfxy(9,2,":"); |
HoTT_printfxy(0,3,"---------+-----------"); |
// HoTT_printfxy(0,3,"---------------------"); |
HoTT_printfxy(0,6,"---------------------"); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(9,4,":"); |
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats); |
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ") |
else HoTT_printfxy(7,4,"3D"); |
break; |
default: |
HoTT_printfxy_BLINK(7,4,"!!"); |
break; |
} |
} |
else |
{ |
Hott_ClearLine(4); |
} |
break; |
case 5: |
if(NaviDataOkay) |
{ |
if(show_mag) |
{ |
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField); |
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic); |
} |
else |
{ |
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
} |
} |
else Hott_ClearLine(5); |
break; |
case 6: |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
else |
if(page == 1) |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity) |
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity); |
break; |
case 1: |
HoTT_printfxy(0,1,"DIR:%3d%c",KompassValue, HoTT_GRAD); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,1,"ALT:---- "); |
HoTT_printfxy(20,1,"%c",VarioCharacter); |
break; |
case 2: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter); |
} |
else |
{ |
Hott_ClearLine(2); |
} |
break; |
case 3: |
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," "); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
HoTT_printfxy(16,4," 3D "); |
break; |
//case SATFIX_2D: |
//case SATFIX_NONE: |
default: |
HoTT_printfxy_BLINK(16,4,"NOFIX"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
HoTT_printfxy(16,4,"DGPS "); |
} |
} |
else |
{ //012345678901234567890 |
HoTT_printfxy(0,4," No NaviCtrl "); |
} |
break; |
case 5: |
if(show_current) |
{ |
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10); |
} |
else |
{ |
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD); |
} |
break; |
case 6: |
if(show_current) |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10) |
else |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10); |
} |
else |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD) |
else |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD); |
} |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;} |
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard); |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
else |
if(page == 2) |
switch(line++) |
{ |
case 0: |
HoTT_printfxy_INV(0,0,"Setting:%u %s ",ActiveParamSet,EE_Parameter.Name); |
break; |
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name); |
break; |
case 2: HoTT_printfxy(0,2,"ALT:"); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter) |
else |
{ |
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) "); |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter) |
else HoTT_printf("VARIO", Parameter_HoehenSchalter); |
} |
} |
else |
HoTT_printf("DISABLED"); |
break; |
case 3: HoTT_printfxy(0,3,"CF:"); |
if(!EE_Parameter.CareFreeChannel) HoTT_printf("DISABLED") |
else |
{ |
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)"); |
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH"); |
} |
break; |
case 4: HoTT_printfxy(0,4,"GPS:"); |
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED") |
else |
{ |
tmp = GetChannelValue(EE_Parameter.NaviGpsModeChannel); |
if(tmp < 50) HoTT_printf("(FREE)") |
else |
if(tmp >= 180) HoTT_printf("(HOME)") |
else |
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ") |
else HoTT_printf("(HOLD)") |
} |
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime) |
break; |
case 5: HoTT_printfxy(0,5,"HOME ALT:"); |
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD "); |
break; |
case 6: |
if(!show_poti) |
{ |
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl); |
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
} |
else |
{ |
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3); |
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6); |
} |
break; |
case 7: //HoTT_printfxy(0,6,"WARNINGS:"); |
if(HoTTBlink) |
{ |
LIBFC_HoTT_SetPos(6 * 21); |
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! "); |
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! "); |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! "); |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! "); |
} |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
break; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);} |
// else |
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
/* else |
if(page == 3) |
switch(line++) |
{ |
case 0: |
HoTT_printfxy(0,2,"Speak:"); |
break; |
case 1: |
// if(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01) |
if(!(GlobalConfig3 & CFG3_SPEAK_ALL) & 0x01)) HoTT_printfxy_INV(7,2,"All Messages ") |
else HoTT_printfxy_INV(7,2,"Warnings only"); |
break; |
case 2: |
HoTT_printfxy(1,4,"Use (set) to select"); |
break; |
default: |
if(HottKeyboard == HOTT_KEY_SET) |
{ |
SetParamByte(PID_SPEAK_HOTT_CFG, GetParamByte(PID_SPEAK_HOTT_CFG) ^ 0x01); |
} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}; |
HottKeyboard = 0; |
line = 0; |
break; |
} |
*/ |
else page = 0; |
} |
#endif |
/branches/V0.91L_ACC-HH_MartinR/hottmenu.h |
---|
0,0 → 1,230 |
#ifndef _HOTTMENU_H |
#define _HOTTMENU_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define SPEAK_ERR_CALIBARTION 1 |
#define SPEAK_ERR_RECEICER 2 |
#define SPEAK_ERR_DATABUS 3 |
#define SPEAK_ERR_NAVI 4 |
#define SPEAK_ERROR 5 |
#define SPEAK_ERR_COMPASS 6 |
#define SPEAK_ERR_SENSOR 7 |
#define SPEAK_ERR_GPS 8 |
#define SPEAK_ERR_MOTOR 9 |
#define SPEAK_MAX_TEMPERAT 10 |
#define SPEAK_ALTI_REACHED 11 |
#define SPEAK_WP_REACHED 12 |
#define SPEAK_NEXT_WP 13 |
#define SPEAK_LANDING 14 |
#define SPEAK_GPS_FIX 15 |
#define SPEAK_UNDERVOLTAGE 16 |
#define SPEAK_GPS_HOLD 17 |
#define SPEAK_GPS_HOME 18 |
#define SPEAK_GPS_OFF 19 |
#define SPEAK_BEEP 20 |
#define SPEAK_MIKROKOPTER 21 |
#define SPEAK_CAPACITY 22 |
#define SPEAK_CF_OFF 23 |
#define SPEAK_CALIBRATE 24 |
#define SPEAK_MAX_RANGE 25 |
#define SPEAK_MAX_ALTITUD 26 |
#define SPEAK_MK_OFF 38 |
#define SPEAK_ALTITUDE_ON 39 |
#define SPEAK_ALTITUDE_OFF 40 |
#define SPEAK_CF_ON 46 |
#define SPEAK_SINKING 47 |
#define SPEAK_RISING 48 |
#define SPEAK_HOLDING 49 |
#define SPEAK_GPS_ON 50 |
#define SPEAK_FOLLWING 51 |
#define SPEAK_STARTING 52 |
#define MAX_ERR_NUMBER (31+1) |
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17]; |
extern unsigned char NaviData_WaypointIndex, NaviData_WaypointNumber, NaviData_TargetHoldTime; |
extern unsigned int NaviData_TargetDistance; |
extern unsigned char HottKeyboard,HoTT_RequestedSensor; |
extern unsigned char HottUpdate(unsigned char key); |
extern unsigned char SpeakHoTT,ShowSettingNameTime; |
extern unsigned char ToNC_SpeakHoTT; |
extern volatile unsigned char *HoTT_DataPointer; |
extern unsigned char MaxBlTempertaure; |
extern void CreateHoTT_Menu(void); |
extern void LIBFC_HoTT_Putchar(char); |
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers |
extern void LIBFC_HoTT_Putchar_BLINK(char); |
extern void LIBFC_HoTT_SetPos(unsigned char); |
extern void LIBFC_HoTT_Clear(void); |
extern void NC_Fills_HoTT_Telemety(void); |
extern void HoTT_Menu(void); |
extern unsigned char HoTT_Telemety(unsigned char); |
extern unsigned char HoTT_Waring(void); |
extern volatile unsigned char HoTTBlink; |
extern void GetHottestBl(void); |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID |
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xD0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 8 209 = 4,18V |
unsigned char VoltageCell3; // 9 |
unsigned char VoltageCell4; // 10 |
unsigned char VoltageCell5; // 11 |
unsigned char VoltageCell6; // 12 |
unsigned int Battery1; // 13+14 51 = 5,1V |
unsigned int Battery2; // 15+16 51 = 5,1V |
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C |
unsigned char FuelPercent; // 19 |
signed int FuelCapacity; // 20+21 |
unsigned int Rpm; // 22+23 |
signed int Altitude; // 24+25 |
unsigned int m_sec; // 26+27 3000 = 0 |
unsigned char m_3sec; // 28 120 = 0 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int Speed; // 35+36 |
unsigned char LowestCellVoltage; // 37 |
unsigned char LowestCellNumber; // 38 |
unsigned int Rpm2; // 39+40 |
unsigned char ErrorNumber; // 41 |
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} HoTTGeneral_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xE0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 209 = 4,18V |
unsigned char VoltageCell3; // |
unsigned char VoltageCell4; // |
unsigned char VoltageCell5; // |
unsigned char VoltageCell6; // |
unsigned char VoltageCell7; // |
unsigned char VoltageCell8; // |
unsigned char VoltageCell9; // |
unsigned char VoltageCell10; // |
unsigned char VoltageCell11; // |
unsigned char VoltageCell12; // |
unsigned char VoltageCell13; // |
unsigned char VoltageCell14; // 20 |
unsigned int Battery1; // 21+22 51 = 5,1V |
unsigned int Battery2; // 23+24 51 = 5,1V |
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C |
signed int Altitude; // 27+28 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int m_sec; // 35+36 30000 = 0 |
unsigned char m_3sec; // 37 120 = 0 |
unsigned int Rpm; // 38+39 |
unsigned char FlightTimeMinutes; // 40 |
unsigned char FlightTimeSeconds; // 41 |
unsigned char Speed; // 42 1=2km |
unsigned char Version; // 43 0x00 |
unsigned char EndByte; // 0x7D |
} ElectricAirPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // 0x89 - Vario ID |
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 0x90 |
unsigned char InverseStatus; |
signed int Altitude; //6+7 // 500 = 0m |
signed int MaxAltitude; //8+9 // 500 = 0m |
signed int MinAltitude; //10+11 // 500 = 0m |
unsigned int m_sec; //12+13 // 3000 = 0 |
unsigned int m_3sec; //14+15 |
unsigned int m_10sec; //26+17 |
char Text[21]; //18-38 |
char FreeCharacters[3]; // 39-41 |
unsigned char NullByte; // 42 0x00 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} VarioPacket_t; |
typedef struct |
{ |
unsigned char StartByte; //0 // 0x7C |
unsigned char Packet_ID; //1 // 0x8A - GPS ID |
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xA0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char Heading; //7 // 1 = 2° |
unsigned int Speed; //8+9 // in km/h |
unsigned char Lat_North; //10 |
unsigned char Lat_G; //11 |
unsigned char Lat_M; //12 |
unsigned char Lat_Sek1; //13 |
unsigned char Lat_Sek2; //14 |
unsigned char Lon_East; //15 |
unsigned char Lon_G; //16 |
unsigned char Lon_M; //17 |
unsigned char Lon_Sek1; //18 |
unsigned char Lon_Sek2; //19 |
unsigned int Distance; //20+21 // 9000 = 0m |
signed int Altitude; //22+23 // 500 = 0m |
unsigned int m_sec; //24+25 // 3000 = 0 |
unsigned char m_3sec; //26 120 = 0 |
unsigned char NumOfSats; //27 |
unsigned char SatFix; //28 |
unsigned char HomeDirection; // 29 |
unsigned char AngleX; // 30 |
unsigned char AngleY; // 31 |
unsigned char AngleZ; // 32 |
signed int GyroX; //33+34 |
signed int GyroY; //35+36 |
signed int GyroZ; //37+38 |
unsigned char Vibration; // 39 |
char FreeCharacters[3]; // 40-42 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} GPSPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7B |
unsigned char Packet_ID; // |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
char Text[8*21]; |
unsigned char EndByte; // 0x7D |
} ASCIIPacket_t; |
extern GPSPacket_t GPSPacket; |
extern VarioPacket_t VarioPacket; |
extern ASCIIPacket_t ASCIIPacket; |
extern ElectricAirPacket_t ElectricAirPacket; |
extern HoTTGeneral_t HoTTGeneral; |
#define HOTT_VARIO_PACKET_ID 0x89 |
#define HOTT_GPS_PACKET_ID 0x8A |
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E |
#define HOTT_GENERAL_PACKET_ID 0x8D |
#endif |
#endif |
/branches/V0.91L_ACC-HH_MartinR/isqrt.S |
---|
0,0 → 1,203 |
;-----------------------------------------------------------------------------; |
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008 |
; http://elm-chan.org/docs/avrlib/sqrt32.S |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 (uint32_t n); |
; uint8_t isqrt16 (uint16_t n); |
; uint16_t ihypot (int16_t x, int16_t y); |
;-----------------------------------------------------------------------------: |
; 32bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 ( |
; uint32_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 53 words |
; Clock = 532..548 cycles |
; Stack = 0 byte |
.global isqrt32 |
.func isqrt32 |
isqrt32: |
clr r0 |
clr r18 |
clr r19 |
clr r20 |
ldi r21, 1 |
clr r27 |
clr r30 |
clr r31 |
ldi r26, 16 |
1: lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
brpl 2f |
add r0, r21 |
adc r18, r27 |
adc r19, r30 |
adc r20, r31 |
rjmp 3f |
2: sub r0, r21 |
sbc r18, r27 |
sbc r19, r30 |
sbc r20, r31 |
3: lsl r21 |
rol r27 |
rol r30 |
andi r21, 0b11111000 |
ori r21, 0b00000101 |
sbrc r20, 7 |
subi r21, 2 |
dec r26 |
brne 1b |
lsr r30 |
ror r27 |
ror r21 |
lsr r30 |
ror r27 |
ror r21 |
mov r24, r21 |
mov r25, r27 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint8_t isqrt16 ( |
; uint16_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 33 words |
; Clock = 181..189 cycles |
; Stack = 0 byte |
.global isqrt16 |
.func isqrt16 |
isqrt16: |
clr r18 |
clr r19 |
ldi r20, 1 |
clr r21 |
ldi r22, 8 |
1: lsl r24 |
rol r25 |
rol r18 |
rol r19 |
lsl r24 |
rol r25 |
rol r18 |
rol r19 |
brpl 2f |
add r18, r20 |
adc r19, r21 |
rjmp 3f |
2: sub r18, r20 |
sbc r19, r21 |
3: lsl r20 |
rol r21 |
andi r20, 0b11111000 |
ori r20, 0b00000101 |
sbrc r19, 7 |
subi r20, 2 |
dec r22 |
brne 1b |
lsr r21 |
ror r20 |
lsr r21 |
ror r20 |
mov r24, r20 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer hypot (megaAVR is required) |
;-----------------------------------------------------------------------------; |
; uint16_t ihypot ( |
; int16_t x, |
; int16_t y |
; ); |
; |
; Return Value: |
; Squareroot of (x*x + y*y) |
; |
; Size = 42 words |
; Clock = 581..597 cycles |
; Stack = 0 byte |
.global ihypot |
.func ihypot |
ihypot: |
clr r26 |
sbrs r25, 7 |
rjmp 1f |
com r24 |
com r25 |
adc r24, r26 |
adc r25, r26 |
1: sbrs r23, 7 |
rjmp 2f |
com r22 |
com r23 |
adc r22, r26 |
adc r23, r26 |
2: mul r22, r22 |
movw r18, r0 |
mul r23, r23 |
movw r20, r0 |
mul r22, r23 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
mul r24, r24 |
movw r30, r0 |
mul r25, r25 |
add r18, r30 |
adc r19, r31 |
adc r20, r0 |
adc r21, r1 |
mul r24, r25 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
movw r24, r20 |
movw r22, r18 |
clr r1 |
rjmp isqrt32 |
.endfunc |
/branches/V0.91L_ACC-HH_MartinR/isqrt.h |
---|
0,0 → 1,11 |
#ifndef _ISQRT_H |
#define _ISQRT_H |
#include <inttypes.h> |
// coded in assembler file |
extern uint16_t isqrt32(uint32_t n); |
extern uint8_t isqrt16(uint16_t n); |
extern uint16_t ihypot(int16_t x, int16_t y); |
#endif // _ISQRT_H |
/branches/V0.91L_ACC-HH_MartinR/jeti_ex.c |
---|
0,0 → 1,141 |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "jeti_ex.h" |
#include "hottmenu.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
const char PROGMEM JETI_CODE[53] = |
{ |
0, // 0 |
'O', // SPEAK_ERR_CALIBARTION 1 |
'P', // SPEAK_ERR_RECEICER 2 |
'Q', // SPEAK_ERR_DATABUS 3 |
'R', // SPEAK_ERR_NAVI 4 |
'S', // SPEAK_ERROR 5 |
'T', // SPEAK_ERR_COMPASS 6 |
'S', // SPEAK_ERR_SENSOR 7 |
'V', // SPEAK_ERR_GPS 8 |
'W', // SPEAK_ERR_MOTOR 9 |
'H', // SPEAK_MAX_TEMPERAT 10 |
0, // SPEAK_ALTI_REACHED 11 |
'X', // SPEAK_WP_REACHED 12 |
'Y', // SPEAK_NEXT_WP 13 |
0, // SPEAK_LANDING 14 |
'Z', // SPEAK_GPS_FIX 15 |
'U', // SPEAK_UNDERVOLTAGE 16 |
'E', // SPEAK_GPS_HOLD 17 |
'F', // SPEAK_GPS_HOME 18 |
'G', // SPEAK_GPS_OFF 19 |
'H', // SPEAK_BEEP 20 |
'A', // SPEAK_MIKROKOPTER 21 |
0, // SPEAK_CAPACITY 22 |
'I', // SPEAK_CF_OFF 23 |
'B', // SPEAK_CALIBRATE 24 |
'J', // SPEAK_MAX_RANGE 25 |
'J', // SPEAK_MAX_ALTITUD 26 |
0, // 27 |
0, // 28 |
0, // 29 |
0, // 30 |
0, // 31 |
0, // 32 |
0, // 33 |
0, // 34 |
0, // 35 |
0, // 36 |
0, // 37 |
'D', // SPEAK_MK_OFF 38 |
'L', // SPEAK_ALTITUDE_ON 39 |
'M', // SPEAK_ALTITUDE_OFF 40 |
0, // 41 |
0, // 42 |
0, // 43 |
0, // 44 |
0, // 45 |
'N', // SPEAK_CF_ON 46 |
0, // SPEAK_SINKING 47 |
0, // SPEAK_RISING 48 |
0, // SPEAK_HOLDING 49 |
'K', // SPEAK_GPS_ON 50 |
0, // SPEAK_FOLLWING 51 |
'C' // SPEAK_STARTING 52 |
}; |
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0) |
{ |
// Label[10] unit[3], data type, Data , position of decimal point |
// "1234567890", "123", |
// { "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "MK " , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1 |
{ "Current " , "A ", 1, 0 , 1 }, // ID 2 |
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3 |
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4 |
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5 |
{ "Sats " , " ", 1, 0 , 0 }, // ID 6 |
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7 |
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8 |
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9 |
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10 |
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11 |
{ "Vario " , " ", 1, 0 , 0 }, // ID 12 |
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13 |
{ "frei " , " ", 1, 0 , 3 }, // ID 14 |
{ "frei " , " ", 1, 0 , 3 }, // ID 15 |
}; |
void BuildJeti_Vario(void) |
{ |
signed int tmp = 0; |
static signed int JetiVarioMeter = 0; |
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4; |
if(VarioCharacter == '+') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5; |
} |
else |
if(VarioCharacter == '-') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5; |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = (JetiVarioMeter/32); |
} |
else |
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed; |
else |
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed; |
JetiExData[12].Value = tmp; |
} |
// -------------------------------------------------------------------------------------------------- |
void JetiEX_Update(void) |
{ |
GetHottestBl(); |
JetiExData[1].Value = UBat; |
JetiExData[2].Value = Capacity.ActualCurrent; |
JetiExData[3].Value = Capacity.UsedCapacity / 10; |
JetiExData[4].Value = HoehenWert / 100; |
JetiExData[5].Value = KompassValue; |
JetiExData[6].Value = GPSInfo.NumOfSats; |
JetiExData[7].Value = GPSInfo.Speed; |
JetiExData[8].Value = GPSInfo.HomeDistance / 10; |
JetiExData[9].Value = GPSInfo.HomeBearing; |
JetiExData[10].Value = MaxBlTempertaure; |
JetiExData[11].Value = EarthMagneticField; |
// JetiExData[12].Value = Vario; |
JetiExData[13].Value = NC_ErrorCode; |
} |
#endif |
/branches/V0.91L_ACC-HH_MartinR/jeti_ex.h |
---|
0,0 → 1,37 |
#ifndef _JETI_EX_H |
#define _JETI_EX_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern void BuildJeti_Vario(void); |
// define here how many Jeti EX parameters should be transmitted (max. = 15) |
// |
#define JETI_EX_PARAMETER_COUNT 15 |
// |
// ------------------------------------------------------------------------- |
extern const char PROGMEM JETI_CODE[53]; |
typedef struct |
{ |
char Label[10]; |
char Unit[3]; |
unsigned char DataType; |
long Value; |
unsigned char DecimalPointPos; |
} JetiExPacket_t; |
extern JetiExPacket_t JetiExData[]; |
extern void JetiEX_Update(void); |
#if (JETI_EX_PARAMETER_COUNT > 15) |
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)" |
#endif |
#endif |
#endif //_JETI_EX_H |
/branches/V0.91L_ACC-HH_MartinR/jetimenu.c |
---|
0,0 → 1,298 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "jetimenu.h" |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "hottmenu.h" |
#define JETIBOX_KEY_RIGHT 0x1F |
#define JETIBOX_KEY_UP 0x2F |
#define JETIBOX_KEY_DOWN 0x4F |
#define JETIBOX_KEY_LEFT 0x8F |
#define JETIBOX_KEY_NONE 0x0F |
#define JETIBOX_KEY_UNDEF 0x00 |
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} //MartinR |
// ----------------------------------------------------------- |
// the menu functions |
// ----------------------------------------------------------- |
void Menu_Status(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10); |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(6,0,"%3d%c %03dm%c",ErsatzKompassInGrad, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter); |
} |
else |
{ |
JetiBox_printfxy(6,0,"Status"); |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
static unsigned int timer; |
static char toggle = 1; |
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);}; |
if(toggle) |
{ |
LIBFC_JetiBox_SetPos(0); |
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
{ |
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); |
// if(MotorenEin) JetiBeep = 'O'; |
} |
} |
else |
if(ShowSettingNameTime) |
{ |
LIBFC_JetiBox_Clear(); |
JetiBox_printfxy(0,1,"Set%d:%s ",ActiveParamSet,EE_Parameter.Name); |
return; // nichts weiter ausgeben |
} |
#else |
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'S';}; |
#endif |
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter); |
} |
#endif |
} |
void Menu_Temperature(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature); |
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature); |
if(RequiredMotors <= 4) |
{ |
JetiBox_printfxy(0,1,"Temperatures "); |
} |
else |
if(RequiredMotors <= 6) |
{ |
JetiBox_printfxy(8,1,"\%cC ",0xdf); |
} |
#endif |
} |
void Menu_Battery(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity); |
#endif |
} |
void Magnet_Values(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF); |
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic); |
#endif |
} |
void Menu_PosInfo(uint8_t key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
JetiBox_printfxy(12,0," 3D"); |
break; |
// case SATFIX_2D: |
// case SATFIX_NONE: |
default: |
JetiBox_printfxy(12,0,"NoFx"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
JetiBox_printfxy(12,0,"DGPS"); |
} |
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter); |
} |
else |
{ //0123456789ABCDEF |
JetiBox_printfxy(2,0,"No NaviCtrl!"); |
} |
#endif |
} |
// MartinR für Jeti+ Anfang |
void Menu_spoti1(uint8_t key) |
{ //0123456789ABCDEF |
JetiBox_printfxy(0,0,">%3i=Serialpot1",(PPM_in[13] + 127)); |
//JetiBox_printfxy(0,1," %3i=Serialpot2",PPM_in[14]); |
if(key== JETIBOX_KEY_UP) PPM_in[13] = PPM_in[13]+25; |
if(key== JETIBOX_KEY_DOWN) PPM_in[13] = PPM_in[13]-25; |
LIMIT_MIN_MAX(PPM_in[13], -127, 128); // MartinR: Begrenzung |
} |
void Menu_spoti2(uint8_t key) |
{ //0123456789ABCDEF |
//JetiBox_printfxy(0,0," %3i=Serialpot1",PPM_in[13]); |
JetiBox_printfxy(0,1,">%3i=Serialpot2",(PPM_in[14] + 127)); |
if(key== JETIBOX_KEY_UP) PPM_in[14] = PPM_in[14]+2; |
if(key== JETIBOX_KEY_DOWN) PPM_in[14] = PPM_in[14]-2; |
LIMIT_MIN_MAX(PPM_in[14], -127, 128); // MartinR: Begrenzung |
} |
// MartinR für Jeti+ Ende |
// ----------------------------------------------------------- |
// the menu topology |
// ----------------------------------------------------------- |
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer |
typedef struct{ |
int8_t left; |
int8_t right; |
int8_t up; |
int8_t down; |
pFctMenu pHandler; |
} MENU_ENTRY; |
// the menu navigation structure |
/* | |
3 - 0 - 1 - 2 - 3 - 0 |
*/ |
const MENU_ENTRY JetiBox_Menu[] PROGMEM= |
{ // l r u d pHandler |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
//{4, 1, 0, 0, &Menu_Status }, // 0 // MartinR: so war es |
{6, 1, 0, 0, &Menu_Status }, // 0 // MartinR: geändert |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
//{3, 0, 4, 4, &Magnet_Values } // 4 // MartinR: so war es |
{3, 5, 4, 4, &Magnet_Values }, // 4 // MartinR: geändert |
{4, 6, 5, 5, &Menu_spoti1 }, // 5 // MartinR: für Jeti+ |
{5, 0, 6, 6, &Menu_spoti2 }, // 6 // MartinR: für Jeti+ |
#endif |
}; |
// ----------------------------------------------------------- |
// Update display buffer |
// ----------------------------------------------------------- |
unsigned char JetiBox_Update(unsigned char key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static uint8_t item = 0, last_item = 0; // the menu item |
static uint8_t updateDelay = 1; |
// navigate within the menu by key action |
last_item = item; |
switch(key) |
{ |
case JETIBOX_KEY_LEFT: |
//if (item == 0) return (1); // switch back to jeti expander menu |
// else |
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item |
break; |
case JETIBOX_KEY_RIGHT: |
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item |
break; |
case JETIBOX_KEY_UP: |
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item |
break; |
case JETIBOX_KEY_DOWN: |
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item |
break; |
default: |
break; |
} |
// if the menu item has been changed, do not pass the key to the item handler |
// to avoid jumping over to items |
if(item != last_item) key = JETIBOX_KEY_UNDEF; |
if (updateDelay++ & 0x01) |
{ |
LIBFC_JetiBox_Clear(); |
//execute menu item handler |
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key); |
} |
#endif |
return (0); |
} |
/branches/V0.91L_ACC-HH_MartinR/jetimenu.h |
---|
0,0 → 1,6 |
#ifndef _JETIMENU_H |
#define _JETIMENU_H |
extern unsigned char JetiBox_Update(unsigned char key); |
#endif //_JETIMENU_H |
/branches/V0.91L_ACC-HH_MartinR/led.c |
---|
0,0 → 1,128 |
#include <inttypes.h> |
#include "main.h" |
uint16_t LED1_Timing = 0; |
uint16_t LED2_Timing = 0; |
unsigned char J16Blinkcount = 0, J16Mask = 1; |
unsigned char J17Blinkcount = 0, J17Mask = 1; |
// initializes the LED control outputs J16, J17 |
void LED_Init(void) |
{ |
// set PC2 & PC3 as output (control of J16 & J17) |
DDRC |= (1<<DDC2)|(1<<DDC3); |
J16_OFF; |
J17_OFF; |
J16Blinkcount = 0; J16Mask = 128; |
J17Blinkcount = 0; J17Mask = 128; |
} |
// called in UpdateMotors() every 2ms |
void LED_Update(void) |
{ |
static char delay = 0; |
static unsigned char J16Bitmask = 0; |
static unsigned char J17Bitmask = 0; |
static unsigned char J16Warn = 0, J17Warn = 0; |
static unsigned char from_nc = 0; |
if(FromNC_WP_EventChannel != -127) { from_nc = (unsigned char) FromNC_WP_EventChannel + 127; /*beeptime = 300;*/}; |
if(!delay--) // 20ms Intervall |
{ |
delay = 9; |
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C)) |
{ |
if(EE_Parameter.WARN_J16_Bitmask) |
{ |
if(!J16Warn) J16Blinkcount = 4; |
J16Warn = 1; |
} |
if(EE_Parameter.WARN_J17_Bitmask) |
{ |
if(!J17Warn) J17Blinkcount = 4; |
J17Warn = 1; |
} |
} |
else |
{ |
J16Warn = 0; |
J17Warn = 0; |
J16Bitmask = EE_Parameter.J16Bitmask; |
J17Bitmask = EE_Parameter.J17Bitmask; |
} |
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3; |
// Output 1 |
if(!J16Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;} |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1;} |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1;} |
else |
if(!J16Blinkcount--) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1) |
{ |
J16Blinkcount = from_nc / 2; |
if(!from_nc) { if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 0; } // Ausschalten |
else |
{ |
if(J16Mask == 0) |
{ |
from_nc = 0; |
J16Mask = 128; |
if(J16Bitmask & 128) J16_OFF; else J16_ON; // Ausschalten |
} |
else |
{ |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
J16Mask /= 2; |
} |
} |
} |
else |
{ |
J16Blinkcount = Parameter_J16Timing / 2; |
if(J16Mask == 1) { from_nc = 0; J16Mask = 128; } else J16Mask /= 2; |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
} |
} |
} |
else // warning case |
if(!J16Blinkcount--) |
{ |
J16Blinkcount = 10-1; |
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2; |
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF; |
} |
// Output 2 |
if(!J17Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;} |
else |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = Parameter_J17Timing / 2; |
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2; |
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF; |
} |
} |
else // warning case |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = 10-1; |
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2; |
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF; |
} |
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; //else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) -> wird in der SPI zurück gesetzt |
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17) |
} |
} |
/branches/V0.91L_ACC-HH_MartinR/led.h |
---|
0,0 → 1,11 |
#include <avr/io.h> |
#define J16_ON PORTC |= (1<<PORTC2) |
#define J16_OFF PORTC &= ~(1<<PORTC2) |
#define J16_TOGGLE PORTC ^= (1<<PORTC2) |
#define J17_ON PORTC |= (1<<PORTC3) |
#define J17_OFF PORTC &= ~(1<<PORTC3) |
#define J17_TOGGLE PORTC ^= (1<<PORTC3) |
extern void LED_Init(void); |
extern void LED_Update(void); |
/branches/V0.91L_ACC-HH_MartinR/libfc.h |
---|
0,0 → 1,24 |
#ifndef _LIBFC_H |
#define _LIBFC_H |
#define CPU_UNKNOWN 0 |
#define CPU_ATMEGA644 1 |
#define CPU_ATMEGA644P 2 |
#define CPU_ATMEGA1284 3 |
#define CPU_ATMEGA1284P 4 |
extern void LIBFC_Init(unsigned char); |
extern void LIBFC_Polling(void); |
extern void LIBFC_ReceiverInit(unsigned char rtype); |
extern void LIBFC_JetiBox_Putchar(char c); |
extern void LIBFC_JetiBox_SetPos(unsigned char index); |
extern void LIBFC_JetiBox_Clear(void); |
extern void LIBFC_CheckSettings(void); |
extern unsigned char LIBFC_GetCPUType(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern long ACC_AltitudeFusion(unsigned char init); |
#endif |
#endif //_LIBFC_H |
/branches/V0.91L_ACC-HH_MartinR/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/V0.91L_ACC-HH_MartinR/libfc644.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/V0.91L_ACC-HH_MartinR/main.c |
---|
0,0 → 1,464 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char DisableRcOffBeeping = 0; |
unsigned char PlatinenVersion = 10; |
unsigned char BattLowVoltageWarning = 94; |
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0; |
unsigned int FlugSekunden = 0; |
pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
unsigned char FoundMotors = 0; |
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box |
unsigned char ActiveParamSet = 3; |
void PrintLine(void) |
{ |
printf("\n\r==================================="); |
} |
void CalMk3Mag(void) |
{ |
static unsigned char stick = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick) |
{ |
stick = 1; |
WinkelOut.CalcState++; |
if(WinkelOut.CalcState > 4) |
{ |
// WinkelOut.CalcState = 0; // in Uart.c |
beeptime = 1000; |
} |
else Piep(WinkelOut.CalcState,150); |
} |
} |
void LipoDetection(unsigned char print) |
{ |
#define MAX_CELL_VOLTAGE 43 // max cell volatage for LiPO |
unsigned int timer, cells; |
if(print) printf("\n\rBatt:"); |
if(EE_Parameter.UnterspannungsWarnung < 50) // automatische Zellenerkennung |
{ |
timer = SetDelay(500); |
if(print) while (!CheckDelay(timer)); |
// up to 6s LiPo, less than 2s is technical impossible |
for(cells = 2; cells < 7; cells++) |
{ |
if(UBat < cells * MAX_CELL_VOLTAGE) break; |
} |
BattLowVoltageWarning = cells * EE_Parameter.UnterspannungsWarnung; |
if(print) |
{ |
Piep(cells, 200); |
printf(" %d Cells ", cells); |
} |
} |
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung; |
if(print) printf(" Low warning: %d.%d",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer,i,timer2 = 0, timerPolling; |
unsigned char update_spi = 1; |
DDRB = 0x00; |
PORTB = 0x00; |
DDRD = 0x0A; // UART & J3 J4 J5 |
PORTD = 0x5F; // PPM-Input & UART |
for(timer = 0; timer < 1000; timer++); // verzögern |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char AccZ_ErrorCnt = 0; |
if(PINB & 0x02) |
{ |
if(PIND & 0x10) PlatinenVersion = 21; // No Bridge from J4 to GND |
else { PlatinenVersion = 22; ACC_AltitudeControl = 1;}; |
} |
else |
{ |
PlatinenVersion = 23; ACC_AltitudeControl = 1; |
} |
#else |
if(PINB & 0x01) |
{ |
if(PINB & 0x02) PlatinenVersion = 13; |
else PlatinenVersion = 11; |
} |
else |
{ |
if(PINB & 0x02) PlatinenVersion = 20; |
else |
{ |
PlatinenVersion = 10; |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
PORTD = 0x47; // |
} |
} |
#endif |
DDRC = 0x81; // I2C, Spaker |
DDRC |=0x40; // HEF4017 Reset |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
HEF4017Reset_ON; |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2500; |
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0; |
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC |
ROT_OFF; |
GRN_ON; |
Timer_Init(); |
TIMER2_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
I2C_Init(1); |
SPI_MasterInit(); |
Capacity_Init(); |
LIBFC_Init(LIB_FC_COMPATIBLE); |
GRN_ON; |
sei(); |
ParamSet_Init(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Check connected BL-Ctrls |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
SendMotorData(); |
timer = SetDelay(500); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
printf("\n\rFound BL-Ctrl: "); |
timer = SetDelay(4000); |
for(i=0; i < MAX_MOTORS; i++) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up |
{ |
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) ) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
} |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
printf("%d",i+1); |
FoundMotors++; |
// if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new) "); |
} |
} |
for(i=0; i < MAX_MOTORS; i++) |
{ |
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0) |
{ |
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1); |
ServoActive = 2; // just in case the FC would be used as camera-stabilizer |
} |
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter |
} |
PrintLine();// ("\n\r==================================="); |
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER; |
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rCalibrating pressure sensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
SetNeutral(0); |
ROT_OFF; |
beeptime = 2000; |
ExternControl.Digital[0] = 0x55; |
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1); |
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1); |
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF)) |
{ |
FlugMinuten = 0; |
FlugMinutenGesamt = 0; |
} |
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt); |
LcdClear(); |
I2CTimeout = 5000; |
WinkelOut.Orientation = 1; |
LipoDetection(1); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
PrintLine();// ("\n\r==================================="); |
//SpektrumBinding(); |
timer = SetDelay(2000); |
timerPolling = SetDelay(250); |
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active |
//printf("\n\rEE_Parameter size:%i\n\r", PARAMSET_STRUCT_LEN); |
DebugOut.Status[0] = 0x01 | 0x02; |
JetiBeep = 0; |
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1; |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
while(1) |
{ |
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off |
//GRN_ON; |
if(UpdateMotor && AdReady) // ReglerIntervall |
{ |
//GRN_OFF; |
UpdateMotor=0; |
if(WinkelOut.CalcState) CalMk3Mag(); |
else MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ } |
else |
{ |
TIMSK1 |= _BV(ICIE1); // enable PPM-Input |
PPM_in[0] = 0; // set RSSI to zero on data timeout |
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160; |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!--I2CTimeout || MissingMotor) |
{ |
if(!I2CTimeout) |
{ |
I2C_Reset(); |
I2CTimeout = 5; |
DebugOut.Analog[28]++; // I2C-Error |
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 25000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
ROT_OFF; |
} |
LIBFC_Polling(); |
if(!UpdateMotor) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NewSBusData) ProcessSBus(); |
else |
#endif |
{ |
if(CalculateServoSignals) CalculateServo(); |
DatenUebertragung(); |
BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
static unsigned char second; |
timer += 20; // 20 ms interval |
CalcNickServoValue(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu(); |
else |
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario(); |
// ++++++++++++++++++++++++++++ |
// + check the ACC-Z range |
if(ACC_AltitudeControl && ((Aktuell_az < 300) || (DebugOut.Analog[7] < (128 * 4) && Aktuell_az > 850))) // DebugOut.Analog[7] = GasMischanteil |
{ |
if(++AccZ_ErrorCnt > 50) |
{ |
if(MotorenEin) VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; |
else CalibrationDone = 0; |
} |
} |
else AccZ_ErrorCnt = 0; |
// ++++++++++++++++++++++++++++ |
#endif |
if(MissingMotor) |
{ |
VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
else |
{ |
if(!beeptime) |
{ |
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status |
} |
} |
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;}; |
if(PcZugriff) PcZugriff--; |
else |
{ |
ExternControl.Config = 0; |
ExternStickNick = 0; |
ExternStickRoll = 0; |
ExternStickGier = 0; |
if(!SenderOkay) |
{ |
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2) |
{ |
beeptime = 15000; |
BeepMuster = 0x0c00; |
if(DisableRcOffBeeping) DisableRcOffBeeping = 2; |
} |
} |
} |
if(NaviDataOkay > 200) |
{ |
NaviDataOkay--; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX; |
VersionInfo.Flags |= FC_VERSION_FLAG_NC_PRESENT; |
} |
else |
{ |
if(NC_Version.Compatible) |
{ |
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX; |
NC_ErrorCode = 9; // "ERR: no NC communication" |
if(BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
} |
GPS_Nick = 0; |
GPS_Roll = 0; |
GPS_Aid_StickMultiplikator = 0; |
GPSInfo.Flags = 0; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl.AccErrorN = 0; |
FromNaviCtrl.AccErrorR = 0; |
FromNaviCtrl.CompassValue = -1; |
FromNC_AltitudeSpeed = 0; |
FromNC_AltitudeSetpoint = 0; |
VersionInfo.Flags &= ~FC_VERSION_FLAG_NC_PRESENT; |
NaviDataOkay = 0; |
} |
if(UBat < BattLowVoltageWarning) |
{ |
FC_StatusFlags |= FC_STATUS_LOWBAT; |
if(BeepMuster == 0xffff) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
else if(!beeptime) FC_StatusFlags &= ~FC_STATUS_LOWBAT; |
SendSPI = SPI_BYTEGAP; |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
// +++++++++++++++++++++++++++++++++ |
// Sekundentakt |
if(++second == 49) |
{ |
second = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ShowSettingNameTime) ShowSettingNameTime--; |
#endif |
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++; |
else timer2 = 1450; // 0,5 Minuten aufrunden |
if(modell_fliegt < 1024) |
{ |
if(StartLuftdruck < Luftdruck) StartLuftdruck += 5; |
else |
if(StartLuftdruck > Luftdruck) StartLuftdruck -= 5; |
} |
} |
// +++++++++++++++++++++++++++++++++ |
if(++timer2 == 2930) // eine Minute |
{ |
timer2 = 0; |
FlugMinuten++; |
FlugMinutenGesamt++; |
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256); |
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256); |
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht |
} |
} |
LED_Update(); |
Capacity_Update(); |
} //else DebugOut.Analog[26]++; |
} |
if(update_spi) update_spi--; |
} // 500Hz |
if(update_spi == 0) { SPI_StartTransmitPacket(); update_spi = 12;} // 41Hz |
else if(!SendSPI) { SPI_TransmitByte(); } |
} |
} |
//DebugOut.Analog[16] |
/branches/V0.91L_ACC-HH_MartinR/main.h |
---|
0,0 → 1,83 |
#ifndef _MAIN_H |
#define _MAIN_H |
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text); |
//#define ACT_S3D_SUMMENSIGNAL |
//#define UserParameter8_FAILSAFE |
//#define RECEIVER_SPEKTRUM_DX7EXP |
//#define RECEIVER_SPEKTRUM_DX8EXP |
// neue Hardware |
#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 23) PORTB &=~0x02; else PORTB |= 0x02;} |
#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 23) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_FLASH PORTB ^= 0x02 |
#define SYSCLK F_CPU |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define J3High PORTD |= 0x20 |
#define J3Low PORTD &= ~0x20 |
#define J4High PORTD |= 0x10 |
#define J4Low PORTD &= ~0x10 |
#define J5High PORTD |= 0x08 |
#define J5Low PORTD &= ~0x08 |
extern volatile unsigned char SenderOkay; |
extern unsigned char BattLowVoltageWarning; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern unsigned char FoundMotors,DisableRcOffBeeping; |
extern unsigned char JetiBeep; |
void LipoDetection(unsigned char print); |
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden; |
extern void PrintLine(void); // "=================================" |
extern unsigned char ActiveParamSet; |
#include <avr/pgmspace.h> |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#endif |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "spi.h" |
#include "led.h" |
#include "spektrum.h" |
#include "capacity.h" |
#include "eeprom.h" |
#include "libfc.h" |
#include "hottmenu.h" |
#include "debug.h" |
#include "sbus.h" |
#include "jeti_ex.h" |
#endif //_MAIN_H |
/branches/V0.91L_ACC-HH_MartinR/makefile |
---|
0,0 → 1,497 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega1284p |
#MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 0 |
VERSION_MINOR = 91 |
VERSION_PATCH = 11 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 55 # Navi-Kompatibilität |
LIB_FC_COMPATIBLE = 3 # Library |
MOD = ACC-HH_MartinR |
#------------------------------------------------------------------- |
# ATMEGA644: 63487 is maximum |
#------------------------------------------------------------------- |
# 0 a |
# 1 b |
# 2 c |
# 3 d |
# 4 e |
# 5 f |
# 6 g |
# 7 h |
# 8 i |
# 9 j |
# 10 k |
# 11 L |
#------------------------------------------------------------------- |
# get SVN revision |
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'") |
ifeq ($(MCU), atmega1284p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA1284P |
LIBFC_EXT = 1284 |
endif |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA644 |
LIBFC_EXT = 644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_PATCH), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 6) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 7) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 8) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 9) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 10) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 11) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 12) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 13) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 14) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 15) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 16) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 17) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 18) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 19) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 20) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 21) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 22) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 23) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 24) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV)_$(MOD) |
endif |
ifeq ($(VERSION_PATCH), 25) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV)_$(MOD) |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
#OPT = 2 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c |
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c |
SRC += mymath.c jetimenu.c capacity.c debug.c |
SRC += hottmenu.c sbus.c user_receiver.c |
SRC += jeti_ex.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = isqrt.S |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
# shrink code size |
CFLAGS += -mtiny-stack |
#CFLAGS += -fno-inline-functions |
CFLAGS += -mcall-prologues |
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE) -DLIB_FC_COMPATIBLE=$(LIB_FC_COMPATIBLE) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
LDFLAGS += libfc$(LIBFC_EXT).a |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = stk200 |
#AVRDUDE_PROGRAMMER = ponyser |
AVRDUDE_PROGRAMMER = avrispv2 |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
AVRDUDE_PORT = usb # programmer connected to USB |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -x -A $(TARGET).elf |
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) Flight-Ctrl_*.hex |
$(REMOVE) Flight-Ctrl_*.eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) Flight-Ctrl_*.elf |
$(REMOVE) Flight-Ctrl_*.map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) Flight-Ctrl_*.sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.o) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:%.c=%.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/branches/V0.91L_ACC-HH_MartinR/menu.c |
---|
0,0 → 1,265 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
char DisplayBuff[80]; |
unsigned char DispPtr = 0; |
unsigned char MaxMenue = 16; |
unsigned char MenuePunkt = 0; |
unsigned char RemoteKeys = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu_Putchar(char c) |
{ |
if(DispPtr < 80) DisplayBuff[DispPtr++] = c; |
} |
void Menu(void) |
{ |
unsigned char i; |
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;} |
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;} |
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0; |
LcdClear(); |
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);} |
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);}; |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"+ MikroKopter +"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c V4",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a'); |
LCD_printfxy(0,2,"Setting:%d %s", ActiveParamSet,Mixer.Name); |
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!") |
else |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode); |
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
#endif |
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0]) |
else |
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d!!",MissingMotor) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
else |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode); |
} |
#endif |
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1]) |
else |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
break; |
case 1: |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5)); |
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5)); |
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck); |
LCD_printfxy(0,3,"Offset: %5i",OCR0A); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) LCD_printfxy(17,3,"(A)",OCR0A); |
#endif |
} |
else |
{ |
LCD_printfxy(0,0,"Height control"); |
LCD_printfxy(0,1,"DISABLED"); |
//LCD_printfxy(0,2,"Height control"); |
//LCD_printfxy(0,3,"DISABLED"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"act. bearing"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Compass: %5i",ErsatzKompassInGrad); |
break; |
case 3: |
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8); |
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8); |
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier); |
} |
else |
if((PlatinenVersion == 11) || (PlatinenVersion >= 20)) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
} |
else |
if(PlatinenVersion == 13) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier); |
} |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10); |
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower); |
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity); |
break; |
case 8: |
LCD_printfxy(0,0,"Receiver"); |
// LCD_printfxy(0,1,"RC-RSSI: %4i", PPM_in[0]); |
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay); |
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1); |
break; |
case 9: |
LCD_printfxy(0,0,"Compass"); |
LCD_printfxy(0,1,"Magnet: %5i",KompassValue); |
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad); |
LCD_printfxy(0,3,"Setpoint: %5i",KompassSollWert); |
break; |
case 10: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]); |
break; |
case 11: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]); |
break; |
case 12: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
/* case 13: |
LCD_printfxy(0,0,"ExternControl " ); |
LCD_printfxy(0,1,"Ni:%4i Ro:%4i ",ExternControl.Nick,ExternControl.Roll); |
LCD_printfxy(0,2,"Gs:%4i Gi:%4i ",ExternControl.Gas,ExternControl.Gier); |
LCD_printfxy(0,3,"Hi:%4i Cf:%4i ",ExternControl.Hight,ExternControl.Config); |
break; |
*/ |
case 13: |
LCD_printfxy(0,0,"BL-Ctrl Errors " ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK); |
// if(i*4 >= RequiredMotors) break; |
} |
break; |
case 14: |
LCD_printfxy(0,0,"BL Temperature" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature); |
// if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
case 15: |
LCD_printfxy(0,0,"BL-Ctrl found " ); |
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7)); |
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7)); |
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7)); |
if(Motor[9].State>>7) LCD_printfxy(4,3,"10"); |
if(Motor[10].State>>7) LCD_printfxy(8,3,"11"); |
if(Motor[11].State>>7) LCD_printfxy(12,3,"12"); |
break; |
case 16: |
LCD_printfxy(0,0,"Flight-Time " ); |
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt); |
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten); |
LCD_printfxy(13,3,"(reset)"); |
if(RemoteKeys & KEY4) |
{ |
FlugMinuten = 0; |
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten); |
} |
break; |
default: |
if(MenuePunkt == MaxMenue) MaxMenue--; |
MenuePunkt = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/branches/V0.91L_ACC-HH_MartinR/menu.h |
---|
0,0 → 1,17 |
#ifndef _MENU_H |
#define _MENU_H |
extern void Menu(void); |
extern void LcdClear(void); |
extern void Menu_Putchar(char c); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char MaxMenue; |
extern unsigned char MenuePunkt; |
extern unsigned char RemoteKeys; |
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);} |
#endif //_MENU_H |
/branches/V0.91L_ACC-HH_MartinR/mymath.c |
---|
0,0 → 1,41 |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "mymath.h" |
// discrete mathematics |
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192}; |
int16_t c_sin_8192(int16_t angle) |
{ |
int8_t m,n; |
int16_t sinus; |
// avoid negative angles |
if (angle < 0) |
{ |
m = -1; |
angle = abs(angle); |
} |
else m = +1; |
// fold angle to intervall 0 to 359 |
angle %= 360; |
// check quadrant |
if (angle <= 90) n=1; // first quadrant |
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant |
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant |
else {angle = 360 - angle; n = -1;} //fourth quadrant |
// get lookup value |
sinus = pgm_read_word(&pgm_sinlookup[angle]); |
// calculate sinus value |
return (sinus * m * n); |
} |
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
int16_t c_cos_8192(int16_t angle) |
{ |
return (c_sin_8192(90 - angle)); |
} |
/branches/V0.91L_ACC-HH_MartinR/mymath.h |
---|
0,0 → 1,10 |
#ifndef _MYMATH_H |
#define _MYMATH_H |
#include <inttypes.h> |
extern int16_t c_sin_8192(int16_t angle); |
extern int16_t c_cos_8192(int16_t angle); |
extern int16_t c_atan2(int16_t y, int16_t x); |
extern uint32_t c_sqrt(uint32_t a); |
#endif // _MYMATH_H |
/branches/V0.91L_ACC-HH_MartinR/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/branches/V0.91L_ACC-HH_MartinR/printf_P.h |
---|
0,0 → 1,69 |
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt |
/* |
Copyright (C) 1993 Free Software Foundation |
This file is part of the GNU IO Library. This library is free |
software; you can redistribute it and/or modify it under the |
terms of the GNU General Public License as published by the |
Free Software Foundation; either version 2, or (at your option) |
any later version. |
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this library; see the file COPYING. If not, write to the Free |
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
As a special exception, if you link this library with files |
compiled with a GNU compiler to produce an executable, this does not cause |
the resulting executable to be covered by the GNU General Public License. |
This exception does not however invalidate any other reasons why |
the executable file might be covered by the GNU General Public License. */ |
/* |
* Copyright (c) 1990 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. [rescinded 22 July 1999] |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/******************************************************************************/ |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
// function pointer to external callback function |
typedef void (*pVoidFnctChar) (char ); |
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...); |
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
#endif //_PRINTF_P_H_ |
/branches/V0.91L_ACC-HH_MartinR/rc.c |
---|
0,0 → 1,284 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
volatile int PPM_in[MAX_RC_IN]; |
volatile int PPM_diff[MAX_RC_IN]; // das differnzierte Stick-Signal |
volatile char Channels,tmpChannels = 0; |
volatile unsigned char NewPpmData = 1; |
unsigned int PPM_Neutral = 466; |
//############################################################################ |
// Clear the values |
void rc_sum_init(void) |
//############################################################################ |
{ |
unsigned char i; |
for(i=0;i<MAX_RC_IN;i++) |
{ |
//if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127; // MartinR: so war es |
if((i < 5)||((i>16) & (i<25))) PPM_in[i] = 0; else PPM_in[i] = -127; // MartinR: Initialisierung der seriellen Kanäle auf 0 |
PPM_diff[i] = 0; |
} |
PPM_in[PPM_IN_MAX] = +127; |
PPM_in[PPM_IN_OFF] = -127; |
PPM_in[PPM_IN_MID] = 0; |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
#ifndef ACT_S3D_SUMMENSIGNAL |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC)) |
#endif |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
Channels = index; |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;} |
} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
#endif |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
{ |
static unsigned int AltICR=0; |
static int ppm_in[13+4]; |
static int ppm_diff[13+4]; |
static int old_ppm_in[13+4]; |
static int old_ppm_diff[13+4]; |
signed int signal = 0,tmp; |
static unsigned char index, okay_cnt = 0; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
tmpChannels = index; |
if(tmpChannels >= 4 && Channels == tmpChannels) |
{ |
if(okay_cnt > 10) |
{ |
NewPpmData = 0; // Null bedeutet: Neue Daten |
for(index = 0; index < 13+4; index++) |
{ |
if(okay_cnt > 30) |
{ |
old_ppm_in[index] = PPM_in[index]; |
old_ppm_diff[index] = PPM_diff[index]; |
} |
PPM_in[index] = ppm_in[index]; |
PPM_diff[index] = ppm_diff[index]; |
} |
} |
if(okay_cnt < 255) okay_cnt++; |
} |
else |
{ |
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0; |
ROT_ON; |
} |
index = 1; |
if(!MotorenEin) Channels = tmpChannels; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if((abs(signal - ppm_in[index]) < 6)) |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(okay_cnt > 25) SenderOkay += 10; |
else |
if(okay_cnt > 10) SenderOkay += 2; |
if(SenderOkay > 200) SenderOkay = 200; |
} |
} |
tmp = (3 * (ppm_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3; |
else ppm_diff[index] = 0; |
ppm_in[index] = tmp; |
} |
else ROT_ON; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
#endif |
} |
if(index < 20) index++; |
else |
if(index == 20) |
{ |
unsigned char i; |
ROT_ON; |
index = 30; |
for(i=0;i<13+4;i++) // restore from older data |
{ |
PPM_in[i] = old_ppm_in[i]; |
PPM_diff[i] = 0; |
// okay_cnt /= 2; |
} |
} |
} |
} |
#endif |
} |
#else |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
signal /= 2; |
AltICR = ICR1; |
//Syncronisationspause? |
if((signal > 1100*2) && (signal < 8000*2)) |
{ |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13) |
{ |
if((signal > 250) && (signal < 687*2)) |
{ |
signal -= 962; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
} |
} |
} |
#endif |
/branches/V0.91L_ACC-HH_MartinR/rc.h |
---|
0,0 → 1,42 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega644__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644P__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
extern void rc_sum_init (void); |
extern volatile int PPM_in[MAX_RC_IN]; |
extern volatile int PPM_diff[MAX_RC_IN]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
extern volatile char Channels,tmpChannels; |
extern unsigned int PPM_Neutral; |
// 0 -> frei bzw. ACT rssi |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 -> -127 |
// 31 -> 0 |
// 32 -> 128 |
#define SERIAL_POTI_START 17 |
#define WP_EVENT_PPM_IN 29 |
#define PPM_IN_OFF 30 |
#define PPM_IN_MAX 31 |
#define PPM_IN_MID 32 |
#define FromNC_WP_EventChannel PPM_in[WP_EVENT_PPM_IN] // WP_EVENT-Channel-Value |
#endif //_RC_H |
/branches/V0.91L_ACC-HH_MartinR/sbus.c |
---|
0,0 → 1,199 |
/*####################################################################################### |
Decodes the sbus protocol |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "sbus.h" |
#include "main.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char NewSBusData = 0, sBusBuffer[25]; |
//############################################################################ |
// USART1 initialisation from killagreg |
void SbusUartInit(void) |
//############################################################################ |
{ |
// -- Start of USART1 initialisation for Spekturm seriell-mode |
// USART1 Control and Status Register A, B, C and baud rate register |
uint8_t sreg = SREG; |
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1); |
// disable all interrupts before reconfiguration |
cli(); |
// disable RX-Interrupt |
UCSR1B &= ~(1 << RXCIE1); |
// disable TX-Interrupt |
UCSR1B &= ~(1 << TXCIE1); |
// disable DRE-Interrupt |
UCSR1B &= ~(1 << UDRIE1); |
/* |
// set direction of RXD1 and TXD1 pins |
// set RXD1 (PD2) as an input pin |
PORTD |= (1 << PORTD2); |
DDRD &= ~(1 << DDD2); |
// set TXD1 (PD3) as an output pin |
PORTD |= (1 << PORTD3); |
DDRD |= (1 << DDD3); |
*/ |
// USART0 Baud Rate Register |
// set clock divider |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
// enable double speed operation |
UCSR1A |= (1 << U2X1); |
// enable receiver and transmitter |
//UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
UCSR1B = (1<<RXEN1); |
// set asynchronous mode |
UCSR1C &= ~(1 << UMSEL11); |
UCSR1C &= ~(1 << UMSEL10); |
// parity |
UCSR1C <= (1 << UPM11); // even |
UCSR1C &= ~(1 << UPM10); |
// stop bit |
UCSR1C |= (1 << USBS1); // two |
// 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
// flush receive buffer explicit |
while(UCSR1A & (1<<RXC1)) UDR1; |
// enable RX-interrupts at the end |
UCSR1B |= (1 << RXCIE1); |
// -- End of USART1 initialisation |
// restore global interrupt flags |
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss' |
SREG = sreg; |
return; |
} |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MIN_FRAMEGAP 68 // 7ms |
#define MAX_BYTEGAP 3 // 310us |
//############################################################################ |
// Is called by the uart RX interrupt |
//############################################################################ |
void SbusParser(unsigned char udr) |
{ |
static unsigned char ptr = 0; |
if(!SpektrumTimer && udr == 0x0f) // wait for the start |
{ |
ptr = 0; |
SpektrumTimer = 80; // 8ms gap |
} |
else |
{ |
if(++ptr == 24) // last byte |
{ |
NewSBusData = 1; |
} |
else |
if(ptr > 24) ptr = 25; |
else |
{ |
sBusBuffer[ptr] = udr; // collect all bytes |
} |
} |
} |
void ProcessSBus(void) |
{ |
static unsigned char load = 0; |
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process; |
unsigned int bitmask11 = 256; |
signed int signal = 0,tmp; |
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss' |
{ |
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200; |
} |
signal = sBusBuffer[1]; |
if(!load--) { process = (12*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load |
for(i = 0; i < process; i++) // collect the single bits |
{ |
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11; |
bitmask8 *= 2; |
if(!bitmask8) |
{ |
bitmask8 = 1; |
sbyte++; |
} |
bitmask11 *= 2; |
if(bitmask11 == 2048) |
{ |
bitmask11 = 1; |
signal = (signal-1024) / 5; // the resolution is higher than required |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
signal = 0; |
index++; // next channel |
} |
} |
NewPpmData = 0; // Null bedeutet: Neue Daten |
} |
NewSBusData = 0; |
} |
#endif |
/branches/V0.91L_ACC-HH_MartinR/sbus.h |
---|
0,0 → 1,11 |
#ifndef _SBUS_H |
#define _SBUS_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char NewSBusData, sBusBuffer[25]; |
extern void SbusParser(unsigned char); |
extern void SbusUartInit(void); |
extern void ProcessSBus(void); |
#endif |
#endif |
/branches/V0.91L_ACC-HH_MartinR/spi.c |
---|
0,0 → 1,401 |
// ######################## SPI - FlightCtrl ################### |
#include "main.h" |
#include "eeprom.h" |
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version; |
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version; |
struct str_ToNaviCtrl ToNaviCtrl; |
struct str_FromNaviCtrl FromNaviCtrl; |
struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
struct str_SPI_VersionInfo NC_Version; |
struct str_GPSInfo GPSInfo; |
unsigned char SPI_BufferIndex; |
unsigned char SPI_RxBufferIndex; |
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0; |
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)]; |
unsigned char *SPI_TX_Buffer; |
unsigned char SPITransferCompleted, SPI_ChkSum; |
unsigned char SPI_RxDataValid,NaviDataOkay = 250; |
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1, |
SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU, |
SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS, |
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU |
}; |
unsigned char SPI_CommandCounter = 0; |
unsigned char NC_ErrorCode = 0; |
unsigned char NC_GPS_ModeCharacter = ' '; |
unsigned char EarthMagneticField = 0; |
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0; |
unsigned char NC_To_FC_Flags = 0; |
unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card |
signed int POI_KameraNick = 0; // in 0,1° |
vector16_t MagVec = {0,0,0}; |
#ifdef USE_SPI_COMMUNICATION |
//------------------------------------------------------ |
void SPI_MasterInit(void) |
{ |
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input |
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT); |
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64 |
SPSR = 0;//(1<<SPI2X); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); |
SPITransferCompleted = 1; |
//SPDR = 0x00; // dummy write |
ToNaviCtrl.Sync1 = 0xAA; |
ToNaviCtrl.Sync2 = 0x83; |
ToNaviCtrl.Command = SPI_FCCMD_USER; |
ToNaviCtrl.IntegralNick = 0; |
ToNaviCtrl.IntegralRoll = 0; |
FromNaviCtrl_Value.SerialDataOkay = 0; |
SPI_RxDataValid = 0; |
} |
//------------------------------------------------------ |
void SPI_StartTransmitPacket(void) |
{ |
if (!SPITransferCompleted) return; |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl; |
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0; |
SPITransferCompleted = 0; |
UpdateSPI_Buffer(); // update buffer |
SPI_BufferIndex = 1; |
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1; |
SPDR = ToNaviCtrl.Sync1; // Start transmission |
} |
//------------------------------------------------------ |
//SIGNAL(SIG_SPI) |
void SPI_TransmitByte(void) |
{ |
static unsigned char SPI_RXState = 0; |
unsigned char rxdata; |
static unsigned char rxchksum; |
if (SPITransferCompleted) return; |
if (!(SPSR & (1 << SPIF))) return; |
SendSPI = SPI_BYTEGAP; |
// _delay_us(30); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave |
rxdata = SPDR; |
switch ( SPI_RXState) |
{ |
case 0: |
SPI_RxBufferIndex = 0; |
rxchksum = rxdata; |
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok |
break; |
case 1: |
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok |
else SPI_RXState = 0; |
break; |
case 2: |
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data |
//DebugOut.Analog[19]++; |
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl)) |
{ |
if (rxdata == rxchksum) |
{ |
unsigned char *ptr = (unsigned char *)&FromNaviCtrl; |
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer)); |
SPI_RxDataValid = 1; |
} |
else |
{ |
SPI_RxDataValid = 0; |
} |
SPI_RXState = 0; |
} |
else rxchksum += rxdata; |
break; |
} |
if (SPI_BufferIndex < sizeof(ToNaviCtrl)) |
{ |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); |
SPDR = SPI_TX_Buffer[SPI_BufferIndex]; |
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex]; |
} |
else SPITransferCompleted = 1; |
SPI_BufferIndex++; |
} |
//------------------------------------------------------ |
void UpdateSPI_Buffer(void) |
{ |
signed int tmp; |
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION; |
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); |
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); |
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR; |
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier; |
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4; |
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4; |
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0; |
// ToNaviCtrl.User8 = Parameter_UserParam8; |
// ToNaviCtrl.CalState = WinkelOut.CalcState; |
switch(ToNaviCtrl.Command) // |
{ |
case SPI_FCCMD_USER: |
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1; |
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2; |
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3; |
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4; |
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5; |
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6; |
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7; |
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8; |
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags; |
//if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) ToNaviCtrl.Param.Byte[8] &= ~FC_STATUS_FLY; |
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START); |
ToNaviCtrl.Param.Byte[9] = ActiveParamSet; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.ComingHomeAltitude; |
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2; |
if(!(PORTC & (1<<PORTC2))) FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) |
break; |
case SPI_FCCMD_BL_ACCU: |
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A |
ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh |
ToNaviCtrl.Param.Byte[4] = (unsigned char) UBat; // 0.1V |
//ToNaviCtrl.Param.Byte[5] = GetChannelValue(EE_Parameter.NaviGpsModeChannel); // GPS-Mode control // MartinR: so war es |
ToNaviCtrl.Param.Byte[5] = Parameter_NaviGpsModeControl; // MartinR: wird wiederverwendet für GPS free bei HH |
ToNaviCtrl.Param.Byte[6] = VarioCharacter; |
ToNaviCtrl.Param.Byte[7] = motorindex; |
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM; |
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State; |
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature; |
ToNaviCtrl.Param.Byte[11] = Motor[motorindex].Current; |
if(Mixer.Motor[++motorindex][0] == 0) // next motor is not used ? |
while(Mixer.Motor[motorindex][0] == 0 && motorindex) motorindex = (motorindex + 1) % 12; |
break; |
case SPI_FCCMD_PARAMETER1: |
ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain; // Parameters for the Naviboard |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsA; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation; |
break; |
case SPI_FCCMD_PARAMETER2: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviOut1Parameter; // Distance between Photo releases |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// create the ToNC_SpeakHoTT |
if(EE_Parameter.Receiver != RECEIVER_HOTT) |
{ |
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]); |
else HoTT_Waring(); |
} |
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT; |
#else |
ToNaviCtrl.Param.Byte[1] = 0; |
#endif |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed; |
break; |
case SPI_FCCMD_STICK: |
cli(); |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[0] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[1] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[2] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
sei(); |
ToNaviCtrl.Param.Byte[3] = (char) tmp; |
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0]; |
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1]; |
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2]; |
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3]; |
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4]; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5]; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6]; |
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7]; |
break; |
case SPI_FCCMD_MISC: |
if(WinkelOut.CalcState > 5) |
{ |
WinkelOut.CalcState = 0; |
ToNaviCtrl.Param.Byte[0] = 5; |
} |
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState; |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime; |
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5); |
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5); |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay; |
// ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0]; // ACT RSSI |
ToNaviCtrl.Param.Byte[10] = 0; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil |
break; |
case SPI_FCCMD_VERSION: |
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR; |
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR; |
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH; |
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE; |
ToNaviCtrl.Param.Byte[4] = PlatinenVersion; |
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0]; |
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1]; |
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER; |
ToNaviCtrl.Param.Byte[7] = 0; |
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig; |
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3; |
break; |
case SPI_FCCMD_SERVOS: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.ServoNickRefresh; // Parameters for the Servo Control |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.ServoCompInvert; |
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ServoNickComp; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.ServoNickMin; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.ServoNickMax; |
ToNaviCtrl.Param.Byte[6] = Parameter_ServoRollControl; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.ServoRollComp; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.ServoRollMin; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.ServoRollMax; |
ToNaviCtrl.Param.Byte[10] = Capacity.MinOfMaxPWM; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[28]; // I2C-Error counter |
break; |
} |
if(SPI_RxDataValid) |
{ |
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250; |
oldcommand = FromNaviCtrl.Command; |
CalculateCompassTimer = 1; |
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) |
{ |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
} |
// update compass readings |
// MagVec.x = FromNaviCtrl.MagVecX; |
// MagVec.y = FromNaviCtrl.MagVecY; |
// MagVec.z = FromNaviCtrl.MagVecZ; |
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime; |
switch (FromNaviCtrl.Command) |
{ |
case SPI_NCCMD_KALMAN: |
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0]; |
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1]; |
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2]; |
KompassFusion = FromNaviCtrl.Param.sByte[3]; |
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4]; |
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5]; |
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6]; |
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7]; |
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0) |
{ |
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben |
if(EE_Parameter.CamOrientation) // Kamera angle is not front |
{ |
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15); |
KompassSollWert %= 360; |
} |
} |
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel |
break; |
case SPI_NCCMD_VERSION: |
NC_Version.Major = FromNaviCtrl.Param.Byte[0]; |
NC_Version.Minor = FromNaviCtrl.Param.Byte[1]; |
NC_Version.Patch = FromNaviCtrl.Param.Byte[2]; |
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3]; |
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4]; |
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5]; |
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08)); |
NC_ErrorCode = FromNaviCtrl.Param.Byte[7]; |
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8]; |
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9]; |
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10]; |
NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11]; |
break; |
case SPI_NCCMD_GPSINFO: |
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0]; |
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1]; |
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2]; |
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3]; |
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2]; |
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3]; |
PPM_in[WP_EVENT_PPM_IN] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel) |
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9]; |
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm |
break; |
case SPI_MISC: |
EarthMagneticField = FromNaviCtrl.Param.Byte[0]; |
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1]; |
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(FromNaviCtrl.Param.Byte[3]) |
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3]; |
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4]; |
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5]; |
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3]; |
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8]; |
#endif |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case SPI_NCCMD_HOTT_DATA: |
if(EE_Parameter.Receiver == RECEIVER_HOTT) NC_Fills_HoTT_Telemety(); |
break; |
#endif |
// 0 = 0,1 |
// 1 = 2,3 |
// 2 = 4,5 |
// 3 = 6,7 |
// 4 = 8,9 |
// 5 = 10,11 |
default: |
break; |
} |
} |
else |
{ |
// KompassValue = 0; |
// KompassRichtung = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
} |
#endif |
/branches/V0.91L_ACC-HH_MartinR/spi.h |
---|
0,0 → 1,197 |
// ######################## SPI - FlightCtrl ################### |
#ifndef _SPI_H |
#define _SPI_H |
#include <util/delay.h> |
#include "vector.h" |
#define USE_SPI_COMMUNICATION |
#define SPI_BYTEGAP 3 |
//----------------------------------------- |
#define DDR_SPI DDRB |
#define SLAVE_SELECT_DDR_PORT DDRC |
#define SLAVE_SELECT_PORT PORTC |
#if defined(__AVR_ATmega1284P__) |
#define DD_SS PORTB4 |
#define DD_SCK PORTB7 |
#define DD_MOSI PORTB5 |
#define DD_MISO PORTB6 |
#define SPI_SLAVE_SELECT PORTC5 |
#else |
#define DD_SS PB4 |
#define DD_SCK PB7 |
#define DD_MOSI PB5 |
#define DD_MISO PB6 |
#define SPI_SLAVE_SELECT PC5 |
#endif |
// for compatibility reasons gcc3.x <-> gcc4.x |
#ifndef SPCR |
#define SPCR SPCR0 |
#endif |
#ifndef SPE |
#define SPE SPE0 |
#endif |
#ifndef MSTR |
#define MSTR MSTR0 |
#endif |
#ifndef SPR1 |
#define SPR1 SPR01 |
#endif |
#ifndef SPR0 |
#define SPR0 SPR00 |
#endif |
#ifndef SPIE |
#define SPIE SPIE0 |
#endif |
#ifndef SPDR |
#define SPDR SPDR0 |
#endif |
#ifndef SPIF |
#define SPIF SPIF0 |
#endif |
#ifndef SPSR |
#define SPSR SPSR0 |
#endif |
// ------------------------- |
#define SPI_FCCMD_USER 10 |
#define SPI_FCCMD_STICK 11 |
#define SPI_FCCMD_MISC 12 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_BL_ACCU 16 |
#define SPI_FCCMD_PARAMETER2 17 |
struct str_ToNaviCtrl |
{ |
unsigned char Sync1, Sync2; |
unsigned char Command; |
signed int IntegralNick; |
signed int IntegralRoll; |
signed int AccNick; |
signed int AccRoll; |
signed int GyroCompass; |
signed int GyroNick; |
signed int GyroRoll; |
signed int GyroGier; |
unsigned int FCStatus; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
#define SPI_NCCMD_KALMAN 103 |
#define SPI_NCCMD_VERSION 104 |
#define SPI_NCCMD_GPSINFO 105 |
#define SPI_NCCMD_HOTT_DATA 106 |
#define SPI_MISC 107 |
struct str_FromNaviCtrl |
{ |
unsigned char Command; |
signed int GPS_Nick; |
signed int GPS_Roll; |
signed int MagVecX; |
signed int CompassValue; |
signed int AccErrorN; |
signed int AccErrorR; |
signed int MagVecY; |
signed int MagVecZ; |
unsigned int BeepTime; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
struct str_FromNaviCtrl_Value |
{ |
signed char Kalman_K; |
signed char Kalman_MaxDrift; |
signed char Kalman_MaxFusion; |
unsigned char SerialDataOkay; |
signed char GpsZ; |
}; |
struct str_SPI_VersionInfo |
{ |
unsigned char Major; |
unsigned char Minor; |
unsigned char Patch; |
unsigned char Compatible; |
unsigned char Hardware; |
}; |
// Satfix types for GPSData.SatFix |
#define SATFIX_NONE 0x00 |
#define SATFIX_DEADRECKOING 0x01 |
#define SATFIX_2D 0x02 |
#define SATFIX_3D 0x03 |
#define SATFIX_GPS_DEADRECKOING 0x04 |
#define SATFIX_TIMEONLY 0x05 |
// Flags for interpretation of the GPSData.Flags |
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
#define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
#define FLAG_WKNSET 0x04 // (is Week Number valid) |
#define FLAG_TOWSET 0x08 // (is Time of Week valid) |
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate |
struct str_GPSInfo |
{ |
unsigned char Flags; // Status Flags |
unsigned char NumOfSats; // number of satelites |
unsigned char SatFix; // type of satfix |
unsigned char Speed; // m/sek |
unsigned int HomeDistance; // distance to Home in dm |
int HomeBearing; // bearing to home in deg |
}; |
#ifdef USE_SPI_COMMUNICATION |
extern struct str_GPSInfo GPSInfo; |
extern struct str_SPI_VersionInfo NC_Version; |
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
extern struct str_ToNaviCtrl ToNaviCtrl; |
extern struct str_FromNaviCtrl FromNaviCtrl; |
extern unsigned char SPI_CommandCounter,NaviDataOkay; |
extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
extern unsigned char NC_ErrorCode; |
extern void SPI_MasterInit(void); |
extern void SPI_StartTransmitPacket(void); |
extern void UpdateSPI_Buffer(void); |
extern void SPI_TransmitByte(void); |
extern signed int POI_KameraNick; |
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude; |
extern vector16_t MagVec; |
extern unsigned char EarthMagneticField; |
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic; |
#else |
// -------------------------------- Dummy ----------------------------------------- |
#define SPI_MasterInit() ; |
#define SPI_StartTransmitPacket() ; |
#define UpdateSPI_Buffer() ; |
#define SPI_TransmitByte() ; |
#endif |
#endif |
/branches/V0.91L_ACC-HH_MartinR/timer0.c |
---|
0,0 → 1,516 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#define MULTIPLYER 4 |
volatile unsigned int CountMilliseconds = 0; |
volatile unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
volatile unsigned char SendSPI = 0, ServoActive = 0, CalculateServoSignals = 1; |
unsigned char JustMK3MagConnected = 0; |
uint16_t RemainingPulse = 0; |
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
volatile int16_t ServoPanOffset = (255 / 2) * MULTIPLYER * 16; // MartinR: für Pan-Funktion |
unsigned int BeepMuster = 0xffff; |
signed int NickServoValue = 128 * MULTIPLYER * 16; |
volatile int16_t ServoNickValue = 0; |
volatile int16_t ServoRollValue = 0; |
volatile int16_t ServoPanValue = 0; // MartinR : für PAN-Funktion |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
ISR(TIMER0_OVF_vect) // 9,7kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
if(SendSPI) SendSPI--; |
if(SpektrumTimer) SpektrumTimer--; |
if(!cnt--) |
{ |
cnt = 9; |
CountMilliseconds++; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
if(!(PINC & 0x10)) JustMK3MagConnected = 1; |
if(beeptime) |
{ |
if(beeptime > 10) beeptime -= 10; else beeptime = 0; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pieper_ein) PORTC |= (1<<7); // Speaker an PORTC.7 |
else PORTC &= ~(1<<7); |
#else |
if(pieper_ein) |
{ |
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
else PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
else PORTC &= ~(1<<7); |
} |
#endif |
} |
if(JustMK3MagConnected && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
if(++cntKompass > 1000) JustMK3MagConnected = 0; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 362)) |
{ |
cntKompass += cntKompass / 41; |
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
} |
cntKompass = 0; |
} |
} |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;} |
} |
/*****************************************************/ |
/* Initialize Timer 2 */ |
/*****************************************************/ |
// The timer 2 is used to generate the PWM at PD7 (J7) |
// to control a camera servo for nick compensation. |
void TIMER2_Init(void) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts before reconfiguration |
cli(); |
PORTD &= ~(1<<PORTD7); // set PD7 to low |
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017) |
HEF4017Reset_ON; |
// Timer/Counter 2 Control Register A |
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1) |
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0) |
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0) |
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0)); |
TCCR2A |= (1<<WGM21)|(1<<WGM20); |
// Timer/Counter 2 Control Register B |
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz |
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us |
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms |
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1) |
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22)); |
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22); |
// Initialize the Timer/Counter 2 Register |
TCNT2 = 0; |
// Initialize the Output Compare Register A used for PWM generation on port PD7. |
OCR2A = 255; |
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0 |
// Timer/Counter 2 Interrupt Mask Register |
// Enable timer output compare match A Interrupt only |
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2)); |
TIMSK2 |= (1<<OCIE2A); |
SREG = sreg; |
} |
//---------------------------- |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 180; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TIMSK0 |= _BV(TOIE0); |
} |
/*****************************************************/ |
/* Control Servo Position */ |
/*****************************************************/ |
void CalcNickServoValue(void) |
{ |
signed int max, min; |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value |
{ |
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15); |
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20); |
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6; |
LIMIT_MIN_MAX(NickServoValue,min, max); |
} |
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control |
} |
void CalculateServo(void) |
{ |
//signed char cosinus, sinus; // MartinR : so war es |
extern signed char cosinus, sinus; // MartinR : extern für PAN-Funktion |
signed long nick, roll; |
nick = 0; // MartinR : StartWert bei abgeschalteten Nick/ Roll ausgleich |
roll = 0; // MartinR : StartWert bei abgeschalteten Nick/ Roll ausgleich |
int tmp; // MartinR : für PAN-Funktion // Wert : 0-24 -> 0-360 -> 15° steps |
/* // MartinR: bisher |
tmp = EE_Parameter.CamOrientation + ((Parameter_Servo4 - 125) * (Parameter_UserParam8 - 125)) / 400 ; //MartinR : für PAN-Funktion |
if (tmp < 0) tmp = 24- (abs(tmp)) % 24 ; // MartinR :Modulo 24 |
else tmp = tmp % 24 ; // MartinR :Modulo 24 |
*/ |
tmp = EE_Parameter.CamOrientation + ((Parameter_Servo4 - 125) * (Parameter_UserParam8 - 125)) / 200 ; //MartinR : für PAN-Funktion |
if (tmp < 0) tmp = 48- (abs(tmp)) % 48 ; // MartinR :Modulo 48 |
else tmp = tmp % 48 ; // MartinR :Modulo 48 |
// cosinus = sintab[EE_Parameter.CamOrientation + 6]; // MartinR : so war es |
// sinus = sintab[EE_Parameter.CamOrientation]; // MartinR : so war es |
//cosinus = sintab[tmp + 6]; // MartinR : für PAN-Funktion |
cosinus += (2*sintab[tmp + 12]- cosinus + 1) / 2; // MartinR : für PAN-Funktion |
sinus += (2*sintab[tmp] - sinus + 1) / 2; // MartinR : für PAN-Funktion |
if(CalculateServoSignals == 1) |
{ |
if (Parameter_UserParam7 < 50) // MartinR: um per UserParameter den Nickausgleich abzuschalten |
{ |
//nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L; // MartinR: so war es |
nick = (cosinus * IntegralNick) / 512L - (sinus * IntegralRoll) / 512L; // MartinR: bessere Auflösung |
nick -= POI_KameraNick * 7; |
} |
nick = ((long)Parameter_ServoNickComp * nick) / 512L; |
// offset (Range from 0 to 255 * 3 = 765) |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue; |
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo |
{ |
nick = ServoNickOffset / 16 + nick; |
} |
else |
{ // inverting movement of servo |
nick = ServoNickOffset / 16 - nick; |
} |
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
else ServoNickValue = nick; |
// limit servo value to its parameter range definition |
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER; |
} |
else |
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER; |
} |
if(PlatinenVersion < 20) CalculateServoSignals = 0; else CalculateServoSignals++; |
} |
else |
{ |
if (Parameter_UserParam7 < 100) // MartinR: um per UserParameter den Nickausgleich abzuschalten |
{ |
//roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L; // MartinR: so war es |
roll = (cosinus * IntegralRoll) / 512L + (sinus * IntegralNick) / 512L; // MartinR: bessere Auflösung |
} |
roll = ((long)Parameter_ServoRollComp * roll) / 512L; |
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV) |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 + roll; |
} |
else |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 - roll; |
} |
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
else ServoRollValue = roll; |
// limit servo value to its parameter range definition |
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER; |
} |
else |
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER; |
} |
// MartinR: Filterung der Pan- Funktion |
ServoPanOffset += ((int16_t)Parameter_Servo4 * (MULTIPLYER*16) - ServoPanOffset) / EE_Parameter.ServoManualControlSpeed; |
ServoPanValue = (int16_t)ServoPanOffset/16; // offset (Range from 0 to 255 * 3 = 765) |
CalculateServoSignals = 0; |
} |
} |
ISR(TIMER2_COMPA_vect) |
{ |
// frame len 22.5 ms = 14063 * 1.6 us |
// stop pulse: 0.3 ms = 188 * 1.6 us |
// min servo pulse: 0.6 ms = 375 * 1.6 us |
// max servo pulse: 2.4 ms = 1500 * 1.6 us |
// resolution: 1500 - 375 = 1125 steps |
#define IRS_RUNTIME 127 |
#define PPM_STOPPULSE 188 |
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh) |
#define MINSERVOPULSE 375 |
#define MAXSERVOPULSE 1500 |
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE) |
static uint8_t PulseOutput = 0; |
static uint16_t ServoFrameTime = 0; |
static uint8_t ServoIndex = 0; |
if(PlatinenVersion < 20) |
{ |
//--------------------------- |
// Nick servo state machine |
//--------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// accumulate time for correct update rate |
ServoFrameTime = RemainingPulse; |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; |
CalculateServoSignals = 1; |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF Nick servo state machine |
else |
{ |
//----------------------------------------------------- |
// PPM state machine, onboard demultiplexed by HEF4017 |
//----------------------------------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
if(ServoIndex == 0) // if we are at the sync gap |
{ |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time |
ServoFrameTime = 0; // reset servo frame time |
HEF4017Reset_ON; // enable HEF4017 reset |
} |
else // servo channels |
if(ServoIndex > EE_Parameter.ServoNickRefresh) |
{ |
RemainingPulse = 10; // end it here |
} |
else |
{ |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
switch(ServoIndex) // map servo channels |
{ |
case 1: // Nick Compensation Servo |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 2: // Roll Compensation Servo |
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 3: |
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 4: |
//RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER; // MartinR: so war es |
RemainingPulse += ServoPanValue - (256 / 2) * MULTIPLYER; // MartinR: zur Filterung der Pan-Funktion |
break; |
case 5: |
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
default: // other servo channels |
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs |
break; |
} |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// substract stop pulse width |
RemainingPulse -= PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
} |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
// set pulsewidth to stop pulse width |
RemainingPulse = PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset |
else HEF4017Reset_ON; |
ServoIndex++; |
if(ServoIndex > EE_Parameter.ServoNickRefresh+1) |
{ |
CalculateServoSignals = 1; |
ServoIndex = 0; // reset to the sync gap |
} |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF PPM state machine |
// General pulse output generator |
if(RemainingPulse > (255 + IRS_RUNTIME)) |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
else |
{ |
if(RemainingPulse > 255) // this is the 2nd last part |
{ |
if((RemainingPulse - 255) < IRS_RUNTIME) |
{ |
OCR2A = 255 - IRS_RUNTIME; |
RemainingPulse -= 255 - IRS_RUNTIME; |
} |
else // last part > ISR_RUNTIME |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
} |
else // this is the last part |
{ |
OCR2A = RemainingPulse; |
RemainingPulse = 0; |
PulseOutput = 0; // trigger to stop pulse |
} |
} // EOF general pulse output generator |
} |
/branches/V0.91L_ACC-HH_MartinR/timer0.h |
---|
0,0 → 1,27 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
#define HEF4017Reset_ON PORTC |= (1<<PORTC6) |
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6) |
void Timer_Init(void); |
void TIMER2_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void CalculateServo(void); |
void CalcNickServoValue(void); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern unsigned int BeepMuster; |
extern volatile unsigned char SendSPI, ServoActive, CalculateServoSignals; |
extern volatile int16_t ServoNickValue; |
extern volatile int16_t ServoRollValue; |
extern signed int NickServoValue; |
extern unsigned char JustMK3MagConnected; |
extern volatile int16_t ServoPanValue; // MartinR : für PAN-Funktion |
extern signed char cosinus, sinus; // MartinR : extern für PAN-Funktion |
/branches/V0.91L_ACC-HH_MartinR/twimaster.c |
---|
0,0 → 1,469 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/twi.h> |
#include "eeprom.h" |
#include "twimaster.h" |
#include "fc.h" |
#include "analog.h" |
#include "uart.h" |
#include "timer0.h" |
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX; |
volatile uint8_t dac_channel = 0; |
volatile uint8_t motor_write = 0; |
volatile uint8_t motor_read = 0; |
volatile uint8_t I2C_TransferActive = 0; |
volatile uint16_t I2CTimeout = 100; |
uint8_t MissingMotor = 0; |
volatile uint8_t BLFlags = 0; |
MotorData_t Motor[MAX_MOTORS]; |
// bit mask for witch BL the configuration should be sent |
volatile uint16_t BLConfig_WriteMask = 0; |
// bit mask for witch BL the configuration should be read |
volatile uint16_t BLConfig_ReadMask = 0; |
// buffer for BL Configuration |
BLConfig_t BLConfig; |
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);} |
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define TWI_BASE_ADDRESS 0x52 |
/**************************************************/ |
/* Initialize I2C (TWI) */ |
/**************************************************/ |
void I2C_Init(char clear) |
{ |
uint8_t i; |
uint8_t sreg = SREG; |
cli(); |
// SDA is INPUT |
DDRC &= ~(1<<DDC1); |
// SCL is output |
DDRC |= (1<<DDC0); |
// pull up SDA |
PORTC |= (1<<PORTC0)|(1<<PORTC1); |
// TWI Status Register |
// prescaler 1 (TWPS1 = 0, TWPS0 = 0) |
TWSR &= ~((1<<TWPS1)|(1<<TWPS0)); |
// set TWI Bit Rate Register |
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; |
twi_state = TWI_STATE_MOTOR_TX; |
motor_write = 0; |
motor_read = 0; |
if(clear) for(i=0; i < MAX_MOTORS; i++) |
{ |
Motor[i].Version = 0; |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
Motor[i].State = 0; |
Motor[i].ReadMode = BL_READMODE_STATUS; |
Motor[i].Current = 0; |
Motor[i].MaxPWM = 0; |
Motor[i].Temperature = 0; |
} |
sei(); |
SREG = sreg; |
} |
void I2C_Reset(void) |
{ |
// stop i2c bus |
I2C_Stop(TWI_STATE_MOTOR_TX); |
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
I2C_TransferActive = 0; |
I2C_Init(0); |
I2C_WriteByte(0); |
BLFlags |= BLFLAG_READ_VERSION; |
} |
/****************************************/ |
/* I2C ISR */ |
/****************************************/ |
ISR (TWI_vect) |
{ |
static uint8_t missing_motor = 0, motor_read_temperature = 0; |
static uint8_t *pBuff = 0; |
static uint8_t BuffLen = 0; |
switch (twi_state++) |
{ |
// Master Transmit |
case 0: // TWI_STATE_MOTOR_TX |
I2C_TransferActive = 1; |
// skip motor if not used in mixer |
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++; |
if(motor_write >= MAX_MOTORS) // writing finished, read now |
{ |
BLConfig_WriteMask = 0; // reset configuration bitmask |
motor_write = 0; // reset motor write counter for next cycle |
twi_state = TWI_STATE_MOTOR_RX; |
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode |
} |
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint |
// if old version has been detected |
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
{ |
twi_state = 4; //jump over sending more data |
} |
// the new version has been detected |
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) ) |
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time) |
twi_state = 4; //jump over sending more data |
} |
break; |
case 2: // lower bits of setpoint (higher resolution) |
if ((0x0001<<motor_write) & BLConfig_ReadMask) |
{ |
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request |
} |
else |
{ |
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request |
} |
// send read mode and the lower bits of setpoint |
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07)); |
// configuration tranmission request? |
if((0x0001<<motor_write) & BLConfig_WriteMask) |
{ // redirect tx pointer to configuration data |
pBuff = (uint8_t*)&BLConfig; // select config for motor |
BuffLen = sizeof(BLConfig_t); |
} |
else |
{ // jump to end of transmission for that motor |
twi_state = 4; |
} |
break; |
case 3: // send configuration |
I2C_WriteByte(*pBuff); |
pBuff++; |
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left |
break; |
case 4: // repeat case 0-4 for all motors |
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received |
{ |
if(!missing_motor) missing_motor = motor_write + 1; |
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
motor_write++; // next motor |
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive |
break; |
// Master Receive Data |
case 5: // TWI_STATE_MOTOR_RX |
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received |
{ // no response from the addressed slave received |
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit |
if(++motor_read >= MAX_MOTORS) |
{ // all motors read |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
} |
else |
{ // motor successfully addressed |
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit |
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) |
{ |
// new BL found |
switch(Motor[motor_read].ReadMode) |
{ |
case BL_READMODE_CONFIG: |
pBuff = (uint8_t*)&BLConfig; |
BuffLen = sizeof(BLConfig_t); |
break; |
case BL_READMODE_STATUS: |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp |
else BuffLen = 1;// read Current only |
break; |
} |
} |
else // old BL version |
{ |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm |
else BuffLen = 1; // read Current only |
} |
if(BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else |
{ |
I2C_ReceiveByte(); // read next byte |
} |
} |
MissingMotor = missing_motor; |
missing_motor = 0; |
break; |
case 6: // receive bytes |
*pBuff = TWDR; |
pBuff++; |
BuffLen--; |
if(BuffLen>1) |
{ |
I2C_ReceiveByte(); // read next byte |
} |
else if (BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else // nothing left |
{ |
if(BLFlags & BLFLAG_READ_VERSION) |
{ |
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN) && (Motor[motor_read].MaxPWM == 250) ) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
else Motor[motor_read].Version = 0; |
} |
if(++motor_read >= MAX_MOTORS) |
{ |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_TransferActive = 0; |
return; |
} |
twi_state = 6; // if there are some bytes left |
break; |
// writing Gyro-Offsets |
case 18: |
I2C_WriteByte(0x98); // Address the DAC |
break; |
case 19: |
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C) |
break; |
case 20: |
switch(dac_channel) |
{ |
case 0: |
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A |
break; |
case 1: |
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B |
break; |
case 2: |
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C |
break; |
} |
break; |
case 21: |
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80 |
break; |
case 22: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
I2CTimeout = 10; |
// repeat case 18...22 until all DAC Channels are updated |
if(dac_channel < 2) |
{ |
dac_channel ++; // jump to next channel |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel |
} |
else |
{ |
dac_channel = 0; // reset dac channel counter |
BLFlags |= BLFLAG_TX_COMPLETE; |
} |
break; |
default: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2CTimeout = 10; |
motor_write = 0; |
motor_read = 0; |
I2C_TransferActive = 0; |
break; |
} |
} |
uint8_t I2C_WriteBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor) |
{ |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
} |
// check BL configuration to send |
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) // 0 means all |
{ |
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration |
} |
else //only one specific motor |
{ |
BLConfig_WriteMask = 0x0001<<(motor-1); |
} |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_WriteMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_write = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent |
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); |
return(BLCONFIG_SUCCESS); |
} |
uint8_t I2C_ReadBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE); |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_ReadMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_read = 0; |
BLConfig.Revision = 0; // bad revision |
BLConfig.crc = 0; // bad checksum |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors |
// validate result |
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
return(BLCONFIG_SUCCESS); |
} |
/branches/V0.91L_ACC-HH_MartinR/twimaster.h |
---|
0,0 → 1,100 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.h> |
+ |
+#define TWI_STATE_MOTOR_TX 0 |
+#define TWI_STATE_MOTOR_RX 5 |
+#define TWI_STATE_GYRO_OFFSET_TX 18 |
+ |
+extern volatile uint8_t twi_state; |
+extern volatile uint8_t motor_write; |
+extern volatile uint8_t motor_read; |
+extern volatile uint8_t I2C_TransferActive; |
+ |
+extern uint8_t MissingMotor; |
+ |
+#define MAX_MOTORS 12 |
+#define MOTOR_STATE_PRESENT_MASK 0x80 |
+#define MOTOR_STATE_ERROR_MASK 0x7F |
+ |
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01 |
+ |
+#define BLFLAG_TX_COMPLETE 0x01 |
+#define BLFLAG_READ_VERSION 0x02 |
+ |
+extern volatile uint8_t BLFlags; |
+ |
+ |
+#define BL_READMODE_STATUS 0 |
+#define BL_READMODE_CONFIG 16 |
+ |
+typedef struct |
+{ |
+ uint8_t Version; // the version of the BL (0 = old) |
+ uint8_t SetPoint; // written by attitude controller |
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs |
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present |
+ uint8_t ReadMode; // select data to read |
+ // the following bytes must be exactly in that order! |
+ uint8_t Current; // in 0.1 A steps, read back from BL |
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40) |
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C |
+} __attribute__((packed)) MotorData_t; |
+ |
+extern MotorData_t Motor[MAX_MOTORS]; |
+ |
+#define BLCONFIG_REVISION 2 |
+ |
+#define MASK_SET_PWM_SCALING 0x01 |
+#define MASK_SET_CURRENT_LIMIT 0x02 |
+#define MASK_SET_TEMP_LIMIT 0x04 |
+#define MASK_SET_CURRENT_SCALING 0x08 |
+#define MASK_SET_BITCONFIG 0x10 |
+#define MASK_RESET_CAPCOUNTER 0x20 |
+#define MASK_SET_DEFAULT_PARAMS 0x40 |
+#define MASK_SET_SAVE_EEPROM 0x80 |
+ |
+#define BITCONF_REVERSE_ROTATION 0x01 |
+#define BITCONF_RES1 0x02 |
+#define BITCONF_RES2 0x04 |
+#define BITCONF_RES3 0x08 |
+#define BITCONF_RES4 0x10 |
+#define BITCONF_RES5 0x20 |
+#define BITCONF_RES6 0x40 |
+#define BITCONF_RES7 0x80 |
+ |
+typedef struct |
+{ |
+ uint8_t Revision; // must be BL_REVISION |
+ uint8_t SetMask; // settings mask |
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit |
+ uint8_t CurrentLimit; // current limit in A |
+ uint8_t TempLimit; // in °C |
+ uint8_t CurrentScaling; // scaling factor for current measurement |
+ uint8_t BitConfig; // see defines above |
+ uint8_t crc; // checksum |
+} __attribute__((packed)) BLConfig_t; |
+ |
+extern BLConfig_t BLConfig; |
+ |
+extern volatile uint16_t I2CTimeout; |
+ |
+void I2C_Init(char); // Initialize I2C |
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);} |
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);} |
+void I2C_Reset(void); // Reset I2C |
+ |
+#define BLCONFIG_SUCCESS 0 |
+#define BLCONFIG_ERR_MOTOR_RUNNING 1 |
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2 |
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3 |
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4 |
+#define BLCONFIG_ERR_CHECKSUM 5 |
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6 |
+ |
+uint8_t I2C_WriteBLConfig(uint8_t motor); |
+uint8_t I2C_ReadBLConfig(uint8_t motor); |
+ |
+#endif |
/branches/V0.91L_ACC-HH_MartinR/uart.c |
---|
0,0 → 1,793 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <stdarg.h> |
#include <string.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "uart.h" |
#include "libfc.h" |
#include "eeprom.h" |
#define FC_ADDRESS 1 |
#define NC_ADDRESS 2 |
#define MK3MAG_ADDRESS 3 |
#define BL_CTRL_ADDRESS 5 |
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds |
#define MAX_SENDE_BUFF 220 |
#define MAX_EMPFANGS_BUFF 220 |
#define BLPARAM_REVISION 1 |
#define MASK_SET_PWM_SCALING 0x01 |
#define MASK_SET_CURRENT_LIMIT 0x02 |
#define MASK_SET_TEMP_LIMIT 0x04 |
#define MASK_SET_CURRENT_SCALING 0x08 |
#define MASK_SET_BITCONFIG 0x10 |
#define MASK_RESET_CAPCOUNTER 0x20 |
#define MASK_SET_DEFAULT_PARAMS 0x40 |
#define MASK_SET_SAVE_EEPROM 0x80 |
unsigned char GetExternalControl = 0,DebugDisplayAnforderung1 = 0, DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0, GetPPMChannelAnforderung = 0; |
unsigned char DisplayLine = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char TxdBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned char *pRxData = 0; |
unsigned char RxDataLen = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned volatile char PC_MotortestActive = 0; |
unsigned char DebugTextAnforderung = 255; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[16]; |
unsigned char MeineSlaveAdresse = 1; // Flight-Ctrl |
unsigned char ConfirmFrame; |
struct str_DebugOut DebugOut; |
struct str_ExternControl ExternControl; |
struct str_VersionInfo VersionInfo; |
struct str_WinkelOut WinkelOut; |
struct str_Data3D Data3D; |
int Display_Timer, Debug_Timer,Kompass_Timer,Timer3D; |
unsigned int DebugDataIntervall = 0, Intervall3D = 0, Display_Interval = 0; |
unsigned int AboTimeOut = 0; |
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation |
const unsigned char ANALOG_TEXT[32][16] PROGMEM = |
{ |
//1234567890123456 |
"AngleNick ", //0 |
"AngleRoll ", |
"AccNick ", |
"AccRoll ", |
"YawGyro ", |
"Altitude [0.1m] ", //5 |
"AccZ ", |
"Gas ", |
"Compass Value ", |
"Voltage [0.1V] ", |
"Receiver Level ", //10 |
"Gyro Compass ", |
"Motor 1 ", |
"Motor 2 ", |
"Motor 3 ", |
"Motor 4 ", //15 |
"PAN-Cos ",//MartinR |
"PAN-Sin ",//MartinR |
"PAN-Servo ",//MartinR |
"Servo-Roll ",//MartinR |
"Servo-Nick ", //20 |
"Hovergas ", |
"Current [0.1A] ", |
"Capacity [mAh] ", |
"Height Setpoint ", |
"25 ", //25 |
"26 ", //"26 CPU OverLoad ", |
"Compass Setpoint", |
"I2C-Error ", |
"BL Limit ", |
"GPS_Nick ", //30 |
"GPS_Roll " |
}; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_TX_vect) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = TxdBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR0 = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_RX_vect) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update |
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation |
SioTmp = UDR0; |
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr + 1; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R') |
{ |
LcdClear(); |
wdt_enable(WDTO_250MS); // Reset-Commando |
ServoActive = 0; |
} |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += TxdBuffer[i]; |
} |
// if(i > MAX_SENDE_BUFF - 3) tmpCRC += 11; |
tmpCRC %= 4096; |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
TxdBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR0 = TxdBuffer[0]; |
//if(DebugOut.Analog[] < i) DebugOut.Analog[] = i; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len) |
{ |
va_list ap; |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
unsigned char *snd = 0; |
int len = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...) |
TxdBuffer[pt++] = cmd; // Commando |
va_start(ap, BufferAnzahl); |
if(BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
while(len) |
{ |
if(len) |
{ |
a = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else a = 0; |
if(len) |
{ |
b = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else b = 0; |
if(len) |
{ |
c = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else c = 0; |
TxdBuffer[pt++] = '=' + (a >> 2); |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
} |
va_end(ap); |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden. |
{ |
unsigned char a,b,c,d; |
unsigned char x,y,z; |
unsigned char ptrIn = 3; // start at begin of data block |
unsigned char ptrOut = 3; |
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab. |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) RxdBuffer[ptrOut++] = x; else break; |
if(len--) RxdBuffer[ptrOut++] = y; else break; |
if(len--) RxdBuffer[ptrOut++] = z; else break; |
} |
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte |
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert? |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
unsigned char tempchar1, tempchar2; |
Decode64(); // dekodiere datenblock im Empfangsbuffer |
switch(RxdBuffer[1]-'a') // check for Slave Address |
{ |
case FC_ADDRESS: // FC special commands |
switch(RxdBuffer[2]) |
{ |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 't':// Motortest |
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
PC_MotortestActive = 240; |
//while(!UebertragungAbgeschlossen); |
//SendOutData('T', MeineSlaveAdresse, 0); |
PcZugriff = 255; |
break; |
case 'n':// "Get Mixer |
while(!UebertragungAbgeschlossen); |
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1); |
Debug("Mixer lesen"); |
break; |
case 'm':// "Write Mixer |
if(pRxData[0] == EEMIXER_REVISION) |
{ |
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1); |
MixerTable_WriteToEEProm(); |
tempchar1 = 1; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER; |
} |
else |
{ |
tempchar1 = 0; |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
break; |
case 'p': // get PPM Channels |
GetPPMChannelAnforderung = 1; |
PcZugriff = 255; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
if(MotorenEin) break; |
if((10 <= pRxData[0]) && (pRxData[0] < 20)) |
{ |
tempchar1 = pRxData[0] - 10; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 1); |
} |
else if((20 <= pRxData[0]) && (pRxData[0] < 30)) |
{ |
tempchar1 = pRxData[0] - 20; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 0); |
} |
else |
{ |
tempchar1 = pRxData[0]; |
if(tempchar1 == 0xFF) |
{ |
tempchar1 = GetActiveParamSet(); |
} |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
// load requested parameter set |
ParamSet_ReadFromEEProm(tempchar1); |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1); |
Debug("Lese Setting %d", tempchar1); |
break; |
case 's': // Parametersatz speichern |
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range |
{ |
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1); |
ParamSet_WriteToEEProm(pRxData[0]); |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
tempchar1 = GetActiveParamSet(); |
} |
else |
{ |
tempchar1 = 0; // mark in response an invlid setting |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) Piep(tempchar1,110); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'f': // auf anderen Parametersatz umschalten |
if(MotorenEin) break; |
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]); |
tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
Piep(tempchar1,110); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'y':// serial Potis |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1]; |
break; |
case 'u': // request BL parameter |
Debug("Reading BL %d", pRxData[0]); |
// try to read BL configuration |
tempchar2 = I2C_ReadBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t)); |
break; |
case 'w': // write BL parameter |
Debug("Writing BL %d", pRxData[0]); |
if(RxDataLen >= 1+sizeof(BLConfig_t)) |
{ |
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t)); |
tempchar2 = I2C_WriteBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; // indicate error |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2)); |
} |
break; |
case 'j': |
if(MotorenEin) break; |
tempchar1 = LIBFC_GetCPUType(); |
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P)) |
{ |
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1); |
cli(); |
// UART0 & UART1 disable RX and TX-Interrupt |
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0)); |
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1)); |
// UART0 & UART1 disable receiver and transmitter |
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0)); |
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1)); |
// UART0 & UART1 flush receive buffer explicit |
while ( UCSR1A & (1<<RXC1) ) UDR1; |
while ( UCSR0A & (1<<RXC0) ) UDR0; |
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2; |
else |
{ // Jeti or HoTT update |
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT |
//#endif |
ReceiverUpdateModeActive = 1; |
// UART0 & UART1 set baudrate |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
UBRR0H = UBRR1H; |
UBRR0L = UBRR1L; |
// UART1 no parity |
UCSR1C &= ~(1 << UPM11); |
UCSR1C &= ~(1 << UPM10); |
// UART1 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
} |
// UART0 & UART1 1 stop bit |
UCSR1C &= ~(1 << USBS1); |
UCSR0C &= ~(1 << USBS0); |
// UART1 clear 9th bit |
UCSR1B &= ~(1<<TXB81); |
// enable receiver and transmitter for UART0 and UART1 |
UCSR0B |= (1 << TXEN0) | (1 << RXEN0); |
UCSR1B |= (1 << TXEN1) | (1 << RXEN1); |
// enable RX-Interrupt for UART0 and UART1 |
UCSR0B |= (1 << RXCIE0); |
UCSR1B |= (1 << RXCIE1); |
// disable other Interrupts |
TIMSK0 = 0; |
TIMSK1 = 0; |
TIMSK2 = 0; |
sei(); |
} |
break; |
} // case FC_ADDRESS: |
default: // any Slave Address |
switch(RxdBuffer[2]) |
{ |
// 't' comand placed here only for compatibility to BL |
case 't':// Motortest |
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
while(!UebertragungAbgeschlossen); |
SendOutData('T', MeineSlaveAdresse, 0); |
PC_MotortestActive = 250; |
PcZugriff = 255; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 'a':// Texte der Analogwerte |
DebugTextAnforderung = pRxData[0]; |
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31; |
PcZugriff = 255; |
break; |
case 'b': |
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl)); |
ConfirmFrame = ExternControl.Frame; |
PcZugriff = 255; |
break; |
case 'c': // Poll the 3D-Data |
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);} |
Intervall3D = pRxData[0] * 10; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'd': // Poll the debug data |
PcZugriff = 255; |
DebugDataIntervall = (unsigned int)pRxData[0] * 10; |
if(DebugDataIntervall > 0) DebugDataAnforderung = 1; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'h':// x-1 Displayzeilen |
PcZugriff = 255; |
if((pRxData[0] & 0x80) == 0x00) // old format |
{ |
DisplayLine = 2; |
Display_Interval = 0; |
} |
else // new format |
{ |
RemoteKeys |= ~pRxData[0]; |
Display_Interval = (unsigned int)pRxData[1] * 10; |
DisplayLine = 4; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
} |
DebugDisplayAnforderung = 1; |
break; |
case 'l':// x-1 Displayzeilen |
PcZugriff = 255; |
MenuePunkt = pRxData[0]; |
DebugDisplayAnforderung1 = 1; |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// |
GetExternalControl = 1; |
break; |
default: |
//unsupported command received |
break; |
} |
break; // default: |
} |
NeuerDatensatzEmpfangen = 0; |
pRxData = 0; |
RxDataLen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
void uart_putchar (char c) |
//############################################################################ |
{ |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(UCSR0A, UDRE0); |
//Ausgabe des Zeichens |
UDR0 = c; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1); |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCSR0B = (1 << TXEN0) | (1 << RXEN0); |
// UART Double Speed (U2X) |
UCSR0A |= (1 << U2X0); |
// RX-Interrupt Freigabe |
UCSR0B |= (1 << RXCIE0); |
// TX-Interrupt Freigabe |
UCSR0B |= (1 << TXCIE0); |
// USART0 Baud Rate Register |
// set clock divider |
UBRR0H = (uint8_t)(ubrr >> 8); |
UBRR0L = (uint8_t)ubrr; |
Debug_Timer = SetDelay(DebugDataIntervall); |
Kompass_Timer = SetDelay(220); |
VersionInfo.SWMajor = VERSION_MAJOR; |
VersionInfo.SWMinor = VERSION_MINOR; |
VersionInfo.SWPatch = VERSION_PATCH; |
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR; |
VersionInfo.reserved1 = 0; |
VersionInfo.reserved2 = 0; |
VersionInfo.HWMajor = PlatinenVersion; |
pRxData = 0; |
RxDataLen = 0; |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
if(!UebertragungAbgeschlossen) return; |
if(CheckDelay(AboTimeOut)) |
{ |
Display_Interval = 0; |
DebugDataIntervall = 0; |
Intervall3D = 0; |
} |
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen) |
{ |
if(DisplayLine > 3)// new format |
{ |
Menu(); |
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80); |
} |
else // old format |
{ |
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!"); |
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20); |
if(DisplayLine++ > 3) DisplayLine = 0; |
} |
Display_Timer = SetDelay(Display_Interval); |
DebugDisplayAnforderung = 0; |
} |
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen) |
{ |
Menu(); |
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff)); |
DebugDisplayAnforderung1 = 0; |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
Debug_OK("Version gesendet"); |
} |
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl)); |
GetExternalControl = 0; |
} |
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
CopyDebugValues(); |
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall); |
} |
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen) |
{ |
Data3D.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR); |
Data3D.Centroid[0] = SummeNick >> 9; |
Data3D.Centroid[1] = SummeRoll >> 9; |
Data3D.Centroid[2] = Mess_Integral_Gier >> 9; |
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D)); |
Timer3D = SetDelay(Intervall3D); |
} |
if(DebugTextAnforderung != 255) // Texte für die Analogdaten |
{ |
unsigned char label[16]; // local sram buffer |
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra |
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16); |
DebugTextAnforderung = 255; |
} |
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen |
{ |
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame)); |
ConfirmFrame = 0; |
} |
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in)); |
GetPPMChannelAnforderung = 0; |
} |
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen) |
{ |
WinkelOut.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
//WinkelOut.UserParameter[0] = Parameter_UserParam1;//MartinR: so war es |
//WinkelOut.UserParameter[1] = Parameter_UserParam2; |
WinkelOut.UserParameter[0] = 0; // Martin R: deaktiviert,da userParameter amnderweitig verwendet |
WinkelOut.UserParameter[1] = 0; |
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut)); |
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt |
if(!NaviDataOkay) Kompass_Timer = SetDelay(99); |
else Kompass_Timer = SetDelay(999); |
} |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
} |
/branches/V0.91L_ACC-HH_MartinR/uart.h |
---|
0,0 → 1,117 |
#ifndef _UART_H |
#define _UART_H |
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args) |
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args) |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char ReceiverUpdateModeActive; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned volatile char PC_MotortestActive; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern unsigned char RemotePollDisplayLine; |
extern unsigned volatile char RxdBuffer[]; |
extern int Debug_Timer,Kompass_Timer; |
extern void UART_Init (void); |
extern void uart_putchar (char c); |
//extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void Uart1Init(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[16]; |
struct str_DebugOut |
{ |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_WinkelOut |
{ |
signed int Winkel[2]; |
unsigned char UserParameter[2]; |
unsigned char CalcState; |
unsigned char Orientation; |
}; |
extern struct str_WinkelOut WinkelOut; |
struct str_Data3D |
{ |
signed int Winkel[3]; // nick, roll, compass in 0,1° |
signed char Centroid[3]; |
signed char reserve[5]; |
}; |
extern struct str_Data3D Data3D; |
struct str_ExternControl |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
signed char Nick; |
signed char Roll; |
signed char Gier; |
unsigned char Gas; |
signed char Hight; |
unsigned char free; |
unsigned char Frame; |
unsigned char Config; |
}; |
extern struct str_ExternControl ExternControl; |
// FC hardware errors |
// bitmask for UART_VersionInfo_t.HardwareError[0] |
#define FC_ERROR0_GYRO_NICK 0x01 |
#define FC_ERROR0_GYRO_ROLL 0x02 |
#define FC_ERROR0_GYRO_YAW 0x04 |
#define FC_ERROR0_ACC_NICK 0x08 |
#define FC_ERROR0_ACC_ROLL 0x10 |
#define FC_ERROR0_ACC_TOP 0x20 |
#define FC_ERROR0_PRESSURE 0x40 |
#define FC_ERROR0_CAREFREE 0x80 |
// bitmask for UART_VersionInfo_t.HardwareError[1] |
#define FC_ERROR1_I2C 0x01 |
#define FC_ERROR1_BL_MISSING 0x02 |
#define FC_ERROR1_SPI_RX 0x04 |
#define FC_ERROR1_PPM 0x08 |
#define FC_ERROR1_MIXER 0x10 |
#define FC_ERROR1_RES1 0x20 |
#define FC_ERROR1_RES2 0x40 |
#define FC_ERROR1_RES3 0x80 |
// for FlightCtrl |
//VersionInfo.Flags |
#define FC_VERSION_FLAG_NC_PRESENT 0x01 |
// for NaviCtrl |
#define NC_VERSION_FLAG_MK3MAG_PRESENT 0x01 |
struct str_VersionInfo |
{ |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char reserved1; |
unsigned char SWPatch; |
unsigned char HardwareError[2]; |
unsigned char HWMajor; |
unsigned char reserved2; |
unsigned char Flags; |
}; |
extern struct str_VersionInfo VersionInfo; |
//#define USART0_BAUD 9600 |
//#define USART0_BAUD 14400 |
//#define USART0_BAUD 28800 |
//#define USART0_BAUD 38400 |
#define USART0_BAUD 57600 |
#endif //_UART_H |
/branches/V0.91L_ACC-HH_MartinR/user_receiver.c |
---|
0,0 → 1,23 |
//############################################################################ |
// Implement your own RC-decoding routines here |
//############################################################################ |
//############################################################################ |
// Initialize the UART here |
//############################################################################ |
void User_Receiver_Init(void) |
{ |
// SpektrumUartInit(); // or use an existing routine like this |
}; |
//############################################################################ |
// Is called by the uart RX interrupt |
// UDR contains the received byte |
//############################################################################ |
void User_RX_Parser(unsigned char udr) |
{ |
}; |
/branches/V0.91L_ACC-HH_MartinR/user_receiver.h |
---|
0,0 → 1,4 |
// for own implementations |
void User_Receiver_Init(void); |
void User_RX_Parser(unsigned char); |
/branches/V0.91L_ACC-HH_MartinR/vector.h |
---|
0,0 → 1,19 |
#ifndef _VECTOR_H |
#define _VECTOR_H |
typedef struct |
{ |
int32_t x; |
int32_t y; |
int32_t z; |
} __attribute__((packed)) vector32_t; |
typedef struct |
{ |
int16_t x; |
int16_t y; |
int16_t z; |
} __attribute__((packed)) vector16_t; |
#endif //_VECTOR_H |
/branches/V0.91L_ACC-HH_MartinR/version.txt |
---|
0,0 → 1,706 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |
V0.67a H.Buss 16.11.2007 |
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode) |
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus |
- Feinabstimmung |
- Beim HH-Modus gab es noch Bugs |
V0.67e H.Buss 29.11.2007 |
- Parameter: Dynamic Stability und Driftfaktor eingeführt |
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen |
- Kompatibilität zum Koptertool erhöht |
V0.67f H.Buss 04.12.2007 |
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional |
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv |
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts) |
V0.68a I.Busker 28.12.2007 |
- SPI.c & SPI.h ins Projekt aufgenommen |
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden |
V0.68c H.Buss 05.01.2008 |
- Stickauswertung verbessert -> träger und präziser |
- Alle Settings angepasst |
V0.69e H.Buss 05.05.2008 |
- kleinere Bugs beseitigt |
- Schneller Sinkflug jetzt möglich |
- Min- und Maxgas in den Settings geändert |
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet |
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren |
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert |
V0.69h H.Buss 21.05.2008 |
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden |
- SenderOkay auch an das Naviboard übertragen |
- Bessere Parameter bei Senderausfall |
V0.69j H.Buss 30.05.2008 |
- Höhere Präzision der Achsenkopplung |
V0.69k H.Buss 31.05.2008 |
- Bug in SPI.C behoben |
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte |
V0.69L H.Buss 14.06.2008 |
- feinere Cam-Servo-Auflösung |
V0.70a H.Buss 01.07.2008 |
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich |
V0.70b H.Buss 14.07.2008 |
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge) |
- eigene Parameter für GPS-Naviboard |
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8) |
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi... |
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt |
- KopterTool-Kompatibilität auf 8 erhöht |
V0.70c H.Buss 30.07.2008 |
- Parameter der Datenfusion leicht modifiziert |
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85) |
- MaxStick wird auf 100 begrenzt |
V0.70d H.Buss 02.08.2008 |
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an |
0.71b: H.Buss 19.10.2008 |
Kommunikation zum Navi erweitert: |
- Beeptime jetzt 32Bit |
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt |
0.71c: H.Buss 20.10.2008 |
- LoopConfig heisst jetzt BitConfig |
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen |
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab. |
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen |
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt |
0.71f: H.Buss 15.11.2008 |
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert |
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1 |
- VersionInfo.NaviKompatibel eingeführt |
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt |
- Luftdruckwert wird an das Navi übertragen |
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter |
- Debugdaten können jetzt mit 'f' gepollt werden |
0.71g: Gregor 09.12.2008 |
- Kommunikation überarbeitet |
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands |
0.71h: H.Buss 15.12.2008 |
- Freigegebene Version |
- NaviAngleLimitation als Parameter zum Navi implementiert |
- Antwort auf CMD: 't' entfernt |
0.72d: H.Buss 22.01.2009 |
- OCTO als Compilerschalter |
- Unterstützung der FC 2.0 (ME) |
- GYRO_D eingeführt |
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung |
0.72e: H.Buss 27.01.2009 |
- die 0.72d hatte kein Integral im Gier |
- Parameter eingeführt: |
EE_Parameter.NaviGpsPLimit |
EE_Parameter.NaviGpsILimit |
EE_Parameter.NaviGpsDLimit |
EE_Parameter.NaviPH_LoginTime |
EE_Parameter.AchsKopplung2 |
EE_Parameter.CouplingYawCorrection |
0.72f: H.Buss 28.01.2009 |
- Bug im Ersatzkompass entfernt |
0.72h: H.Buss 05.02.2009 |
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt |
- Achsentkopplung weiter verbessert |
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt |
0.72i: H.Buss 07.02.2009 |
- Abtastrate von 1kHz auf 2kHz erhöht |
0.72j: H.Buss 09.02.2009 |
- neue Implementierung der Servoausgänge |
0.72k: H.Buss 10.02.2009 |
- Abtastrate auf 5kHz erhöht |
0.72L: H.Buss 13.02.2009 |
- Signalfilterung überarbeitet |
- OCTO2 implementiert |
0.72M: H.Buss 13.02.2009 |
- Code Cleanup |
0.72o: H.Buss 24.02.2009 |
- Abtastrate auf 2kHz |
- HW-Version an Navi |
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik |
- Auswerteroutine für Spectrum-Satteliten implementiert |
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht |
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden |
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd) |
0.72p: H.Buss 01.03.2009 |
- Octo3 erstellt |
- Analogwerte umbenannt |
0.73a-d: H.Buss 05.04.2009 |
- MixerTabelle implementiert |
- I2C-Bus auf bis zu 12 Motoren erweitert |
- die Busfehler der BL-Regler werden im Menü angezeigt |
- Revision der MixerTabelle eingeführt |
- MixerTabelle wird bei Parameterreset neu initialisiert |
- Motortest auf [12] erweitert |
- Motorschalter nicht mehr 3-Stufig |
0.74a |
- Datenfusion im Flug auch, wenn ACC-Z < 512 |
- Wert für die Luftdruck-Messbereichserweiterung abgefangen |
0.74d |
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts |
0.75a G.Stobrawa 22.5.2009 |
- Extern Control also received from NC via SPI |
0.75b H.Buss 27.05.2009 |
- Spektrum-Singale schalten den PPM-Eingang aus |
- max. 2 Sekunden nach dem Start auf die BL-Regler warten |
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V |
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl |
- EE_DATENREVISION auf 76 erhöht |
- Servo: |
- Roll-Servo für FC ME implementiert |
- Update-Cmd stoppt Servos |
- Servos werden erst nach dem ersten Kalibrieren aktiviert |
0.75c G.Stobrawa 25.7.2009 |
- Übertragung der Servo-Settings zur NC |
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt |
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt |
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils |
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung |
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S) |
0.75d H.Buss 13.8.2009 |
- RC-Routine: Empfangsausfall soll sicherer erkannt werden |
- Zellenerkennung nun auch beim Speichern der Settings |
- Warnungs-Blinkmaske auch bei Empfangsausfall |
0.75e H.Buss 18.8.2009 |
- LED-Blinken kann an die Motoren gekoppelt werden |
- Feinabstimmung des Höhenreglers |
0.75f H.Buss 27.8.2009 |
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente |
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler |
- leichte Modifikation der RC-Empfangroutine |
0.75g H.Buss 31.08.2009 |
- die Akkuspannung geht jetzt antiproportional ins Gas ein |
0.75h H.Buss 3.09.2009 |
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas |
0.75i H.Buss 7.09.2009 |
- GpsZ vom Navi zur FC für den Höhenregler |
- "hoovergas-Variation" als Parameter |
- Kompatibilität zu NC und PC erhöht |
0.75j H.Buss 17.09.2009 |
- Laufzeitzähler eingebaut |
0.75k H.Buss 22.09.2009 |
- zweite Variante (Gregor) der Höhenregelung implementiert |
- umschaltbare RC-Routine |
0.75L H.Buss 23.09.2009 |
- SollHoehe und Gas geht nun auch an die NC |
0.75M H.Buss 29.09.2009 |
- Spektrum-Timing wird nun überwacht |
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt |
0.75N H.Buss 29.09.2009 |
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt |
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden |
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler |
- Gyro_Gier_P und Gyro_Gier_I eingeführt |
- I2C_fehler-Zähler jetzt in den Analogdaten |
0.75o H.Buss 01.10.2009 |
- der Höhenregler wird jetzt nur alle 10ms bearbeitet |
- Baro-Messbereichserweiterung auch bei Poti als Sollwert |
0.76d H.Buss 10.10.2009 |
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen |
0.76e H.Buss 27.10.2009 |
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht |
- S3D-ACT-Summensignal als Compilerschalter |
0.76f H.Buss 05.11.2009 |
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt |
0.76g H.Buss 10.11.2009 |
- Casting-Fehler in der Gas-Berechnung |
0.77a H.Buss 11.11.2009 |
- Erweiterung auf 12 Kanäle |
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen |
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert |
- Servos3-5 einstellbar |
- neues Kommando "f" -> schaltet auf anderen Parametersatz um |
0.77b H.Buss 09.12.2009 |
- JetiBox: Menü wird übertragen |
- neu: FCFlags |= FCFLAG_I2CERR; |
- LED-Warn-Blinken nun mit festem Timing und abschaltbar |
0.77c H.Buss 07.01.2010 |
- zwei weitere Spektrum-Varianten implementiert |
0.77d H.Buss 25.01.2010 |
- Strom-Messung eingebaut |
0.78a H.Buss 03.02.2010 |
- Bugfix: Settingsumschaltung im Flug |
0.78b H.Buss |
- veröffentlichte Version |
0.78c H.Buss + G.Stobrawa 22.2.2010 |
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0 |
- Theoretischer Variablenüberlauf bei Vario-Höhenregler |
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv |
- LED-Schwellwerte fürs Blinken waren unterschiedlich |
0.78c H.Buss + G.Stobrawa 04.3.2010 |
- Code cosmetics |
0.78f H.Buss + I.Busker 23.3.2010 |
- Unterstützung für Jeti-Expander |
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern |
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox |
- BL-Timeout beim Start erhöht |
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010 |
- Motoren Starten nicht ohne Kalibrierung |
- Unterstützung der BL2.0-Regler |
- statt 8 nun 10 Bit Auflösung der Lageregekung |
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool |
- Parametersätze werden per I2C an die BL-Regler durchgereicht |
- "Care-Free" implementiert |
- Freie Belegung der "Vorne"-Richtung |
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert |
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt |
- #define RECEIVER_SPEKTRUM_EXP eingeführt |
- #define SWITCH_LEARNS_CAREFREE eingeführt |
- Schwerpunktanzeige in den 3D-Daten |
- Checksummen gesicherte Datenablage im EEProm |
- Fehlerdiagnose implementiert (Wiki: ErrorCodes) |
- ErrorCode aufs Jeti-Display |
- JetiMenü: bis acht Temperaturen der BL-Regler |
- GPSInfo.Speed im Jeti-Display |
- Compass-Richtung nun im Jeti-menü |
- diverse Änderungen im Höhenregler |
- P wirkt schwächer |
- D wirkt stärker |
- Anpassung der Höhenregelung auf Level des Hoovergases |
- AccZ schneller nachführen |
Parameter modifiziert: |
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet |
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30 |
- EE_Parameter.Hoehe_HoverBand = 8; // war 5 |
- Notgas = 45 |
- NotgasZeit = 90 |
- Beginnersetting: EE_Parameter.DynamicStability = 70; |
- Neu: GyroStability = 6 |
- GPS-Login-Time auf 2 reduziert |
0.80e H.Buss 02.08.2010 |
- MK3Mag ohne NC ging nicht |
0.80f H.Buss 04.08.2010 |
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert |
0.80g H.Buss 11.08.2010 |
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert |
0.80h H.Buss 30.08.2010 |
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben |
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist |
0.82a H.Buss 08.11.2010 |
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten |
- ServoManualControlSpeed - Verlangsamt das Cam-Servo |
- CamOrientation - für verdrehte Kamera-Servos |
- Position der Status-Bits verändert |
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben |
- jeti update command 'j' added |
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller |
- Waypont-Events z.B. zum Triggern der Kamera |
- Gyro-Sytbility: Werte bis 16 möglich |
0.82b H.Buss 08.12.2010 |
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128) |
0.84a H.Buss 21.03.2011 (Release: 30.03.2011) |
- nur starten, wenn NC_ErrorCode = 0 |
- Beeptime von NC auch beim Kalibrieren durchlassen |
- Varible "JetiBeep" eingeführt |
- Kompass-Winkelvorgabe von NaviControl -> POI |
- Piepen beim Umschalten von CareFree |
- Compass-Routinen überarbeitet |
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst |
- Defaultreceiver ist RECEIVER_JETI |
- GPS-Operation-Radius per default auf 245m bzw. 100% |
- Höhenvorgabe im Vario-Mode durch Waypoints |
- bei laufenden Motoren keine neuen Settings annehmen |
- immer einmal Carefree Beepen nach dem Kalibrieren |
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen |
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel |
0.86a H.Buss 13.09.2011 |
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde |
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen |
- GPS-Sollwertverschiebung |
- Empfangs-Piepen unterdrücken -> einstellbar |
- MotorSmooth einstellbar |
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position |
- Coming Home mit Höhenvorgabe |
- Coming Home als Failsafe |
- Einführung des GPS-Characters (- / W H D P) |
- Klartext bei den Jeti-Fehlermeldungen |
- Jeti-Beep "3*kurz" bei NC-Errors |
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren |
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert |
- GPS-Angle limit von 100 auf 140 |
- GPS-I-Limit von 75 auf 85 |
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist |
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt |
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen; |
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind |
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.) |
- Error-Text auch im virtuellen Display des Koptertools |
- virtuelles LCD-Menü: |
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt. |
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden |
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart |
- ACC Correction eingeführt |
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden |
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden |
- neue Fehlermeldungen: |
"No NC communicat", // 9 |
"GPS Fix lost ", // 21 |
"Magnet Error ", // 22 |
"Motor restart ", // 23 |
"BL Limitation " // 24 |
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt |
- Ausbau der HoTT-Telemetrie |
- Variable "KompassRichtung" entfernt |
- ErsatzKompassInGrad sinvoll genutzt |
- HoTT-Update per Uart-Durchschleifen |
- AltitudeSetpointTrimming eingeführt |
- Vario-Anzeige für HoTT |
- Verhindern eines Überlaufs im Vario |
- echter Varioton auch ohne Vario-Höhenregler |
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war |
- KompassFusion wird jetzt getrennt von der NC berechnet |
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal" |
- MagnetError kann man in der Startphase ignorieren |
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC |
- Einzelströme nun auch bei HoTT angezeigt |
0.86b H.Buss 20.09.2011 |
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann |
- grüne LED ging aus - gefixt |
- K1-K8 wurden im LCD mit 0-7 bezeichnet |
0.86c H.Buss 22.09.2011 |
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti |
- Neuer SPI-Block 'SPI_MISC' |
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert |
- '.' im Vario-Höhenregler |
0.86d H.Buss 26.09.2011 |
- Analog.c: Vario Überlauf anders verhinden |
- Poti1-6 auch im HoTT-Display |
0.88 H.Buss 12.12.2011 - 26.03.2012 |
- Failsafe-Kanal |
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC) |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert |
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert |
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an) |
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging" |
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen |
- das sbus-protokoll implementiert (nur FC2.1) |
- Schaltkanal auf Servo-Ausgang |
- Filter auf den Ausgängen der Servos |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude" |
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben |
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann |
- Kompassrichtung neu merken, wenn CF geschaltet wird |
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah |
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert |
0.88M H.Buss 15.05.2012 |
- HoTT V4 |
- Kamera-Servo beim Kalibrieren weiter laufen lassen. |
- Error 30: no GPS fix bei Start |
- echter MotorSchalter |
0.88n H.Buss 06.07.2012 |
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz |
0.90 H.Buss 04.03.2013 |
- Anzeige WP x/Y in der HoTT-Telemetrie |
- Schalter und WP-Event gleichzeitig |
- Photo-Auslösung als Entfernungsintervalle |
- Jeti + |
- Kamera-Neitung als Integral |
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war |
- Auswahl:Speak-All nun in der KopterTool-Config |
0.90e H.Buss 04.03.2013 |
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht) |
0.90f (26.04.2013) |
- disable Yawing when Gas-Stick is to Zero |
- calibration must be within 20° Tilt angle |
- Hold I-Parts of the attitude control to zero when the MK is still on the ground |
- ACC-Altitude sensor data fusion implemented to the altitude controller (HW-Update from FC2.1 to 2.2 needed) |
- MK must be within 20° tilt angle when calibrating sensors |
- Parameter Reset, if the HW-Version changes (FC2.1 to 2.2) |
0.90g (29.04.2013) |
- No ACC-Z error if the MK is tilted after switching on |
- ATMEGA644 (until FC2.0): Sensitive RC-Signal validation removed -> that was only nessecary for old 35MHz receivers |
0.90h (14.05.2013) |
- Auto Start and landing for Waypoints |
- back to old eeprom-compatiblity to remain compatible to other Tools |
- HoTT-Bugfix: no speech while vario tone |
- Bugfix: Wrong error speech in JetiEX ("Error calibration") |
0.90j (27.05.2013) |
- Changes for better EEPROM-Safety |
- variable ActiveParamSet instead of the direct EEPROM-Reading (faster) |
- Checking the ACC-Z value in flight and report ACC-Z if out of range |
- disable Altitude hold in case of ACC-Z error |
0.91 (public Beta) |
- GPS-Parameter changed (P = 90->100; I = 90->90; D = 90->120; A = 40) |
- Move NICK/Roll Sticks for switching on / off |
- Move the Stick > 100 instead > 75 for switch on / off |
- Failsafe active if ACC-Upgarde |
- AltitudeMode, GPS_Mode & Carefree_Mode are now direct channels instead of Poti-Values (NaviGpsModeChannel,CareFreeChannel,HoeheChannel) |
- NC-SPI communication from 25Hz to 41Hz |
- MotorTemperature and GPS-Mode-Switch more often to NC |
- Auto-Start/Landing |
- JetiEX: Name set to 'MK' |
- if(CareFree) Parameter_AchsKopplung1 += 30; removed |
- StickNeutral setting per default 127 |
- UART-Buffer increased from 175 to 220 Bytes |
- show name of active parameter set in the HoTT/Jeti display |
- fixed in 0.91L: if "ServoRelative" is used, it coud happen that the servo moves a wide range in the first second after the first calibration |
- Servo3-5 Limit to 24-255 |
- no. of channels increased from 12 to 16 |
// 0 -> frei bzw. ACT rssi (or zero if unsigned) |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 Fix -> -127 |
// 31 Fix -> 0 |
// 32 Fix -> 128 |
0.90_ACC-HH_MartinR 30.05.2013: |
Änderungen in: fc.c, fc.h, spi.c, analog.c, jetimenue.c, timer0.c, eeprom.c, makefile: |
Erweiterung um die Möglichkeit im Flug zwischen ACC und HH umschalten zu können: |
- WICHTIG !!!! über UserParameter1 >50 (per Schalter) kann im ACC- Modus auf HH umgeschaltet werden. |
bei UserParameter1 >140, wird zusätzlich der Höhenregler immer abgeschaltet |
- WICHTIG !!!! UserParameter2 ist dann der I-Faktor im HH-Mode. Hier unbedingt den für HH erforderlichen Wert eitragen! z.B.: 40..80 |
- WICHTIG !!!! UserParameter3 ist dann Stick-P-Wert im HH-Mode. Hier unbedingt den für HH erforderlichen Wert eitragen! z.B.: 8..14 |
- UserParameter4: Beschleunigungskompensation des Höhensensors: |
Änderung des Höhenwertes in Normallage und Rückenlage beobachten, und UserParameter4 so einstellen, dass der Höhenwert sich dabei möglichst wenig ändert (Typ.Wert: 5..9) |
- UserParameter5: Initialisierungswert des serialpot1 von der Jeti-Box |
- UserParameter6: Initialisierungswert des serialpot2 von der Jeti-Box |
- UserParameter7: Abschaltung des Kameraausgleichs: <50: mit Ausgleich, 50..100 nur Rollausgleich (kein Nickausgleich), >100: kein Ausgleich |
- UserParameter8: für Pan Funktion (siehe unten), hier zunächst 125 eintragen, |
damit es keine Probleme mit dem Kamera-Nickausgleich gibt |
- WICHTIG !!!! Beim Flug im HH-Mode unbedingt beachten: |
- Wird der HH-Mode über UserParameter1 aktiviert, so ist die Stick-Position im Moment des Umschaltens die Neutralposition |
für den HH-Mode. Hierdurch bleibt der ACC-Mode trimmbar. |
- Der Nick- und Roll-Knüppel muß daher aber beim Umschalten von ACC auf HH in Mittelstellung stehen. |
- Beim Zurückschalten von HH- auf ACC-Mode ist es egal wo der Knüppel steht |
- Der Höhenregler kann beim HH-Mode über UserParameter1 deaktiviert werden, wenn UserParameter1 >140 ist. |
UserParameter1 =50..140 : HH mit Höhenregler, UserParameter1 >140: HH ohne Höhenregler. |
Beim normalen HH kann der Höhenregler verwendet werden. |
- Die GPS-Funktionen sind im HH-Mode automatisch deaktiv. |
Dadurch kann aus dem HH-Mode heraus beim Zurückschalten in den ACC-Modus der MK in der Luft geparkt werden! |
- HH-Mode wurde reduziert auf die Regler-Grundfunktionen! |
keine Driftkompensation, keine GPS- Funktion. |
- bei HH über UserParameter1 wird der Kompass abgeschaltet. Bei "normalem HH" kann der Kompass verwendet werden |
- Zu beachten: die anwählbare Drehratenbegrenzung wird derzeit im HH-Modus nicht abgeschaltet |
- Begrenzung von SummeNick SummeRoll reduziert, da Überlauf beobachtet wurde |
- Die Progression von MesswetNick MesswertRoll, wenn der Gyro an die Grenzen kommt wurde Hardwareabhängig geändert (Sprung bei V1.0 war für HH zu groß) |
weitere Änderungen: |
- in der analog.c wurde das Nachführen von "NeutralAccZ" deaktiviert |
- Rundungsfehler bei Nick und Roll in der analog.c wurden verringert (HH-Mode driftet weniger) |
- Drift im HH-Mode bei hohen Stick- Trimmwerten wurde verringert |
- einige Änderungen um Code einzusparen |
- der Kameraausgleich funktioniert nun auch im HH-Mode |
- Der Kameraausgleich kann über UserParameter7 deaktiviert werden (timer0.c): <50: mit Ausgleich, 50..100 nur Rollausgleich, >100: kein Ausgleich |
- Jeti-Menü modifiziert und Teile der Jeti+ Erweiterung übernommen: |
es gibt zwei serielle Potis im Jeti-Menü: Serialpot1 und Serialpot2 |
Serialpot1 hat eine Schrittweite von 25, während Serialpot2 eine Schrittweite von 2 hat. |
der Startwert kann über UserParameter5 bzw. Userparameter6 eingestellt werden. |
Der Startwert wird immer beim Gyro-Kalibrieren übernommen. |
- Luftdrucksensor mit Beschleunigungskompensation über UserParameter4: |
Änderung des Höhenwertes in Normallage und Rückenlage beobachten, und UserParameter4 so einstellen, dass der Höhenwert sich dabei möglichst wenig ändert (Typ.Wert: 5..9) |
Die Pan-Funktion ist fest dem Servoausgang 4 zugeordnet |
Im MK-Tool legst du ganz normal fest, welcher Sender-Kanal dem Servo 4 (Pan) zugeordnet wird. |
über UserParameter 8 musst Du die Verstärkung und Richtung festlegen: 125= 0, 126=+1, 124=-1.... |
Vorgehensweise: |
1. die Pan- Funktion auf Servo 4 einstecken |
2. den Senderkanal für Pan auf Servo 4 legen |
3. zunächst UserParameter 8 auf 125 einstellen |
4. die Pan-Funktion mechanisch so ausrichten, dass bei Pan-Neutral-Stellung des Senders die Kamera nach vorne zeigt. Dann den Nick und Rollausgleich einstellen / prüfen |
5. im MK-Tool auf Flight-Ctrl gehen und die Werte unter 16 und 17 (die zwei Werte nach den Motoren) beobachten |
6. im MK-Tool sollte nun bei [16]: 32 und bei [17]: 0 erscheinen |
7. die Kamera über den Sender um 90° nach rechts schwenken |
8. UserParameter 8 nun so einstellen (langsam erhöhen oder verringern), dass bei [16]: 0 und bei [17]: 32 erscheint |
9. Nick- und Rollausgleich beobachten |
10. Kamera um 90° nach links schwenken und wieder Nick- und Rollausgleich beobachten |
Das sind die Sollwerte, die Du über die Einstellung von UserParameter 8 und der Kameraausrichtung im MK-Tool erreichen musst: |
Kamerarichtung Kanal 16 / 17 (im MK-Tool) |
0 32 / 0 |
45 links 24 / -24 |
90 links 0 / -32 |
135 links -24 / -24 |
180 -32 / 0 |
45 rechts 24 / 24 |
90 rechts 0 / 32 |
135 rechts -24 / 24 |
180 -32 / 0 |
Abhängig von der Linearität des Pan-Servos wird man diese Werte nicht immer genau erreichen. |
Dann so gut wie möglich ausmitteln. |
/branches/V0.91L_ACC-HH_MartinR/. |
---|
Property changes: |
Added: tsvn:logminsize |
+8 |
\ No newline at end of property |