From a24a6c6b8ceb480f952389f7348a5daa44b09e3a Mon Sep 17 00:00:00 2001 From: Michael Colton Date: Sun, 24 Apr 2016 00:54:47 -0600 Subject: [PATCH] I don't know if I am closer or further away. This stuff is hugely frustrating sometimes..... --- Source/.cproject | 567 +-- Source/.settings/language.settings.xml | 8 +- .../org.eclipse.cdt.codan.core.prefs | 4 + Source/Debug/PSDR.hex | 3058 ++++++++++++++++- Source/include/ILI9341_t3.h | 252 -- Source/include/hal.h | 2 +- Source/include/main.h | 5 +- Source/include/uart.h | 65 - Source/src/ILI9341_t3.c | 912 ----- Source/src/main.c | 117 +- Source/src/misc.c | 249 -- Source/src/uart.c | 565 --- 12 files changed, 3428 insertions(+), 2376 deletions(-) delete mode 100644 Source/include/ILI9341_t3.h delete mode 100644 Source/include/uart.h delete mode 100644 Source/src/ILI9341_t3.c delete mode 100644 Source/src/misc.c delete mode 100644 Source/src/uart.c diff --git a/Source/.cproject b/Source/.cproject index abb601d..3dfac82 100644 --- a/Source/.cproject +++ b/Source/.cproject @@ -1,386 +1,422 @@ - - + + - + + + - - - - - - + - - + + + + - - - - - - @@ -411,4 +447,5 @@ + diff --git a/Source/.settings/language.settings.xml b/Source/.settings/language.settings.xml index 33a970f..c55ecb6 100644 --- a/Source/.settings/language.settings.xml +++ b/Source/.settings/language.settings.xml @@ -1,22 +1,22 @@ - + - + - + - + diff --git a/Source/.settings/org.eclipse.cdt.codan.core.prefs b/Source/.settings/org.eclipse.cdt.codan.core.prefs index 77386c2..ff135cf 100644 --- a/Source/.settings/org.eclipse.cdt.codan.core.prefs +++ b/Source/.settings/org.eclipse.cdt.codan.core.prefs @@ -3,6 +3,10 @@ org.eclipse.cdt.codan.checkers.errnoreturn=Warning org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} org.eclipse.cdt.codan.checkers.errreturnvalue=Error org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} org.eclipse.cdt.codan.checkers.noreturn=Error org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error diff --git a/Source/Debug/PSDR.hex b/Source/Debug/PSDR.hex index fbf9a0a..960d316 100644 --- a/Source/Debug/PSDR.hex +++ b/Source/Debug/PSDR.hex @@ -1,6 +1,3056 @@ :020000040800F2 -:100000002800000800000020000000202800000850 -:100010000000001000000010000000200000002080 -:080020000000001000000010B8 -:0400000508000028C7 +:1000000000000520F9020008D95B0008DD5B00084C +:10001000E15B0008E55B0008E95B00080000000008 +:100020000000000000000000000000000D040008B7 +:10003000ED5B000800000000150400083D470008C3 +:1000400029040008290400082904000829040008DC +:1000500029040008290400082904000829040008CC +:1000600029040008290400082904000829040008BC +:1000700029040008290400082904000829040008AC +:10008000290400082904000829040008290400089C +:10009000290400082904000829040008290400088C +:1000A000290400082904000829040008290400087C +:1000B000290400082904000829040008290400086C +:1000C000290400082904000829040008290400085C +:1000D000290400082904000829040008290400084C +:1000E000290400082904000829040008290400083C +:1000F000290400082904000829040008290400082C +:10010000290400082904000829040008290400081B +:10011000290400082904000829040008290400080B +:1001200029040008290400082904000829040008FB +:1001300029040008290400082904000829040008EB +:1001400029040008290400082904000829040008DB +:1001500029040008290400082904000829040008CB +:1001600029040008290400082904000829040008BB +:1001700029040008290400082904000800000000E0 +:10018000290400082904000829040008290400089B +:10019000290400082904000829040008290400088B +:1001A000290400082904000829040008290400087B +:1001B000290400082904000829040008290400086B +:1001C000290400082904000800B583B002F0B2FD3C +:1001D000384B394A1360394A136039490CE00A68D0 +:1001E0004B6801F10C04886803E01168196004335E +:1001F00004329842F9D82146324B9942EFD32E4B24 +:100200001A68314B9A4204D12C4B1A682F4B9A42F0 +:1002100000D0FEE7274B2E4A13602E4A13602E4B68 +:100220000AE0194651F8082B5B6802E000201060D4 +:1002300004329A42FAD30B46284A9342F1D3244B14 +:100240001B6813B9234B1B6803B1FEE703F094FB53 +:1002500001A8694602F0FAFC214C224B1C1BA41099 +:10026000002504E01E4B53F8253098470135AC4279 +:10027000F8DC1D4C1D4B1C1BA410002504E01A4B80 +:1002800053F8253098470135AC42F8DC01980099C5 +:1002900005F0BCFA0546164C164B1C1BA41004E0D6 +:1002A000013C134B53F824309847002CF8DC2846C7 +:1002B00002F09EFCBABADECA00000020CC04002086 +:1002C0002C040008440400087856341232547698FE +:1002D000D00400208C450020440400085404000889 +:1002E000540400085404000854040008540400088E +:1002F000540400085404000808B5FFF765FF00BF68 +:1003000000BEFEE71EF0040F0CBFEFF30880EFF312 +:1003100009807146414A10472DE9F04182B00446F8 +:100320008846134B5E6B9D6B9F6A1B6B13F0020F2D +:100330000DD00F4BDB6A002B09DA4BF6AB6102F0F4 +:100340007DFD20B14FF00042094BDA620CE0094814 +:1003500002F090FCCDF800802046394632462B460C +:1003600002F0F4FC00BEFEE702B0BDE8F08100BF81 +:1003700000ED00E0C47C000800BEFEE71EF0040FA4 +:100380000CBFEFF30880EFF309807146244A104751 +:100390002DE9F04182B007468846084B5D6B9C6BA7 +:1003A0009E6A074802F066FCCDF800803846314668 +:1003B0002A46234602F0CAFC00BEFEE700ED00E03C +:1003C000D47C00081EF0040F0CBFEFF30880EFF39D +:1003D00009807146134A10472DE9F04182B0074663 +:1003E0008846084B5D6B9C6B9E6A074802F042FC96 +:1003F000CDF80080384631462A46234602F0A6FC56 +:1004000000BEFEE700ED00E0E07C000800BEFEE775 +:1004100000BEFEE700BEFEE77047000019030008BB +:0C04200091030008D903000800BEFEE7AD +:10042C00F0B9000800000020D0040020F0B900084A +:10043C000000001000000010D004002090450020A7 +:08044C00000000100000001088 +:1004580010B5044601F074FF064BA3FB0030800979 +:1004680000F0B0FB4FF0FF302146002200F056FBB1 +:10047800002010BDD34D621008B5032000F030FBFA +:100488000020FFF7E5FF05F0A1FB002008BD00BF35 +:10049800014B1868704700BFD404002010B504460B +:1004A800504B5A6822F440325A60596842680A43ED +:1004B8005A600268536823F4807353600268536873 +:1004C800016943EA012353600268536823F04073CB +:1004D80053600268516883680B43536002689368ED +:1004E80023F40063936002689168C3680B439360C8 +:1004F800826A3D4B9A4214D00268936823F0706375 +:10050800936002689168836A0B43936002689368FA +:1005180023F04053936002689168C36A0B43936069 +:1005280009E00268936823F0706393600268936837 +:1005380023F0405393602268936823F0020393608A +:1005480022689368A16943EA41039360236A03B36D +:10055800636A013B072B04D9244840F20F6102F07B +:1005680079FB2268536843F4006353602268536838 +:1005780023F460435360636A013B4FF4604292FA8C +:10058800A2F2B2FA82F29340226851680B43536098 +:1005980004E02268536823F4006353602268D36A36 +:1005A80023F47003D3622168CA6AE369013B42EA13 +:1005B8000353CB622268936823F400739360226824 +:1005C8009368216B43EA412393602268936823F47C +:1005D8008063936022689368616943EA812393602A +:1005E80010BD00BF002301400100000F687900081A +:1005F800704700BF002800F0DD8010B5044603688E +:100608006D4A6E498B4218BF934208D002F580723A +:10061800934204D06A484FF4877102F01BFB636869 +:10062800002B18BFB3F5803F0AD0B3F5003F07D0C1 +:10063800B3F5403F04D0624840F20F1102F00AFBC4 +:10064800A368002B18BFB3F1807F0AD0B3F1007FF5 +:1006580007D0B3F1407F04D059484FF4887102F0B5 +:10066800F9FA2369012B04D9554840F2111102F017 +:10067800F1FAA369012B04D951484FF4897102F0AA +:10068800E9FAA36A002B18BFB3F1807F2ED0B3F12B +:10069800007F2BD0B3F1407F28D0B3F1806F25D0F5 +:1006A800B3F1A06F22D0B3F1C06F1FD0B3F1E06FE8 +:1006B8001CD0B3F1006F19D0B3F1106F16D0B3F19D +:1006C800206F13D0B3F1306F10D0B3F1406F0DD05D +:1006D800B3F1506F0AD0B3F1706F07D0394A934223 +:1006E80004D0374840F2131102F0B4FAE368002B43 +:1006F80018BFB3F5006F04D031484FF48A7102F087 +:10070800A9FAE369013B0F2B04D92D4840F21511D2 +:1007180002F0A0FA236B012B04D929484FF48B71FE +:1007280002F098FA6369022B04D9254840F21711A0 +:1007380002F090FA236A012B04D921484FF48C71F6 +:1007480002F088FAA26A1F4B9A4210D0E36A002B83 +:1007580018BFB3F1805F0AD0B3F1005F07D0B3F1DF +:10076800405F04D016484FF48E7102F073FA236C80 +:100778002BB9636484F83C302046FFF739FF236CBB +:1007880013F0100F11D1226C0F4B134043F00203EA +:1007980023642046FFF782FE00206064236C23F068 +:1007A800030343F00103236400E00120002384F8DD +:1007B8003C3010BD0120704700210140002001405D +:1007C800687900080100000FFDEEFFFF10B582B048 +:1007D8000446002301938369012B04D942484FF44E +:1007E800DD7102F037FAE36A002B18BFB3F1805FBE +:1007F8000AD0B3F1005F07D0B3F1405F04D03A48A4 +:1008080040F2BB1102F026FA94F83C30012B5FD07D +:10081800012384F83C3023689A6812F0010F13D141 +:100828009A6842F001029A60304B1B68304AA2FB7A +:1008380003239B0C03EB4303019302E0019B013B61 +:100848000193019B002BF9D12268936813F0010FE3 +:1008580040D0216C274B0B4043F4807323645368CA +:1008680013F4806F05D0236C23F4405343F4805372 +:100878002364236C13F4805F04D0636C23F00603B5 +:10088800636401E000236364002384F83C306FF064 +:1008980002031360184B5B6813F01F0F0AD123681B +:1008A8009A6812F0405F17D19A6842F080429A60C5 +:1008B800002016E02368114A93420FD19A6812F07B +:1008C800405F0DD19A6842F080429A60002008E0AB +:1008D800022006E0002004E0002002E0002000E002 +:1008E800002002B010BD00BF687900080C0000208D +:1008F80083DE1B43FEF8FFFF002301400020014078 +:1009080030B583B005460C46002301930B686E4A48 +:10091800934218BF122B04D96C4840F2FB4102F0F5 +:1009280099F96368013B0F2B04D9684840F2FC41F0 +:1009380002F090F9A368072B04D9644840F2FD41FE +:1009480002F088F995F83C30012B00F0B9800123BA +:1009580085F83C302368092B21D92868C2689BB2E6 +:1009680003EB43031E3B072101FA03F322EA0303C7 +:10097800C3602368544A934206D12A68D368A168A1 +:1009880043EA0163D3601EE02968C868A2689BB285 +:1009980003EB43031E3B9A400243CA6013E02868F6 +:1009A80002699BB203EB4303072101FA03F322EA2E +:1009B8000303036129680869A368228802EB4202DD +:1009C800934003430B616368062B16D82868426B73 +:1009D80003EB8303053B1F2101FA03F322EA030318 +:1009E80043632968486B2288636803EB8303053BEC +:1009F80002FA03F303434B632EE00C2B16D8286846 +:100A0800026B03EB8303233B1F2101FA03F322EA62 +:100A1800030303632968086B2288636803EB830375 +:100A2800233B02FA03F303430B6315E02868C26A09 +:100A380003EB8303413B1F2101FA03F322EA03037B +:100A4800C3622968C86A2288636803EB8303413B51 +:100A580002FA03F30343CB622A681D4B9A4207D17B +:100A68002368122B04D11B4A536843F48003536054 +:100A78002A68174B9A421FD12368134A112B18BFB3 +:100A8800934219D1134A536843F400035360226810 +:100A98000D4B9A4210D1104B1B68104AA2FB03233E +:100AA8009B0C03EB83035B00019302E0019B013B7A +:100AB8000193019B002BF9D1002085F83C0000E050 +:100AC800022003B030BD00BF120000106879000892 +:100AD80000200140002301400C00002083DE1B435E +:100AE80010B50446C31E042B03D90948A42102F0FB +:100AF800B1F804F00700074AD36823F4E0631B0445 +:100B08001B0C43EA0020044B0343D36010BD00BF15 +:100B18009879000800ED00E00000FA0570B5044679 +:100B28000E4615460F2A03D91848BC2102F092F840 +:100B38000F2E03D91548BD2102F08CF8144BDB6841 +:100B4800C3F30223C3F10702042A28BF0422191D94 +:100B5800062901D9D81E00E00020012303FA02F279 +:100B6800013A324002FA00F183405A1E2A400A43F1 +:100B7800002C06DA04F00F041201D2B2054B1A5504 +:100B880070BD1201D2B2044B1A5570BD9879000895 +:100B980000ED00E014ED00E000E400E010B5041EF4 +:100BA80003DA0648D02102F055F8610904F01F0461 +:100BB8000123A340024A42F8213010BD9879000869 +:100BC80000E100E00138B0F1807F0AD2064B58609E +:100BD800F021064A82F823100020986007221A6044 +:100BE80070470120704700BF10E000E000ED00E012 +:100BF800704700BFC8B110B5044602680C4B9A4252 +:100C080003D00C48EE2102F025F8237913F0FF0FEA +:100C180004D1002363712046FFF7EAFF0223237102 +:100C2800002020610123237110BD0120704700BFFF +:100C380000740040CC79000838B504460D460029F8 +:100C480018BF102904D01D484FF4B77102F002F8FC +:100C58006379012B30D0012363710222227122684B +:100C68001168AB400B43136085B92268116813689B +:100C780003F03803382B14BF0023012313EA910330 +:100C880015D0536843F00103536010E022681168DF +:100C9800136803F46013B3F5601F14BF0023012326 +:100CA80013EA914303D0536843F0020353600123CE +:100CB80023710020607138BD022038BDCC7900084E +:100CC800F8B504460E4615460B68002B18BF242BB2 +:100CD80012D00C2B10D0142B0ED01C2B0CD0042BA4 +:100CE8000AD02C2B08D0342B06D03C2B04D01C481F +:100CF80040F20E3101F0AEFF7368002B18BF022BD3 +:100D080004D0174840F20F3101F0A4FF002D18BF9E +:100D1800102D04D012484FF4447101F09BFF637901 +:100D2800012B1BD0012060710223237127683968C9 +:100D380040F6FE73AB4021EA0302316873680B4347 +:100D4800AB4013433B6021680A68C023AB4022EAEA +:100D580003030B60207100206071F8BD0220F8BD0C +:100D6800CC790008F0B583B0074614461D46002329 +:100D780001930E46994218BF102904D0144840F236 +:100D8800463101F067FF002C18BF042C06D0082C50 +:100D980004D00F4840F2473101F05CFF4FF6F07382 +:100DA8009D4204D90A484FF4527101F053FF3B6841 +:100DB800019326B9019B1C440834019403E0019B6C +:100DC8001C4414340194019B1D60002003B0F0BD45 +:100DD800CC7900082DE9F04F83B080460F46B34B1D +:100DE800B34A904218BF98422BD003F50063C31A48 +:100DF80018BF012302F50062904222D00BB3AD4B1D +:100E0800C31A18BF012302F50062904219D0C3B17A +:100E1800A94BC31A18BF012302F50062904210D0F3 +:100E28007BB1A64BC31A18BF012302F5006290429A +:100E380007D033B1A24B984203D0A248C32101F096 +:100E480009FF3B881BB99F48C42101F003FF7B6859 +:100E5800112B18BF012B20D9022B1ED0122B1CD00E +:100E6800994A934219D002F58012934215D002F59F +:100E78008012934211D0A2F5F81293420DD002F5D8 +:100E88008012934209D002F58012934205D0032BB9 +:100E980003D08C48C52101F0DDFEBB68022B03D9C5 +:100EA8008848C62101F0D6FE0024F8E0A1460125B5 +:100EB800A5403B6803EA050AAA4540F0EF807B6835 +:100EC800122B18BF022B1CD13B690F2B18BF0C2B00 +:100ED80007D90D2B05D00E2B03D07A48D72101F066 +:100EE800B9FEE608083658F8261004F00700800016 +:100EF8000F23834021EA03023B698340134348F8E8 +:100F08002630D8F800304FEA440B032606FA0BF6D1 +:100F1800F64306EA03027B6803F0030303FA0BF3C4 +:100F28001343C8F800307B685A1E112B18BF012ADA +:100F380001D9122B1CD1FB68032B03D96148EB2183 +:100F480001F088FED8F8083006EA0302FB6803FAC5 +:100F58000BF31343C8F80830D8F8043023EA050324 +:100F68007D68C5F3001505FA09F51D43C8F8045056 +:100F7800D8F80C303340BE6806FA0BF61E43C8F8A2 +:100F88000C607B6813F0805F00F088800023019379 +:100F98004E4B5A6C42F480425A645B6C03F48043B3 +:100FA8000193019BA308991C494A52F8211004F0A7 +:100FB800030080000F22824021EA02013C4A90454A +:100FC80037D002F58062904531D002F580629045B5 +:100FD8002BD002F58062904525D002F580629045BD +:100FE8001FD002F58062904519D002F580629045C5 +:100FF80013D002F5806290450DD002F580629045CD +:1010080007D002F58062904501D1092212E00A2238 +:1010180010E008220EE007220CE006220AE0052272 +:1010280008E0042206E0032204E0022202E0012292 +:1010380000E0002282400A430233254941F8232078 +:10104800244B1A686FEA0A0303EA0201786810F46D +:10105800803F01D04AEA02011E4A1160526803EA41 +:101068000201786810F4003F01D04AEA0201194AE7 +:101078005160926803EA0201786810F4801F01D079 +:101088004AEA0201134A9160D2681340796811F460 +:10109800001F01D04AEA02030E4AD36001340F2C24 +:1010A8007FF604AF03B0BDE8F08F00BF0004024034 +:1010B8000000024000140240001C024000240240CC +:1010C80000280240FC790008000011100038024096 +:1010D80000380140003C014038B505460C4621B9AE +:1010E800054840F28D1101F0B5FD2B69234201D06E +:1010F800012038BD002038BDFC79000870B50646CF +:1011080015460C4621B9094840F2AD1101F0A2FD7F +:10111800012D04D905484FF4D77101F09BFD0DB19D +:10112800B46170BD2404B46170BD00BFFC790008CF +:101138002DE9F04180460E4617461D46069C036879 +:10114800224A23498B4218BF93420CD002F5806291 +:10115800934208D002F58062934204D01D4841F2C0 +:10116800590101F077FDB5F1807F18BFB5F1007F17 +:1011780005D025B1174841F25A0101F06BFDB4F5CD +:10118800804F18BFB4F5105F0BD0231C18BF012384 +:10119800B4F5005F05D023B10E4841F25B0101F0C0 +:1011A80059FDD8F80020536823F07F7323F459338E +:1011B80023F47F7323F00303C6F3090646EA0746C0 +:1011C80035432C431C435460BDE8F081005800406F +:1011D800005400402C7A000870B504460D46FFF70D +:1011E80057F9064623689B6913F0100F12D10020A7 +:1011F80070BDB5F1FF3F0DD025B1FFF749F9801B50 +:10120800A84207D9012384F83530002384F8343004 +:10121800032070BD23689A6912F0200FE9D01022CC +:10122800DA6123682022DA6123689A6912F0010FD3 +:1012380001D10122DA612268536823F0FF7323F495 +:101248008B3323F4FF7323F0010353600423A36358 +:10125800012084F83500002384F8343070BD00BFC5 +:1012680070B504460D46FFF713F9064619E0204607 +:101278002946FFF7B1FFD8B9B5F1FF3F11D025B125 +:10128800FFF706F9801BA8420BD9A36B43F0200394 +:10129800A363012384F83530002384F83430032015 +:1012A80070BD23689B6913F0020FE0D0002070BD69 +:1012B800012070BD2DE9F04105460E4690461C46BA +:1012C800FFF7E6F80746B8F1000F12D02EE0B4F1A8 +:1012D800FF3F0ED024B1FFF7DBF8C01BA04208D9AE +:1012E800012385F83530002385F834300320BDE824 +:1012F800F0812B689B6926EA0303C3F31003002BD4 +:10130800E5D10020BDE8F081B4F1FF3F0ED024B153 +:10131800FFF7BEF8C01BA04208D9012385F8353075 +:10132800002385F834300320BDE8F0812B689B69E1 +:1013380026EA0303C3F31003002BE5D00020BDE821 +:10134800F08100BF70B505460C46FFF7A1F80646C8 +:1013580016E028462146FFF73FFFC0B924B1FFF742 +:1013680097F8801BA0420BD9AB6B43F02003AB630B +:10137800012385F83530002385F83430032070BD0B +:101388002B689B6913F0200FE3D0002070BD01206B +:1013980070BD00BF70B504460D46FFF779F80646E4 +:1013A80031E020462946FFF717FF002832D123688D +:1013B8009A6912F0200F14D02022DA61226853684B +:1013C80023F0FF7323F48B3323F4FF7323F001031B +:1013D80053600023A363012084F8350084F8343077 +:1013E80070BD25B1FFF754F8801BA8420BD9A36B39 +:1013F80043F02003A363012384F83530002384F8E5 +:101408003430032070BD23689B6913F0040FC8D0E3 +:10141800002070BD012070BD002800F0A88010B524 +:1014280004460368534A54498B4218BF93420CD070 +:1014380002F58062934208D002F58062934204D09C +:101448004E4840F22B1101F005FCA368B3F5806FFC +:1014580004D34A484FF4967101F0FCFBE368013B62 +:10146800012B04D9454840F22D1101F0F3FB236903 +:10147800002B18BFB3F5004F04D040484FF49771C4 +:1014880001F0E8FB6369FF2B04D93C4840F22F11B7 +:1014980001F0E0FBA369072B04D938484FF4987191 +:1014A80001F0D8FBE369002B18BFB3F5002F04D077 +:1014B800324840F2311101F0CDFB236A002B18BFEE +:1014C800B3F5003F04D02D484FF4997101F0C2FBE9 +:1014D80094F8353013F0FF0F05D1002384F8343029 +:1014E800204602F0C5FD022384F8353022681368CF +:1014F80023F0010313602268636823F070631361AB +:101508002268936823F400439360A3685BB1E268A0 +:10151800012A04D1226843F40043936003E022685F +:1015280043F404439360E368022B03D123684FF428 +:1015380000625A6022685168114B0B43536022685D +:10154800216963690B43A16943EA0123D3602268D7 +:10155800E169236A0B4313602268136843F00103AF +:1015680013600020A063012384F8353010BD0120EA +:10157800704700BF00580040005400402C7A000813 +:1015880000800002704700BF38B310B504460368F6 +:10159800134A14498B4218BF93420CD002F580625B +:1015A800934208D002F58062934204D00E4840F27C +:1015B8007D1101F04FFB022384F83530226813684F +:1015C80023F0010313602046FFF7DCFF0020A0632F +:1015D80084F8350084F8340010BD0120704700BF3E +:1015E80000580040005400402C7A00082DE9F043D0 +:1015F80083B004461D4690F83530DBB2012B40F02D +:1016080090800F461646002D18BF002A00F08B80E8 +:1016180003689B6913F4004F40F0878090F83430DA +:10162800012B00F08480012380F83430122380F8E5 +:10163800353000238363FF2D0AD94FF400530093FC +:10164800FF224FF08073FFF773FD4FF0FF080AE0A9 +:101658004FF400530093EAB24FF00073FFF768FDB0 +:10166800A84600E04E4620460A99FFF7F9FD20B14A +:10167800A36B042B5DD1012360E0236806F1010907 +:1016880032789A62013DADB2B8F101080CBF01236E +:101698000023002D0CBF002303F00103FBB12046FB +:1016A800802100220A9BFFF705FE002843D1FF2D69 +:1016B8000BD90023009320463946FF224FF0807350 +:1016C800FFF736FD4FF0FF0809E00023009320469E +:1016D8003946EAB24FF00073FFF72AFDA846002DFD +:1016E800C0D120460A99FFF72DFE034620B1A36B0F +:1016F800042B22D1012321E022682021D161216815 +:101708004A6822F0FF7222F48B3222F4FF7222F030 +:1017180001024A60012284F83520002284F834202E +:101728000CE002230AE0012308E0022306E002237A +:1017380004E0032302E0032300E00323184603B078 +:10174800BDE8F0832DE9F04383B004461D4690F8C8 +:101758003530DBB2012B40F090800F461646002D45 +:1017680018BF002A00F08B8003689B6913F4004FB0 +:1017780040F0878090F83430012B00F084800123FA +:1017880080F83430222380F8353000238363FF2D1E +:101798000AD94FF410530093FF224FF08073FFF7DC +:1017A800C7FC4FF0FF080AE04FF410530093EAB269 +:1017B8004FF00073FFF7BCFCA84600E04E462046F9 +:1017C8000421FFF7E7FD20B1A36B042B5DD10123B2 +:1017D80060E006F1010923685B6A3370013DADB230 +:1017E800B8F101080CBF01230023002D0CBF002312 +:1017F80003F00103FBB12046802100220A9BFFF77A +:1018080059FD002843D1FF2D0BD900230093204612 +:101818003946FF224FF08073FFF78AFC4FF0FF082C +:1018280009E00023009320463946EAB24FF00073DE +:10183800FFF77EFCA846002DC0D120461921FFF7EE +:1018480081FD034620B1A36B042B22D1012321E0A3 +:1018580022682021D16121684A6822F0FF7222F4AF +:101868008B3222F4FF7222F001024A60012284F8CE +:101878003520002284F834200CE002230AE00123FA +:1018880008E0022306E0022304E0032302E0032326 +:1018980000E00323184603B0BDE8F0832DE9F047C4 +:1018A80082B00024019490F83540E4B2012C40F055 +:1018B8008C800468A46914F4004F40F0888090F884 +:1018C8003440012C00F085801F4690468946064624 +:1018D800012380F83430022380F8353000238363F5 +:1018E8003268F368012B04D1C9F309013E4B0B435D +:1018F80003E0C9F3090343F420535360FEF7C8FD1E +:10190800824611E0B7F1FF3F0ED02FB1FEF7C0FDC0 +:10191800CAEB0000B84207D9012386F83530002306 +:1019280086F8343003235BE03568AB6913F0200F89 +:1019380008D1AB6913F0100F04D196F83540E4B222 +:10194800032CDFD1AB6913F0100F12D130462021E0 +:1019580000223B46FFF7AEFC034600283BD1326825 +:101968002021D161012286F83520002286F8342012 +:1019780036E03046202100223B46FFF79BFC60BB47 +:1019880033681022DA6133682022DA61019B5A1C1D +:10199800019243450ED13268536843F48043536043 +:1019A8003046202100223B46FFF784FCB8B9336853 +:1019B8002022DA61019B434592D3012386F8353012 +:1019C800002386F8343003230AE0022308E00223C8 +:1019D80006E0022304E0032302E0032300E00323DC +:1019E800184602B0BDE8F0870020000230B583B089 +:1019F800044603680F2B04D99B484FF4807101F00B +:101A080029F9236813F0010F00F08E806368002B1A +:101A180018BFB3F5803F07D0B3F5A02F04D0924884 +:101A28004FF4837101F016F9904B9B6803F00C0397 +:101A3800042B0AD08D4B9B6803F00C03082B0DD1A7 +:101A48008A4B5B6813F4800F08D0884B1B6813F42B +:101A5800003F69D06368002B66D15BE2834B1A684C +:101A680022F480321A601A6822F480221A601A68F6 +:101A780022F480321A60FEF70BFD054605E0FEF7FA +:101A880007FD401B642800F24782784B1B6813F45B +:101A9800003FF4D1754A136823F4803313606368F8 +:101AA800B3F5803F09D11346126822F480221A60E8 +:101AB8001A6842F480321A6015E0B3F5A02F09D1F4 +:101AC8006A4B1A6842F480221A601A6842F480321B +:101AD8001A6008E0654B1A6822F480221A601A68B6 +:101AE80022F480321A6063687BB1FEF7D1FC0546A8 +:101AF80005E0FEF7CDFC401B642800F20F825B4B2B +:101B08001B6813F4003FF4D00EE0FEF7C1FC054655 +:101B180005E0FEF7BDFC401B642800F20182534B30 +:101B28001B6813F4003FF4D1236813F0020F6ED042 +:101B3800E368012B04D94C4840F2471101F08AF8B8 +:101B480023691F2B04D948484FF4A47101F082F887 +:101B5800464B9B6813F00C0F0AD0444B9B6803F06C +:101B68000C03082B1BD1414B5B6813F4800F16D173 +:101B78003E4B1B6813F0020F03D0E368012B40F0C3 +:101B8800D1813A48036823F0F8012369F82292FAD0 +:101B9800A2F2B2FA82F293400B43036037E0E368A3 +:101BA8000BB3324A136843F001031360FEF770FC6D +:101BB800054605E0FEF76CFC401B642800F2B48182 +:101BC8002A4B1B6813F0020FF4D02848036823F04F +:101BD800F8012369F82292FAA2F2B2FA82F293404B +:101BE8000B43036013E0214A136823F001031360D9 +:101BF800FEF74EFC054605E0FEF74AFC401B64284C +:101C080000F29481194B1B6813F0020FF4D123687A +:101C180013F0080F37D06369012B04D912484FF429 +:101C2800C47101F017F86369A3B1104A536F43F008 +:101C380001035367FEF72CFC054605E0FEF728FC78 +:101C4800401B642800F27481084B5B6F13F0020F8D +:101C5800F4D018E0054A536F23F001035367FEF7E9 +:101C680017FC05460AE000BF6C7A000800380240FD +:101C7800FEF70EFC401B642800F25C81B64B5B6FDC +:101C880013F0020FF4D1236813F0040F00F09480CE +:101C9800A368052B18BF012B04D9B0484FF4D9719C +:101CA80000F0D8FF00230193AB4B1A6C42F080522E +:101CB8001A641B6C03F080530193019BA84A1368B4 +:101CC80043F480731360FEF7E3FB054605E0FEF777 +:101CD800DFFB401B642800F22F81A14B1B6813F423 +:101CE800807FF4D09C4B1A6F22F001021A671A6F9A +:101CF80022F004021A671A6F22F001021A67FEF72F +:101D0800C7FB054607E0FEF7C3FB401B41F28833DB +:101D1800984200F21381904B1B6F13F0020FF2D11F +:101D28008D4A136F23F001031367A368012B09D1B0 +:101D38001346126F22F004021A671A6F42F001026A +:101D48001A6714E0052B09D1834B1A6F42F004027D +:101D58001A671A6F42F001021A6708E07E4B1A6F81 +:101D680022F004021A671A6F22F001021A67A368A8 +:101D78008BB1FEF78DFB054607E0FEF789FB401B9C +:101D880041F28833984200F2DB80734B1B6F13F0EB +:101D9800020FF2D010E0FEF77BFB054607E0FEF7E6 +:101DA80077FB401B41F28833984200F2CB806A4BA4 +:101DB8001B6F13F0020FF2D1A369022B04D96748F5 +:101DC8004FF4FB7100F046FFA369002B00F0BC80C4 +:101DD800614A926802F00C02082A00F0B780022BD0 +:101DE80040F08380E369002B18BFB3F5800F04D05F +:101DF8005A4840F2FF1100F02DFF236A023B3D2BA9 +:101E080004D956484FF4007100F024FF636A323B4E +:101E1800B3F5BF7F04D9514840F2012100F01AFF01 +:101E2800A36A022B18BF042B08D0062B06D0082B58 +:101E380004D04A4840F2022100F00CFFE36A023B5A +:101E48000D2B04D9454840F2032100F003FF424A14 +:101E5800136823F080731360FEF71AFB054604E04D +:101E6800FEF716FB401B642872D83B4B1B6813F027 +:101E7800007FF5D1226A636A47F6C07191FAA1F131 +:101E8800B1FA81F18B401A43A36A5B08013B4FF416 +:101E9800403191FAA1F1B1FA81F18B401343E26923 +:101EA80043EA0201E36A4FF0706292FAA2F2B2FAD0 +:101EB80082F203FA02F241EA020343F00053264A8F +:101EC8005360136843F080731360FEF7E1FA044629 +:101ED80004E0FEF7DDFA001B64283BD81E4B1B68A4 +:101EE80013F0007FF5D000203DE01B4A136823F073 +:101EF80080731360FEF7CCFA044604E0FEF7C8FAD4 +:101F0800001B64282ED8144B1B6813F0007FF5D1F2 +:101F1800002028E0012026E0032024E0032022E01E +:101F2800032020E001201EE003201CE003201AE02B +:101F3800032018E0032016E0032014E0032012E039 +:101F4800032010E003200EE000200CE001200AE04E +:101F5800032008E0032006E0003802406C7A0008FD +:101F680000700040032003B030BD00BF70B50446C8 +:101F78000D460368013B0E2B04D98A4840F26221C2 +:101F880000F068FE0F2D04D9864840F2632100F066 +:101F980061FE854B1B6803F00F03AB4280F08F8016 +:101FA800814A136823F00F032B431360136803F06F +:101FB8000F03AB4240F05781236813F0020F1ED085 +:101FC800A368002B18BF802B12D0902B10D0A02B09 +:101FD8000ED0B02B0CD0C02B0AD0D02B08D0E02BC1 +:101FE80006D0F02B04D06F4840F2792100F032FE81 +:101FF8006E498B6823F0F002A36813438B60236853 +:1020080013F0010F00F0EB806368022B04D96548D8 +:102018004FF4207100F01EFE6268012A05D1634B5F +:102028001B6813F4003F0ED11FE1022A05D15F4B54 +:102038001B6813F0007F06D119E15C4B1B6813F095 +:10204800020F00F0168159498B6823F003031343EC +:102058008B60FEF71DFA05466368012B0FD107E078 +:10206800FEF716FA401B41F28833984200F20381CA +:102078004E4B9B6803F00C03042BF1D1AFE0022B0D +:1020880017D107E0FEF704FA401B41F28833984263 +:1020980000F2F380454B9B6803F00C03082BF1D149 +:1020A8009DE0FEF7F5F9401B41F28833984200F2B3 +:1020B800E6803E4B9B6813F00C0FF2D18FE023684B +:1020C80013F0020F1ED0A368002B18BF802B12D06C +:1020D800902B10D0A02B0ED0B02B0CD0C02B0AD038 +:1020E800D02B08D0E02B06D0F02B04D02D484FF48D +:1020F800327100F0AFFD2D498B6823F0F002A36820 +:1021080013438B60236813F0010F5DD06368022BC3 +:1021180004D9244840F2CF2100F09CFD6268012ACE +:1021280005D1224B1B6813F4003F0ED1A9E0022A07 +:1021380005D11E4B1B6813F0007F06D1A3E01B4B93 +:102148001B6813F0020F00F0A08018498B6823F079 +:10215800030313438B60FEF79BF906466368012B64 +:102168000FD107E0FEF794F9801B41F288339842BB +:1021780000F28D800D4B9B6803F00C03042BF1D10A +:1021880022E0022B1BD106E0FEF782F9801B41F208 +:10219800883398427DD8054B9B6803F00C03082BC5 +:1021A800F2D111E06C7A0008003C0240003802408D +:1021B800FEF76EF9801B41F2883398426BD8384B92 +:1021C8009B6813F00C0FF3D1364A136823F00F0302 +:1021D8002B431360136803F00F03AB425DD12368F0 +:1021E80013F0040F1AD0E368002B18BFB3F5805F13 +:1021F8000DD0B3F5A05F0AD0B3F5C05F07D0B3F533 +:10220800E05F04D0284840F21E3100F023FD244945 +:102218008B6823F4E052E36813438B60236813F060 +:10222800080F1BD02369002B18BFB3F5805F0DD0B2 +:10223800B3F5A05F0AD0B3F5C05F07D0B3F5E05F90 +:1022480004D0194840F2253100F004FD144A93687F +:1022580023F46043216943EAC10393600020FEF739 +:10226800F7F8002070BD012070BD012070BD01206D +:1022780070BD012070BD032070BD032070BD032018 +:1022880070BD012070BD012070BD012070BD03200C +:1022980070BD032070BD032070BD012070BD00BF5C +:1022A80000380240003C02406C7A0008214B9B68D1 +:1022B80003F00C03042B3AD0082B01D01E487047BA +:1022C8001C4B586800F03F005B6813F4800F0FD078 +:1022D8001A4BB3FBF0F3174A506847F6C072104028 +:1022E80092FAA2F2B2FA82F2D04000FB03F30EE0B7 +:1022F800114BB3FBF0F30F4A506847F6C072104019 +:1023080092FAA2F2B2FA82F2D04000FB03F3094A31 +:10231800506800F440304FF4403292FAA2F2B2FA18 +:1023280082F2D04001304000B3FBF0F07047034820 +:10233800704700BF003802400024F40080BA8C01C6 +:1023480008B5FFF7B3FF084B9B6803F0F003F022D2 +:1023580092FAA2F2B2FA82F2D340044AD35CD8408D +:10236800034B186008BD00BF003802405C7A0008C3 +:102378000C0000202DE9F04105460F4616461C4684 +:10238800FEF786F8804637E0B4F1FF3F34D02CB131 +:10239800FEF77EF8C8EB0000A0422DD32A685368E8 +:1023A80023F0E00353606B68B3F5827F0BD1AB6811 +:1023B800B3F5806F18BFB3F5004F04D12A681368CE +:1023C80023F040031360AB6AB3F5005F0BD12A68B2 +:1023D800136823F400531B041B0C13602A6813684A +:1023E80043F400531360012385F85D30002385F81A +:1023F8005C300320BDE8F0812B689B683B40B3420A +:10240800C2D10020BDE8F0812DE9F04182B0074635 +:102418000D4614461E46FEF73BF8804641E0B5F5EA +:10242800C06F08BF002C05D1137BDBB28DF80730D5 +:102438009DF80730B6F1FF3F33D02EB1FEF728F8EC +:10244800C8EB0000B0422CD33A68536823F0E0038D +:1024580053607B68B3F5827F0BD1BB68B3F5806F9F +:1024680018BFB3F5004F04D13A68136823F040034E +:102478001360BB6AB3F5005F0BD13A68136823F4A5 +:1024880000531B041B0C13603A68136843F4005391 +:102498001360012387F85D30002387F85C30032040 +:1024A80005E03A6893682B40A342B8D1002002B0F7 +:1024B800BDE8F08138B504460D464FF4C0510022FE +:1024C8002B46FFF7A1FF28B1236E43F020032366B4 +:1024D80003231AE02046802100222B46FFF74AFFFB +:1024E80028B1236E43F02003236603230DE0204622 +:1024F8004FF4C06100222B46FFF786FF034620B148 +:10250800236E43F0200323660323184638BD00BF1B +:10251800704700BF002800F0228110B50446036808 +:10252800904A91498B4218BF934213D002F58062BA +:1025380093420FD002F5784293420BD002F5E05255 +:10254800934207D002F58062934203D08748CC219A +:1025580000F080FB6368002B18BFB3F5827F03D0BF +:102568008248CD2100F076FBA368002B18BFB3F595 +:10257800806F06D0B3F5004F03D07C48CE2100F021 +:1025880069FBE368B3F5706F18BFB3F5606F24D0CB +:10259800B3F5506F21D0B3F5406F1ED0B3F5306F4F +:1025A8001BD0B3F5206F18D0B3F5106F15D0B3F565 +:1025B800006F12D0B3F5E06F0FD0B3F5C06F0CD039 +:1025C800B3F5A06F09D0B3F5806F06D0B3F5407F9F +:1025D80003D06648CF2100F03DFB2369002B18BFCC +:1025E800022B03D06148D02100F034FB6369012B32 +:1025F80003D95E48D12100F02DFBA369B3F5007F14 +:1026080018BF002B06D0B3F5802F03D05748D2212E +:1026180000F020FB636B082B18BF002B03D0534836 +:10262800D32100F017FBE369002B18BF082B0FD04C +:10263800102B0DD0182B0BD0202B09D0282B07D00E +:10264800302B05D0382B03D04848D42100F002FBAA +:10265800236A002B18BF802B03D04448D52100F0F3 +:10266800F9FA636A002B18BF102B03D03F48D62114 +:1026780000F0F0FAA36A002B18BFB3F5005F03D08F +:102688003A48D72100F0E6FAE36A013B4FF6FE72BA +:10269800934203D93548D82100F0DCFA236B022B8A +:1026A80003D93248D92100F0D5FA94F85D3023B91E +:1026B80084F85C302046FFF72BFF022384F85D3056 +:1026C8002268136823F040031360E368B3F5E06FF2 +:1026D80001D9002201E04FF48052B3F5706F18BFA2 +:1026E800B3F5E06F01D00021A162216B39B9B3F5D0 +:1026F800E06F02D90223236301E0012323632068EA +:102708006168A36819432369194363691943A36975 +:1027180003F400730B43E1690B43216A0B43A16A7D +:1027280019430160236B022B04D121680B6843F421 +:1027380000630B602068618B01F00401636A194330 +:10274800636B1943E3680B43134343602368E26AEE +:102758001A6100202066012384F85D3010BD012035 +:10276800704700BF00380040003001409C7A0008E4 +:10277800F0B583B004460F4616461D468368002B05 +:1027880018BFB3F5004F04D067484FF4CC7100F080 +:1027980061FA94F85C30012B00F0BD80012384F8C5 +:1027A8005C3094F85D30012B07D0012384F85D304C +:1027B800002384F85C300223B2E0002E18BF002FFB +:1027C80006D1012384F85D30002284F85C20A7E05C +:1027D800032384F85D3000232366A763A687E68772 +:1027E8002364A4F84430A4F84630A368B3F5004F36 +:1027F80004D12268136843F480431360A36AB3F5D5 +:10280800005F0BD12268136823F400531B041B0CD0 +:1028180013602268136843F40053136023681A682E +:1028280012F0400F03D11A6842F040021A60E368C0 +:10283800B3F5E06F19D849E0204602210A462B4635 +:10284800FFF798FD38B1012384F85D30002384F840 +:102858005C30032364E02368A26B1288DA60A36B00 +:102868000233A363E38F013BE387E38F002BE3D1BC +:102878002FE0012B19D0204602210A462B46FFF7EC +:1028880079FD38B1012384F85D30002384F85C3089 +:10289800032345E02368A26B1288DA60A36B023336 +:1028A800A363E38F023BE38710E0204602210A4638 +:1028B8002B46FFF75FFD00282FD12268A36B591C18 +:1028C800A1631B781373E38F013BE387E38F002B2E +:1028D800CFD1A36AB3F5005F04D12268136843F42B +:1028E8008053136020462946FFF7E4FD0346B0B93C +:1028F800A26832B901922268D16801919268019266 +:10290800019A012284F85D20002284F85C20226E5E +:1029180032B1012304E0022302E0032300E0032391 +:10292800184603B0F0BD00BF9C7A0008704700BF8E +:1029380010B504460368234A934218BFB3F1804F89 +:1029480034D0A2F57C42934230D002F580629342A3 +:102958002CD002F58062934228D002F5806293421F +:1029680024D002F58062934220D002F5704293424F +:102978001CD002F57052934218D002F5806293423F +:1029880014D002F58062934210D0A2F59832934297 +:102998000CD002F58062934208D002F5806293421F +:1029A80004D0094840F25D1100F054F92268D36858 +:1029B80043F00103D3602268136843F001031360F6 +:1029C800002010BD00000140CC7A000870B40268F5 +:1029D800434B984214BF00230123B0F1804F14BF2A +:1029E8001C4643F00104BCB93E4DA84214BF002563 +:1029F80001253D4EB04211D085B905F1804505F558 +:102A08008235A84214BF0025012506F50066B042AC +:102A180000D02DB1012504E0012502E0012500E0E8 +:102A280000251DB122F070024D682A43002C35D1D3 +:102A38002C4CA04214BF002401242B4DA8422FD0B7 +:102A480074BB04F1804404F58234A04214BF00240E +:102A5800012405F50065A84224D01CBB234CA042E4 +:102A680014BF0024012405F59A35A8421CD0DCB90E +:102A78001F4CA04214BF0024012405F50065A8429C +:102A880014D09CB91B4CA04214BF00240124A5F506 +:102A98009635A84200D05CB101240AE0012408E080 +:102AA800012406E0012404E0012402E0012400E0FE +:102AB80000241CB122F44072CC68224302608A6868 +:102AC800C2620A6882620C4A904208BF43F001035E +:102AD8000BB10B6903630123436170BC704700BFEE +:102AE800000001400008004000040040004401408C +:102AF80000180040002000400004014000286DD06C +:102B080010B504460368364A934218BFB3F1804FA4 +:102B180033D0A2F57C4293422FD002F580629342D3 +:102B28002BD002F58062934227D002F5806293424F +:102B380023D002F5806293421FD002F5704293427F +:102B48001BD002F57052934217D002F5806293426F +:102B580013D002F5806293420FD0A2F598329342C7 +:102B68000BD002F58062934207D002F5806293424F +:102B780003D01C48D22100F06DF8A368002B18BFC1 +:102B8800102B09D0202B07D0402B05D0602B03D069 +:102B98001448D32100F05EF82369002B18BFB3F561 +:102BA800807F06D0B3F5007F03D00E48D42100F013 +:102BB80051F894F8393013F0FF0F02D12046FFF78F +:102BC800B5FE022384F83930214651F8040BFFF78B +:102BD800FDFE012384F83930002010BD0120704724 +:102BE80000000140CC7A0008FEE700BF08B50348A2 +:102BF80000F056F80120FFF7F7FF00BFFC7A000845 +:102C080008B50D4B1B6813B90C4A0B4B1A600A4BDD +:102C18001A68C31C23F00303134409498B4206D9DD +:102C280004F03AFA0C2303604FF0FF3008BD024964 +:102C38000B60104608BD00BFD80400209045002056 +:102C480000FC042001230360014B0B60704700BFA8 +:102C58000400002008B503460A460348194600F058 +:102C680005F8FFF7C3FF00BF507B00080FB400B59D +:102C780083B004AB53F8042B01930848802104F077 +:102C88007BFA011E03DD054800F04CF801460846B2 +:102C980003B05DF804EB04B0704700BFE004002007 +:102CA80010B5044604F036FA0146204600F03AF81A +:102CB8000248012100F036F810BD00BF407C000832 +:102CC8002DE9F04385B004460F46435C13BB042549 +:102CD80028462146ABBE04461FE03546102E28BFC5 +:102CE8001025002306E014F8011B04AA1A4402F870 +:102CF800101C0133AB42F6D304AA1344002203F894 +:102D0800102CE9464FF0040840464946ABBE8046C1 +:102D1800761B00E00E46002EDFD1384605B0BDE830 +:102D2800F08300BF08B5FFF7CBFF08BD08B500F07A +:102D380091F8024B024A9A6008BD00BF00ED00E01E +:102D480000000008F8B504460D4617461E462648FA +:102D5800FFF78CFF25482168FFF788FF2448616842 +:102D6800FFF784FF2348A168FFF780FF2248E16846 +:102D7800FFF77CFF21482169FFF778FF2048616948 +:102D8800FFF774FF1F48A169FFF770FF1E48E1694C +:102D9800FFF76CFF1D48FFF769FF1D482946FFF73D +:102DA80065FF1C4CE16A1C48FFF760FF216B1B485C +:102DB800FFF75CFFE16B1A48FFF758FF15F0800F2B +:102DC80003D018483946FFF751FF15F4004F03D0D8 +:102DD80015483146FFF74AFF1448FFF747FF1448E4 +:102DE8000699FFF743FFF8BDA87B0008B87B0008E9 +:102DF800C87B0008D87B0008E87B0008F87B00083F +:102E0800087C0008187C0008287C0008387C00082A +:102E1800447C000800ED00E0547C0008647C000855 +:102E2800747C0008847C0008947C0008A47C00085A +:102E3800AC7C000883691A888A4207D10268033A81 +:102E4800012A05D8023383610120704700207047AA +:102E5800002070470B4B1A6842F001021A600021EB +:102E680099601868084A02401A60084A5A601A6845 +:102E780022F480221A60D9604FF00062044B9A60F5 +:102E8800704700BF00380240FFFFF6FE10300024F4 +:102E980000ED00E0224B9B6803F00C03042B07D0E5 +:102EA800082B09D0002B2DD11E4A1F4B1A602CE08D +:102EB8001E4A1D4B1A6028E0194B5A685B6803F0DC +:102EC8003F0312F4800F09D0184AB2FBF3F2144BF7 +:102ED8005B68C3F3881303FB02F208E0114AB2FBF4 +:102EE800F3F30F4A5168C1F3881101FB03F20C4B4D +:102EF8005B68C3F3014301335B00B2FBF3F30A4A97 +:102F0800136002E0074A084B1A60054B9B68C3F33D +:102F18000313074AD15C044A1368CB401360704717 +:102F2800003802400024F4000C00002080BA8C0114 +:102F3800F07C00082DE9F843054689461646984670 +:102F4800BDF82070044607E02046494642463B4605 +:102F580000F034FB013424B2AB199C42F4DBBDE829 +:102F6800F88300BF00B583B0064BB3F90020064BC9 +:102F7800B3F9003000900020014600F0D7FB03B001 +:102F88005DF804FBE8070020EE0700202DE9F04F6C +:102F980089B005911D460493BDF94830BDF94CA090 +:102FA800BDF850400094A94204DD059504910146FE +:102FB80010460A460499514505DDCDF810A08A4609 +:102FC80011461A460B460599049CA14204DD059456 +:102FD8000491014610460A460599514518D1904278 +:102FE80005DC01DB024602E0114602460846934230 +:102FF80005DB834201DC134601E018461346C01A7C +:10300800421C1846059912B2009B00F033FB8AE077 +:103018001FFA82F987B2C7EB090292B29646049862 +:103028001FFA80FBBDF81410C1EB0B0292B202929A +:103038009BB2C7EB03081FFA88F81FFA8AF2511AE5 +:1030480089B20191C9EB03039BB20693CBEB020251 +:1030580093B20393504504D00BF1FF3B0FFA8BFB5F +:1030680001E0DDF810B0059C00252E46CDF81C9037 +:10307800F14622E033B2BDF9082093FBF2F23A445C +:1030880092B22BB2BDF9040093FBF0F0384480B241 +:103098004E44B6B24544ADB211B203B2994202DC15 +:1030A800034610461A46121A013200B2214612B2DD +:1030B800009B00F0DFFA013424B25C45DADDDDF86C +:1030C8001C90049BE51ADDF818B01BFB05F5ADB2A2 +:1030D800059BE61A18FB06F6B6B222E02BB2BDF93C +:1030E8000C2093FBF2F24A4492B233B2BDF90400C9 +:1030F80093FBF0F0384480B25D44ADB24644B6B2BA +:1031080011B203B2994202DC034610461A46121A5B +:10311800013200B2214612B2009B00F0ABFA013432 +:1031280024B25445DADD09B0BDE8F08F2DE9F04747 +:1031380084B090461F46BDF93060BDF8345080B267 +:1031480089B2C218013A8B19013B92B29BB200F0C6 +:10315800D9F9194B186899880122FDF7CFFF174B49 +:10316800D3F800A0B3F80490504649460022FDF772 +:10317800C5FF002412E023B238F8133003EA050231 +:10318800120A8DF804202B408DF805300C4801A94F +:1031980002220123FFF7ECFA0134A4B223B206FBA2 +:1031A80007F29342E7DB504649460122FDF7A6FFA6 +:1031B80004B0BDE8F08700BF587D0008607D0008B6 +:1031C8004007002008B90120FFE7014B187070473D +:1031D800ED070020024B1880024B1980704700BF92 +:1031E8008A08002088080020014B1870704700BF2B +:1031F800EC07002070B50646104B18689988002225 +:10320800FDF77CFF0E4B186899880022FDF776FFC2 +:103218000C4B1D689C88284621460022FDF76EFF4E +:1032280009490E80094801221346FFF7A1FA2846EA +:1032380021460122FDF762FF70BD00BF587D0008DE +:10324800507D0008607D00088C08002040070020A1 +:1032580070B50646104B186899880122FDF74EFF95 +:103268000E4B186899880022FDF748FF0C4B1D6823 +:103278009C88284621460022FDF740FF09490E8018 +:10328800094801221346FFF773FA2846214601220E +:10329800FDF734FF70BD00BF587D0008507D000861 +:1032A800607D00088C0800204007002038B5934B4B +:1032B8001D689C88284621460122FDF71FFF05202E +:1032C80000F0A8FC284621460022FDF717FF14202D +:1032D80000F0A0FC284621460122FDF70FFF9620AA +:1032E80000F098FC864B186899880022FDF706FFC5 +:1032F800EF20FFF77FFF0320FFF7AAFF8020FFF7EB +:10330800A7FF0220FFF7A4FFCF20FFF773FF0020DD +:10331800FFF79EFFC120FFF79BFF3020FFF798FFC4 +:10332800ED20FFF767FF6420FFF792FF0320FFF708 +:103338008FFF1220FFF78CFF8120FFF789FFE8201D +:10334800FFF758FF8520FFF783FF0020FFF780FF76 +:103358007820FFF77DFFCB20FFF74CFF3920FFF7E0 +:1033680077FF2C20FFF774FF0020FFF771FF342050 +:10337800FFF76EFF0220FFF76BFFF720FFF73AFF1A +:103388002020FFF765FFEA20FFF734FF0020FFF752 +:103398005FFF0020FFF75CFFC020FFF72BFF232013 +:1033A800FFF756FFC120FFF725FF1020FFF750FF5A +:1033B800C520FFF71FFF3E20FFF74AFF2820FFF731 +:1033C80047FFC720FFF716FF8620FFF741FF36208B +:1033D800FFF710FF4820FFF73BFF3A20FFF70AFFEF +:1033E8005520FFF735FFB120FFF704FF0020FFF756 +:1033F8002FFF1820FFF72CFFB620FFF7FBFE082051 +:10340800FFF726FF8220FFF723FF2720FFF720FF83 +:10341800F220FFF7EFFE0020FFF71AFF2620FFF744 +:10342800E9FE0120FFF714FFE020FFF7E3FE0F207D +:10343800FFF70EFF3120FFF70BFF2B20FFF708FFE8 +:103448000C20FFF705FF0E20FFF702FF0820FFF70B +:10345800FFFE4E20FFF7FCFEF120FFF7F9FE3720B4 +:10346800FFF7F6FE0720FFF7F3FE1020FFF7F0FE48 +:103478000320FFF7EDFE0E20FFF7EAFE0920FFF715 +:10348800E7FE0020FFF7E4FEE120FFF7B3FE00208F +:10349800FFF7DEFE0E20FFF7DBFE1420FFF7D8FE55 +:1034A8000320FFF7D5FE1120FFF7D2FE0720FFF714 +:1034B800CFFE3120FFF7CCFEC120FFF7C9FE482020 +:1034C800FFF7C6FE0820FFF7C3FE0F20FFF7C0FE78 +:1034D8000C20FFF7BDFE3120FFF7BAFE3620FFF7BC +:1034E800B7FE0F20FFF7B4FE1120FFF783FE782008 +:1034F80000F090FB2920FFF77DFE38BD207D0008F5 +:10350800607D0008F8B507460D4616461C462A2079 +:10351800FFF770FE380AFFF79BFEF8B2FFF798FE38 +:10352800300AFFF795FEF0B2FFF792FE2B20FFF767 +:1035380061FE280AFFF78CFE2846FFF789FE200A5D +:10354800FFF786FE2046FFF783FE2C20FFF752FE8A +:10355800F8BD00BFF0B599B00446134B18689988B8 +:103568000122FDF7CBFD114B1F689E883846314676 +:103578000022FDF7C3FD0E4B1C800E4C0E4A15921F +:10358800169301251795684604F11001542203F09B +:1035980089FD94E80F0002F0FFFA384631462A46C2 +:1035A800FDF7ACFD19B0F0BD587D0008607D00083E +:1035B8008C08002040070020900800202DE9F041E9 +:1035C80098B01E46244BB3F90030984240DA1446AE +:1035D800224B1B881AB291423ADA0A19013A1DB2F3 +:1035E800AA4201DB5C1A24B282B289B20B19013BF0 +:1035F80010469BB2FFF786FF194B1868998801227D +:10360800FDF77CFD174BD3F800809F88404639466C +:103618000022FDF773FD12E0134B1E80134C144A71 +:103628001592169301231793684604F1100154224A +:1036380003F038FD94E80F0002F0AEFA2C46631E42 +:103648001DB2002CE8D1404639460122FDF756FD4F +:1036580018B0BDE8F08100BFE8070020EE070020A1 +:10366800587D0008607D00088C0800204007002075 +:10367800900800202DE9F04198B014461E46244BCE +:103688001B881AB290423FDA224AB2F900209142CE +:103698003ADA0219013A1DB2AA4201DB1C1A24B215 +:1036A80080B28BB20219013A194692B2FFF72AFF8B +:1036B800194B186899880122FDF720FD174BD3F89C +:1036C80000809F88404639460022FDF717FD12E02A +:1036D800134B1E80134C144A15921693012317930B +:1036E800684604F11001542203F0DCFC94E80F0052 +:1036F80002F052FA2C46631E1DB2002CE8D1404657 +:1037080039460122FDF7FAFC18B0BDE8F08100BF88 +:10371800E8070020EE070020587D0008607D0008BB +:103728008C08002040070020900800202DE9F04771 +:1037380098B090461F46BDF880602D4B1B881AB282 +:10374800904251DA2B4A128814B2A1424CDA00EBAB +:103758000804013C1DB2AC4202DB1B1A0FFA83F8C5 +:10376800CB19013B14B2A34201DB571A3FB280B216 +:1037780089B200EB0802013ACB19013B92B29BB225 +:10378800FFF7C0FE1C4B186899880122FDF7B6FCAC +:103798001A4BD3F800A0B3F80490504649460022CB +:1037A800FDF7ACFC19E0164A1680164C164B15931B +:1037B800169201231793684604F11001542203F06E +:1037C80071FC94E80F0002F0E7F9013D2DB200E02A +:1037D8004546002DE7DC013F3FB2002FF8DC50469C +:1037E80049460122FDF78AFC18B0BDE8F08700BF02 +:1037F800E8070020EE070020587D0008607D0008DB +:103808008C080020400700209008002010B50446CE +:103818003720FFF7EFFC200AFFF71AFDE0B2FFF7A9 +:1038280017FD10BD70B506460D46144643181344DF +:10383800B3F5A07F14D13320FFF7DCFC300AFFF783 +:1038480007FDF0B2FFF704FD280AFFF701FDE8B213 +:10385800FFF7FEFC200AFFF7FBFCE0B2FFF7F8FCDD +:1038680070BD00BF10B504463620FFF7C3FC04F056 +:10387800030003282ED8DFE800F0020D18234820A3 +:10388800FFF7E6FCF022144B1A804FF4A072134B9A +:103898001A8010BD2820FFF7DBFC4FF4A0720E4BF6 +:1038A8001A80F0220D4B1A8010BD8820FFF7D0FC3B +:1038B800F022094B1A804FF4A072084B1A8010BDF1 +:1038C800E820FFF7C5FC4FF4A072034B1A80F022E2 +:1038D800024B1A8010BD00BFE8070020EE07002049 +:1038E80030B587B00C4A136B43F0100313634FF4E1 +:1038F8000054019401230293022204920393074D7A +:10390800284601A9FDF766FA284621460022FDF758 +:10391800F5FB07B030BD00BF003802400010024080 +:103928000A4B1B680A4AA2FB03239B09013BB3F11C +:10393800807F09D2074A5360F021074B83F8231090 +:103948000023936007231360704700BF0C0000201A +:10395800D34D621010E000E000ED00E0034B1B685F +:103968001BB1024A1368013B13607047A40800208A +:1039780010B5BFF34F8FBFF36F8F1D4B0021C3F8F6 +:1039880050125A6942F400325A61BFF34F8FBFF3A5 +:103998006F8FC3F88410BFF34F8FD3F88040C4F300 +:1039A8004E3000E01846C4F3C90200E01A4643F658 +:1039B800E07303EA401343EA82730D49C1F86032A9 +:1039C800531E002AF2D1431E0028EBD1BFF34F8FBC +:1039D8004B6943F480334B61BFF34F8FBFF36F8F55 +:1039E800FCF74AFD00F022FDFFF754FA10BD00BFB6 +:1039F80000ED00E010B586B00022654B1A80654BDB +:103A08001A80654B1A706421644B1980644B1A70D4 +:103A1800644B1A700092644B596C41F4807159647C +:103A2800596C01F48071009100990192596C41F42C +:103A380000715964596C01F4007101910199029265 +:103A4800596C41F480615964596C01F480610291A8 +:103A580002990392196B41F001011963196B01F086 +:103A68000101039103990492196B41F00201196352 +:103A7800196B01F00201049104990592196B41F048 +:103A880004011963196B01F0040105910599596A3C +:103A980041F480715962596A21F48071596243482E +:103AA800A3F58C3303604260826002610123836165 +:103AB80002624262C2628262C260C36102634261A0 +:103AC800FCF798FD18B1374A13780133137038485A +:103AD800384B0360002343608360036101228261E5 +:103AE80003624362C3628362C360C261036343616A +:103AF800FCF780FD18B12B4A1378013313702E4858 +:103B08002E4B0360002343608360036101228261BE +:103B180003624362C3628362C360C2610363436139 +:103B2800FCF768FD18B11F4A137801331370244954 +:103B380009230B600120486000238B60CB60214A79 +:103B48000324146050609360D3601F4A02241460F9 +:103B580050609360D3601548FCF7D2FE18B1114A43 +:103B680013780133137012481649FCF7C9FE18B1CF +:103B78000C4A1378013313700F481349FCF7C0FE41 +:103B880018B1084A13780133137006B010BD00BF8E +:103B9800CC050020E4060020A9070020F00700203B +:103BA800390700203807002000380240540600205A +:103BB8009C0600200021014030080020002201401E +:103BC800D0050020780800202807002008B50C48F8 +:103BD800FCF7FCFD18B10B4A1378013313700A483F +:103BE800FCF7F4FD18B1074A13780133137007483E +:103BF800FCF7ECFD18B1034A13780133137008BDC4 +:103C080054060020380700209C06002030080020B9 +:103C1800704700BF034B1860024B1B68002BFBD199 +:103C2800704700BFE80600202DE9F04F87B08026D6 +:103C380001964FF00208CDF8108001250295002466 +:103C480005940394B04801A9FDF7C4F84FF0400A61 +:103C5800CDF804A0CDF81080029505940394AA48E5 +:103C680001A9FDF7B7F84FF4005301930494112705 +:103C7800029705940394A54801A9FDF7ABF8A3485A +:103C88004FF400512246FDF739FA0195CDF810801E +:103C98000294039505949E4801A9FDF79BF8CDF879 +:103CA8000480CDF81080029403950594984801A9E2 +:103CB800FDF790F84FF400730193CDF8108002944B +:103CC80003950594904801A9FDF784F8042301930E +:103CD800CDF810804FF00309CDF8089003940594AF +:103CE8008C480DEB0301FDF775F84FF0080BCDF884 +:103CF80004B0CDF81080CDF8089003940594854859 +:103D080001A9FDF767F830230193CDF808900394D3 +:103D1800804801A9FDF75EF80423019302950494F5 +:103D2800039479480DEB0301FDF754F87648042114 +:103D38002A46FDF7E3F90196029504940394754821 +:103D480001A9FDF747F8734831462246FDF7D6F931 +:103D5800CDF804800295049403946C4801A9FDF7FA +:103D680039F86A4841462246FDF7C8F9CDF804A05B +:103D7800029504940394674801A9FDF72BF8654858 +:103D880051462A46FDF7BAF9019502950494039421 +:103D9800604801A9FDF71EF85E4829462246FDF74E +:103DA800ADF9CDF804A0029504940394584801A9EC +:103DB800FDF710F8564851462A46FDF79FF9CDF809 +:103DC80004B0029704940395514801A9FDF702F83D +:103DD8004F4859462A46FDF791F94FF4004301939D +:103DE800029504940394484801A9FCF7F3FF464858 +:103DF8004FF400412A46FDF781F94FF4005301932F +:103E0800029504940394404801A9FCF7E3FF3E4857 +:103E18004FF400512A46FDF771F9202301930295CA +:103E2800049403943A4801A9FCF7D4FF38482021A8 +:103E38002A46FDF763F91027019702950494039425 +:103E4800334801A9FCF7C6FF314839462A46FDF731 +:103E580055F94FF4006701970295049403942E488E +:103E680001A9FCF7B7FF2C4839462A46FDF746F961 +:103E78004FF480470197029504940394244801A9BC +:103E8800FCF7A8FF224839462A46FDF737F94FF4D0 +:103E980080530193CDF80890049403941E4801A917 +:103EA800FCF798FF1C484FF480512246FDF726F98D +:103EB800CDF80480CDF8089004940394124801A921 +:103EC800FCF788FF4FF48068CDF8048002950494CD +:103ED8000394114801A9FCF77DFF0F4841462A4683 +:103EE800FDF70CF901970295049403940A4801A977 +:103EF800FCF770FF084839462A46FDF7FFF82023EB +:103F0800019302940AE000BF000402400008024046 +:103F18000010024000000240000C02400494039587 +:103F28004F4801A9FCF756FFCDF804A00294049469 +:103F380003954B4801A9FCF74DFFCDF804B0029456 +:103F480004940395464801A9FCF744FF019602949E +:103F580004940395424801A9FCF73CFF4FF4005331 +:103F680001930295049403943E4801A9FCF732FF9B +:103F78003C484FF400512246FDF7C0F84FF48079D1 +:103F8800CDF80490049402950395374801A9FCF7ED +:103F980021FF354849462246FDF7B0F84FF4004363 +:103FA80001930494029503942E4801A9FCF712FF8B +:103FB8002C484FF400412A46FDF7A0F801960494D6 +:103FC80002940394274801A9FCF704FF04230193F2 +:103FD80004940295039425480DEB0301FCF7FAFEBF +:103FE800224804212A46FDF789F8CDF80480049474 +:103FF800029503941B4801A9FCF7ECFE19484146B9 +:104008002A46FDF77BF8CDF80490049402950394B2 +:10401800134801A9FCF7DEFE114849462246FDF780 +:104028006DF8CDF804B00494029503940F4801A9E3 +:10403800FCF7D0FE0D4859462246FDF75FF8CDF84B +:104048000490049402950394064801A9FCF7C2FE63 +:10405800044859462246FDF751F807B0BDE8F08FED +:10406800000C02400010024000000240000802401C +:1040780084B0F0B587B00CAC84E80F00104B9A8878 +:10408800019202270497122602960125039504241B +:10409800059418680DEB0401FCF79CFE094B9A88FF +:1040A8000192049702960395059418680DEB040194 +:1040B800FCF790FE07B0BDE8F04004B0704700BFC1 +:1040C800B87D0008387D00082DE9F04F87B03A4CDC +:1040D800236823F001031B041B0C2360374BB3F840 +:1040E8000490CDF804904FF0020ACDF810A01126E4 +:1040F8000296002503950595D3F80080404601A94E +:10410800FCF768FE2E4B9F880197CDF810A0029609 +:10411800039505951E68304601A9FCF75BFE3046FD +:1041280039460122FCF7EAFF404649460122FCF7DE +:10413800E5FF304639462A46FCF7E0FF4046494647 +:104148002A46FCF7DBFF304639460122FCF7D6FF4A +:10415800404649460122FCF7D1FFCDF80490CDF83E +:1041680010A04FF0120BCDF808B04FF00109CDF8B0 +:104178000C900425059540460DEB0501FCF72AFE39 +:104188000197CDF810A0CDF808B0CDF80C900595A2 +:1041980030460DEB0501FCF71DFE236843F4004390 +:1041A80023602368C3F30E032360236843EA0903EB +:1041B800236007B0BDE8F08F00580040387D000844 +:1041C800B87D000800B585B08DF80C008DF80D108D +:1041D800642300930448E02103AA0223FDF706FAAA +:1041E80005B05DF804FB00BFAC070020F8B51D461C +:1041F80003FB0121CC01B4FBF3F4A4F50074D20154 +:10420800B2FBF3F703FB1727C6B23046E1B2FFF75C +:10421800D9FF701CC0B2C4F30721FFF7D3FFB01C4D +:10422800C4F3014101EB8701C0B2C9B2FFF7CAFF6D +:10423800F01CC0B2C7F38711FFF7C4FF301DC0B22E +:10424800C7F38731FFF7BEFF701DC0B2C7F38751B0 +:10425800FFF7B8FFB01DC0B2E9B2FFF7B3FFF01D1A +:10426800C0B2C5F30721FFF7ADFF06F10800C0B2E1 +:10427800C5F30741FFF7A6FF06F10900C0B2C5F371 +:104288000561FFF79FFFF8BD30B587B08DF80F00C7 +:1042980000238DF817300B4C642500952046E0214B +:1042A8000DF10F020123FDF7A1F900952046E02149 +:1042B8000DF117020123FDF745FA9DF8170007B025 +:1042C80030BD00BFAC07002070B50E4900EB4002BE +:1042D8008B188D5C5E789C7894B10146FF2C04D1D4 +:1042E80028463146FFF76EFF70BD2846FFF7CCFF22 +:1042F80020EA0400C1B2344028462143FFF762FF98 +:1043080070BD00BF1000002010B5E6201021FFF797 +:1043180059FFF120E521FFF755FF002403E020466F +:10432800FFF7D2FF0134B4F5AF7FF8DBDA200121C3 +:10433800FFF7AAFF00F00400C0B206E0DA2001216E +:10434800FFF7A2FF00F00400C0B20028F6D1312028 +:104358000121FFF799FF00F07F013120FFF732FFBD +:10436800F6200221FFF72EFFF1206521FFF72AFF33 +:10437800DA200121FFF788FF00F0150005E0DA20B8 +:104388000121FFF781FF00F015000028F7D1EB208D +:104398000121FFF779FF01462D20FFF713FFEC20DD +:1043A8000121FFF771FF01462E20FFF70BFF2F2099 +:1043B8000121FFF769FF0446ED200121FFF764FFA3 +:1043C80000F0030104F0FC042F202143FFF7FAFE5C +:1043D80031200121FFF758FF60F07F013120C9B279 +:1043E800FFF7F0FEE6200021FFF7ECFE10BD00BF4E +:1043F80008B53520C721002242F21073FFF7F6FEF8 +:104408001F20C021FFF7DEFE1F20C121FFF7DAFEC3 +:10441800352040F28D11002242F21073FFF7E6FEBC +:104428001F20C021FFF7CEFE08BD00BF30B595B0F4 +:10443800002401941C4B1A6C42F080521A641B6CC5 +:1044480003F080530193019B0294184B1A6842F4BD +:1044580040421A601B6803F440430293029B012305 +:1044680003934FF480330493022509954FF4800396 +:104478000A930F230B93D2230C930D9507230E93C6 +:1044880003A8FDF7B3FA0D230F93109511944FF479 +:10449800A05312934FF4805313930FA80521FDF7EF +:1044A80065FD15B030BD00BF003802400070004007 +:1044B80002294EDC30B4002341E0012917D002293B +:1044C80025D000293AD11418C4F500749C4209DAA1 +:1044D800C2F500749C4205DD4FF07E551D4C44F832 +:1044E80023502BE000251B4C44F8235026E0934230 +:1044F80008DD14189C4205DD4FF07E55154C44F834 +:1045080023501BE00025134C44F8235016E01418E0 +:10451800C4F500759D4203DAC2F500759D4203DCBF +:10452800934207DDA34205DA4FF07E55094C44F863 +:10453800235003E00025074C44F823500133B3F51A +:10454800007FBADB034B0022C3F80024C3F8FC2722 +:1045580030BC7047B008002088B000220092294B78 +:10456800196B41F001011963196B01F00101009108 +:1045780000990192196B41F002011963196B01F05E +:104588000201019101990292196B41F0040119632A +:10459800196B01F00401029102990392196B41F021 +:1045A80008011963196B01F008010391039904923A +:1045B800196B41F010011963196B01F01001049196 +:1045C80004990592196B41F400111963196B01F4F0 +:1045D8000011059105990692196B41F48001196340 +:1045E800196B01F480010691069907921A6C42F43E +:1045F80080021A641B6C03F480030793079B08B0BE +:10460800704700BF00380240024A13680133136044 +:10461800704700BFAC0500200023064A1360064A15 +:1046280013607F21054A1160054A13606422054B17 +:104638001A607047B0100020AC080020D820002075 +:10464800B4100020844500202F4B1B78002B5AD132 +:1046580010B52E4B18689988FCF73EFD44002C4B8A +:1046680018689988FCF738FD20442A4B18602A4BB3 +:104678001B68984242D00BB9012813D0012B01D1F5 +:10468800032808D0032B01D1022806D0022B06D11B +:1046980038B1002006E0184604E0012002E00020BE +:1046A80000E001201D4B18601D4B18689988FCF725 +:1046B80013FDB8B9194B1B6823B11A4A1388013383 +:1046C800138003E0174A1388013B1380154B1B889E +:1046D8005B08154A1188B3FBF1F201FB1233134A48 +:1046E80013800BE00D4B1B6823B1114A136801338B +:1046F800136003E00E4A1368013B1360054B1A6808 +:10470800054B1A6010BD704794050020187D0008FD +:10471800487D0008AC080020B0100020E4380020D4 +:10472800287D000880050020300400209605002020 +:104738008845002008B50A49D1E90023013243F130 +:104748000003C1E90023FFF709F9FFF77DFF054BD7 +:104758001B681BB1034A1368013B136008BD00BF07 +:1047680060050020E8060020024B186800EBD070B6 +:1047780040107047884500202DE9F04F83B08246ED +:1047880089463B4B1A680192B3F804B01046594663 +:104798000022FCF7B3FC374BD3F800809F884046D3 +:1047A80039460022FCF7AAFC334B1E689D88304628 +:1047B80029460022FCF7A2FC304629460122FCF7D4 +:1047C8009DFC002415E0C4F107034AFA03F24046B1 +:1047D800394602F00102FCF791FC304629460022D6 +:1047E800FCF78CFC304629460122FCF787FC013493 +:1047F800E4B2072CE7D9019C204659460122FCF770 +:104808007DFC204659460022FCF778FC4046394694 +:104818000122FCF773FC304629460022FCF76EFCA7 +:10482800304629460122FCF769FC002415E0C4F152 +:10483800070349FA03F24046394602F00102FCF741 +:104848005DFC304629460022FCF758FC30462946D4 +:104858000122FCF753FC0134E4B2072CE7D9019894 +:1048680059460122FCF74AFC03B0BDE8F08F00BFAF +:10487800907D0008B07D0008307D000810B582B03A +:10488800174B1868174902F021FA4FF07E5102F0D1 +:1048980015F901F0A7FD01F0A7F90022124B01F06C +:1048A800F5FD02F08DF80446104B1A6890420ADDB7 +:1048B8004FF47843009302F196009C21A21A032337 +:1048C800FEF738FB07E00023009396309C21121B6B +:1048D8000323FEF72FFB054B1C6002B010BD00BF81 +:1048E8008C05002000247449000024407C05002029 +:1048F8002DE9F041664B1B6813B1DFF8BC8101E07C +:10490800DFF8B8810124634D07E02846002102F052 +:1049180099FB00B100250134E4B2FF2CF5D15E4BC0 +:104928001D682846002102F06FFB50B1284601F0AF +:1049380059FD0022002301F0F7FB02F069F8564BFD +:104948001860554D286801F04DFD01F04DF94CA354 +:10495800D3E9002301F0C4FE02F05AF84F4B186067 +:10496800286801F03FFD48A3D3E9002301F08EFD3C +:1049780002F04EF828604A4B1D68294602F062FB97 +:1049880008B1454B1D60474B1D68434B18682946C5 +:1049980002F03AFB08B1404B1D60434B1A781046B1 +:1049A80000217823FEF7AEFD782525E000203F4959 +:1049B80001F01AF932A3D3E9002301F091FE06466B +:1049C8000F46354B186801F00DFD02460B46304680 +:1049D800394601F085FE0022354B01F057FD02F003 +:1049E80017F8344B186002F037FBC0B238F81000E3 +:1049F800FEF7B0FD013DEDB2002DD7D12A4B1A7854 +:104A080010467821EF23FEF77DFD25E00020274999 +:104A180001F0EAF81AA3D3E9002301F061FE064683 +:104A28000F461D4B186801F0DDFC02460B46304668 +:104A3800394601F055FE00221D4B01F027FD01F01B +:104A4800E7FF1C4B186002F007FBC0B238F81000F3 +:104A5800FEF780FD013CE4B2872CD7D8124A1378C0 +:104A68000133DBB21370772B02D900220E4B1A7078 +:104A78000D4B1878FEF7CAFEBDE8F081AFF3008051 +:104A8800EF39FAFE422EE63FAE47E17A14AEEF3F29 +:104A9800900500200000C842A805002084050020D9 +:104AA8004804002044040020B00500200000F03F26 +:104AB8000000594078050020B8820008049D0008CD +:104AC80010B5FFF751FE124B1860124B1B68984245 +:104AD80015D01A1A104B1C6810490B6804FB0233D6 +:104AE8000B60002B01DC01220A600C4B1A680C4B8E +:104AF8009A4202DD1A46094B1A60064B1860074BAA +:104B08001868084B1B68984201D0FFF781F810BD60 +:104B18005C390020E02800203804002040040020F0 +:104B280060343C02A405002038B5784B1B880A2B5A +:104B380000F2EA80DFE813F00B00110017001E00F6 +:104B480025002B00310037006A009C00C000704A25 +:104B5800704B1A60FFF7B4FF38BD6F4A6D4B1A608F +:104B6800FFF7AEFF38BD42F210726A4B1A60FFF7CA +:104B7800A7FF38BD4FF47A72664B1A60FFF7A0FFA3 +:104B880038BD6422634B1A60FFF79AFF38BD0A22CA +:104B9800604B1A60FFF794FF38BD01225D4B1A6025 +:104BA800FFF78EFF38BDFFF7DFFD5C4B18605C4BED +:104BB8001B68984200F0A8801A1A5A490B881344B7 +:104BC8009BB20B801BB2002B01DC00220A80554BE4 +:104BD800B3F90030C72B02DD6422524B1A80524BC6 +:104BE8001B88504AB2F900101AB2914202DB5A1ED1 +:104BF8004C490A804A4A10604A4AB2F9002018B261 +:104C0800801A4A4B1978FFF753FC38BDFFF7ACFD03 +:104C1800424B1860424B1B68984275D01A1A424999 +:104C28000B8813449BB20B801BB2002B01DC0022C3 +:104C38000A803D4BB3F90030C72B02DD64223A4BA2 +:104C48001A80384B1A88384BB3F9001013B29942BE +:104C580002DC531C34490B80314B186012B2324BC2 +:104C6800B3F90000801A314B1978FFF721FC38BDE1 +:104C7800FFF77AFD294B1860294B1B68984243D0EF +:104C88001B1A2A4A11780B44294981FB0301A1EB1D +:104C9800E37101EB4101591AC9B21170214BB3F903 +:104CA8000020214BB3F90000801AFFF701FC1B4BD1 +:104CB8001A681B4B1A6038BDFFF756FD0446174BA0 +:104CC8001860174B186884421ED0001B01F0AAFF19 +:104CD800184B196801F0FAFF174D296801F0EEFE2C +:104CE8002860164B1D68294602F0ACF908B1124B32 +:104CF8001D60114B1868002102F090F910B10022D4 +:104D08000D4B1A60064B1C6038BD00BF960500208D +:104D180040420F0038040020A08601005C390020C2 +:104D2800E02800209C0500203E0400208805002083 +:104D3800565555552C040020500400204C040020E2 +:104D480000B583B02E380B2875D8DFE800F006745C +:104D58006A101A242E38424C566013200090019392 +:104D680008461146394A0F23FEF7E0F96BE0132095 +:104D78000090019308461146354A0F23FEF7D6F9ED +:104D880061E013200090019308461146314A0F2331 +:104D9800FEF7CCF957E0132000900193084611461E +:104DA8002D4A0F23FEF7C2F94DE01320009001931E +:104DB80008461146294A0F23FEF7B8F943E01320A5 +:104DC8000090019308461146254A0F23FEF7AEF9D5 +:104DD80039E013200090019308461146214A0F2319 +:104DE800FEF7A4F92FE0132000900193084611461E +:104DF8001D4A0F23FEF79AF925E01320009001932E +:104E080008461146194A0F23FEF790F91BE01320B4 +:104E18000090019308461146154A0F23FEF786F9BC +:104E280011E013200090019308461146114A0F2300 +:104E3800FEF77CF907E000230093084611460F228D +:104E48001323FEF777F803B05DF804FB808C0008A5 +:104E5800C8B40008A0940008389A000844910008D3 +:104E6800049E000804B70008B4890008DC9600080E +:104E7800B88300086CB1000800B583B02D385128FC +:104E880000F2A380DFE800F08DA1A18329333D471C +:104E9800515B656F79A1A1A1A1A1A1A1A1A1A1A126 +:104EA800A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1EA +:104EB800A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1DA +:104EC800A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1CA +:104ED800A1A1A1A1A1A1A1A1A1970920009001933D +:104EE800084611463E4A0823FEF720F975E00920D6 +:104EF80000900193084611463A4A0823FEF716F92E +:104F08006BE009200090019308461146364A0823B1 +:104F1800FEF70CF961E0092000900193084611465C +:104F2800324A0823FEF702F957E00920009001935E +:104F3800084611462E4A0823FEF7F8F84DE00920E6 +:104F480000900193084611462A4A0823FEF7EEF816 +:104F580043E009200090019308461146264A082399 +:104F6800FEF7E4F839E0092000900193084611465D +:104F7800224A0823FEF7DAF82FE00920009001936F +:104F8800084611461E4A0823FEF7D0F825E00920F6 +:104F980000900193084611461A4A0823FEF7C6F8FE +:104FA8001BE009200090019308461146164A082381 +:104FB800FEF7BCF811E0092000900193084611465D +:104FC800124A0823FEF7B2F807E0002300930846C8 +:104FD800114608220923FDF7ADFF03B05DF804FB75 +:104FE800749C000838A200088093000838B40008B0 +:104FF800C0A40008B4900008288200081094000893 +:10500800A8B3000818990008F08B0008A8990008B0 +:105018002DE9F04184B001228D4B1A70054690B3FA +:105028000C2700974FF6FF74019496205A21894A5D +:105038002823FEF77BF888260096722301930294B2 +:105048007E20772132467C23FDF7A0FF009701944C +:1050580096203146804A2F23FEF768F82E20AE218D +:105068006C222346FFF76CFE2E20EE216C2223468D +:10507800FFF766FE0A23009301948E20A221774A47 +:105088009B23FEF753F8764C20467649764B1A68F0 +:1050980002F014F8207842B2744B93F900309A4227 +:1050A80008D13DB9724B1B88724A128893420ED0C0 +:1050B80003B162B940B26E4B1B8813B94FF4784301 +:1050C80001E04FF6FF738E216C22FFF739FE644B27 +:1050D800587842B2654B93F901309A420BD1664B2E +:1050E8001B7843B93DB9624B1B88624A12889342C8 +:1050F8000ED003B162B940B25D4B1B8813B94FF4AF +:10510800784301E04FF6FF739E216C22FFF718FEEB +:10511800534B987842B2554B93F902309A420AD1D0 +:105128004DB9534B1B88534A1288934211D0012B17 +:1051380001D0012A0DD140B24D4B1B88012B02D161 +:105148004FF4784301E04FF6FF73BE216C22FFF75E +:10515800F7FD434BD87842B2444B93F903309A4257 +:105168000AD14DB9424B1B88424A1288934211D04A +:10517800022B01D0022A0DD140B23D4B1B88022BD5 +:1051880002D14FF4784301E04FF6FF73CE216C2231 +:10519800FFF7D6FD324B187942B2344B93F90430FD +:1051A8009A420AD14DB9324B1B88324A128893422F +:1051B80011D0032B01D0032A0DD140B22C4B1B88F0 +:1051C800032B02D14FF4784301E04FF6FF73DE2141 +:1051D8006C22FFF7B5FD224B587942B2234B93F965 +:1051E80005309A420AD14DB9214B1B88214A1288B1 +:1051F800934211D0042B01D0042A0DD140B21C4B8C +:105208001B88042B02D14FF4784301E04FF6FF735B +:10521800FE216C22FFF794FD114B987942B2134B93 +:1052280093F906309A420AD14DB9114B1B88114A9D +:105238001288934229D0052B01D0052A25D140B2E6 +:105248000B4B1B88052B19D14FF4784318E000BF8E +:1052580094050020F4850008C07D000850A50008CA +:105268006805002040B900084004002058040020C8 +:105278009605002028040020B81800204FF6FF7378 +:105288004FF487716C22FFF75BFD954BD87942B2DA +:10529800944B93F907309A420AD14DB9924B1B8827 +:1052A800924A1288934212D0062B01D0062A0ED1B8 +:1052B80040B28D4B1B88062B02D14FF4784301E096 +:1052C8004FF6FF734FF48F716C22FFF739FD884B4F +:1052D8001A68884B1A608348814901F013FF864B8E +:1052E8001A78864B1B789A4212D1854BB3F9002065 +:1052F800844BB3F900309A420AD14DB97A4B1B88D6 +:105308007A4A1288934229D0072B01D0072A27D13D +:105318007B4BB3F9002002EB8202D20070487A4935 +:1053280001F0CCFE002411E06D4B185704EBC401CA +:10533800CD316D4B1B88072B02D14FF4784301E028 +:105348004FF6FF738922FFF797FD0134032CEBDD3D +:105358006B4B1A886B4B1A80012602E0002600E08E +:105368000026654B1A78654B1B789A4212D1674B19 +:10537800B3F90020664BB3F900309A420AD14DB90F +:10538800594B1B88594A1288934228D0082B01D0C0 +:10539800082A24D15D4BB3F9002002EB8202D20027 +:1053A8004F485C4901F08AFE002411E04C4B185725 +:1053B80004EBC401FA314C4B1B88082B02D14FF483 +:1053C800784301E04FF6FF738922FFF755FD01345A +:1053D800032CEBDD4D4B1A884D4B1A8001264E4BA2 +:1053E8001C684E4B1868214601F004FE50B14DB9B7 +:1053F8003D4B1B883D4A1288934229D00A2B01D085 +:105408000A2A25D12046464901F060FC00F0EAFF4F +:1054180002460B463248434901F050FE002411E091 +:105428002F4B185704EBC401FA312F4B1B880A2B5A +:1054380002D14FF4784301E04FF6FF730A22FFF7D9 +:105448001BFD0134032CEBDD334B1A68334B1A6018 +:10545800002E00F09980284B1B78012B21D013B126 +:10546800022B61D090E00021009179200322F023E3 +:10547800FDF760FD224BB3F9004004EBD4746410CF +:10548800224BB3F9003003EBD3734FF6FF7200924F +:10549800792004F178010322C4EB6303FDF74AFD88 +:1054A80072E00021009179200322F023FDF742FDEC +:1054B800164BB3F9004004EBD4746410104BB3F9E5 +:1054C800003003EBD3734FF6FF7200927920C4F1DA +:1054D80078010322A4EB6303FDF72CFD54E000BF21 +:1054E80068050020580400209605002028040020A4 +:1054F80040040020A4050020880500205404002052 +:105508009C0500203204002044B900083E04002015 +:105518003C04002048B9000850040020340400204E +:105528000000C84250B900080021009179200322E8 +:10553800F023FDF7FFFC4C4EB6F9004004EBD474A1 +:105548006410DFF84C81B8F9003003EBD3734FF6E1 +:10555800FF770097792004F178010322C4EB6303F5 +:10556800FDF7E8FCB8F9004004EBD4746410B6F910 +:10557800003003EBD37300977920C4F1780103223C +:10558800A4EB6303FDF7D6FC384B1B78384A127836 +:1055980093420AD14DB9374A1288374909888A4255 +:1055A80045D0092A01D0092941D1012B16D013B1C0 +:1055B800022B26D037E02F4B1B88092B02D14FF442 +:1055C800784301E04FF6FF73092200920193C4204B +:1055D8005B212A4A1C23FDF7A9FD24E0254B1B88E3 +:1055E800092B02D14FF4784301E04FF6FF730922EB +:1055F80000920193C4205B21214A1C23FDF796FDEC +:1056080011E01C4B1B88092B02D14FF4784301E0B1 +:105618004FF6FF73092200920193C4205B21194AB7 +:105628001C23FDF783FD114B1A78114B1A70164B8A +:10563800186800F0D7FE0AA3D3E9002300F026FF7C +:105648000022002301F08AF918B90A4B1A880A4B7C +:105658001A8000220D4B1A7004B0BDE8F08100BF1B +:10566800AE47E17A14AEEF3F9C0500208805002084 +:1056780054040020960500202804002040A00008BB +:10568800C8A20008BC8E0008500400209405002021 +:105698003E0400202DE9F04182B0284B1B68284ABF +:1056A800A2FB03231B0E013B264F3B600025009500 +:1056B800254E326C42F002023264326C02F0020271 +:1056C8000092009A214C224A2260A56040F21A48B2 +:1056D800C4F80C80636025612046FDF70FFA204668 +:1056E800FDF726F91D2029460122FBF717FA1D2090 +:1056F800FBF754FA0195336C43F004033364336CBD +:1057080003F004030193019B124C134B2360A56023 +:10571800C4F80C803B68636025612046FDF7EEF90C +:105728002046FDF705F91E2002210422FBF7F6F9B1 +:105738001E20FBF733FA02B0BDE8F0810C00002010 +:1057480029D942669805002000380240F407002055 +:1057580000040040EC0600200008004000B583B0BB +:1057680000230193234B1A6C42F000521A641B6CFD +:1057780003F000530193019B1F48204B0360FBF784 +:1057880039FA08B1FEF740FF1D4900220A604A6055 +:105798001948FBF795FA08B1FEF736FF164818497D +:1057A8001022FBF78DFA08B1FEF72EFF12480021F0 +:1057B8000A468823FBF7D6FA08B1FEF725FF0E48FC +:1057C800102100228823FBF7CDFA08B1FEF71CFF51 +:1057D80009480021FBF730FA08B1FEF715FF064823 +:1057E8001021FBF729FA08B1FEF70EFF03B05DF8A8 +:1057F80004FB00BF00380240483900200074004014 +:10580800B4050020F0B583B0FAF736FEFEF70EFEB9 +:105818008D48FDF745FA8D48FDF742FA8C488D4BC7 +:105828001968FDF723FAFEF797FEFEF7FDF900F079 +:105838003BF9FEF749FC884C884B23602046FBF770 +:10584800A3FE0123E36000232361E361236240F2A6 +:105858000F33A360FE2363612046FBF7DDFD10B123 +:105868007F48FDF71DFA012005E07B48E02164220E +:105878001346FCF713F80028F7D1FEF745FDFEF7AD +:10588800B7FDFEF74DF8FEF72BF876484FF40051B8 +:105898000122FBF733FC744BB3F90020734BB3F9C7 +:1058A8000000801A724B1978FEF702FEFFF756FFC8 +:1058B800FEF7B2FEFDF7FAFC0120FDF7D3FF00204A +:1058C800FDF750FB0320FDF77DFC0120FDF78CFC64 +:1058D8004FF6FF700021FDF77DFC00207821C822DB +:1058E800FDF7A0FFFEF786F80124624B1C70FEF757 +:1058F8006DF9FFF7CFFE2046FFF78AFBFF20014630 +:10590800FEF73AFFFFF710F90020FFF781FBFEF7DB +:10591800EFFFFEF7B3FF584B18689988FBF7DCFBDD +:1059280010B14FF4784300E01F2300934FF49B70AD +:10593800002103221346FDF7FDFA504B1868998899 +:10594800FBF7CAFB10B14FF4784300E01F23009324 +:105958004FF49B70042103221346FDF7EBFA484BE2 +:105968001D689C8828462146FBF7B6FB10B14FF40A +:10597800784300E01F2300934FF49B700821032213 +:105988001346FDF7D7FA3F4B18689988FBF7A4FB35 +:1059980010B14FF4784300E01F2300934FF49B703D +:1059A8000C2103221346FDF7C5FA374B1F689E8862 +:1059B800364B18689988FBF78FFB02463846314604 +:1059C800FBF79CFB28462146FBF786FBF0B9012430 +:1059D8002F4B1C602F4B186899882246FBF78EFBCB +:1059E8002D4B186899882246FBF788FB2B4B1868C3 +:1059F80099880022FBF782FB294B186899880022B6 +:105A0800FBF77CFBC822274B1A607BE70024204B5E +:105A18001C60204B186899882246FBF76FFB1E4BC9 +:105A2800186899882246FBF769FB1C4B1868998807 +:105A38000122FBF763FB1A4B186899880122FBF7D0 +:105A48005DFB184B1C605DE758B900086CB900088D +:105A580084B900080C000020AC0700200058004062 +:105A680098B90008001002409C0500203E04002060 +:105A780088050020A9070020787D0008987D000887 +:105A8800A07D0008887D0008407D0008A87D0008EA +:105A980090050020807D0008007D0008087D000832 +:105AA800707D0008A00500202DE9F04387B0334C35 +:105AB8002046FCF72DFD00250095314B5A6C42F429 +:105AC80080525A645B6C03F480530093009B2D4B07 +:105AD8009A8801920226049602964FF00508CDF89E +:105AE80014800395186801A9FBF774F9264B9A8866 +:105AF8000192049602960395CDF81480186801A9BE +:105B0800FBF768F9214B9A880192049602950127C0 +:105B18000397CDF81480186801A9FBF75BF91C4BB3 +:105B2800B3F80480CDF80480049602970395059590 +:105B3800D3F80090484601A9FBF74CF9484641467E +:105B48003A46FBF7DBFA134B2360A5604FF48273E8 +:105B580063604FF4E063E360266167614FF40073AC +:105B6800A361E5612562A56265620723E3622046B9 +:105B7800FCF7D0FC07B0BDE8F08300BF4007002069 +:105B880000380240507D0008687D0008107D00083C +:105B9800607D00080030014084B008B50DF1080EA2 +:105BA8008EE80F001C9A138806491B0A0B7013888D +:105BB8004B70054802220123FCF7DAFDBDE80840D6 +:105BC80004B07047BC05002040070020704700BFA4 +:105BD800704700BFFEE700BFFEE700BFFEE700BF5B +:105BE800FEE700BFFEE700BF2DE9F043DFF8F080D5 +:105BF8008BB006460F4600F077F898F90030044657 +:105C08000D4601330BD03046394600F05DFA30B10D +:105C1800304639460022002300F0C8FE20B1204655 +:105C280029460BB0BDE8F0832A4B98F8004008904D +:105C38000193CDE90267CDE904679CB94FF0604450 +:105C4800254D3046394600220023CDE9064500F0AF +:105C580085FE002835D101230093684600F056FAE6 +:105C6800A8B910E04FF00008DFF8789030463946C0 +:105C780000220023CDE9068900F070FE98B90123BF +:105C8800022C0093E9D101F007FA2123036013489D +:105C980000F03EFACDE90601089BABB9DDE9060143 +:105CA8000BB0BDE8F08302239C42009304D0684601 +:105CB80000F02CFA0028EFD101F0EEF9222303605E +:105CC800EAE702230093F2E701F0E6F9089B036094 +:105CD800E4E700BFB4B90008FFFFEFC7A47B0008E2 +:105CE800660400200000F0FFB1F5801F0B462DE987 +:105CF800F04F064687B00F4656DA024621F00044B8 +:105D0800224300F0EF800029C0F26C810022D04BC2 +:105D180000F0BCFBCF4A0B4606460F466FF0350431 +:105D2800934245DCC3F31308CB481915CB4D4044C7 +:105D38000022A1F2FF31C94B00F480100C44454009 +:105D480004EB1054304645EA0807394600F0EAF9F2 +:105D580008F1020382468B46C3F313030022022B89 +:105D68002FDC002300F0FAFD002800F0C480002C8E +:105D780000F04181204600F023FB06460F46A0A311 +:105D8800D3E9002300F082FB04460D46304639462D +:105D98009DA3D3E9002300F079FB02460B46204679 +:105DA800294600F0C1F909E0AA4A00249342B9DD66 +:105DB8003046394632463B4600F0B6F907B0BDE8F2 +:105DC800F08F4FF08043A64D00F0AEF902460B4627 +:105DD80050465946454400F083FC06460F46204687 +:105DE800CDE9006700F0ECFA32463B46CDE9040104 +:105DF8003046394600F04AFB02460B46CDE90223FD +:105E080000F044FB06460F4681A3D3E9002300F0C7 +:105E18003DFB81A3D3E9002300F086F932463B46D7 +:105E280000F034FB7EA3D3E9002300F07DF932466D +:105E38003B4600F02BFB7CA3D3E9002300F074F968 +:105E4800DDE9022300F022FB79A3D3E90023CDE9A1 +:105E580002013046394600F019FB77A3D3E9002345 +:105E680000F062F932463B4600F010FB74A3D3E918 +:105E7800002300F059F932463B4600F007FB0B4679 +:105E88000246DDE9020100F04FF9764B06460F465F +:105E9800C8EB03031D43002D54DD0022724B50460E +:105EA800594600F0F3FA52465B4600F0EFFA804696 +:105EB8008946002C61D132463B4600F035F9DDE9D0 +:105EC800002300F0E3FA02460B464046494600F03C +:105ED80029F902460B465046594600F023F907B007 +:105EE800BDE8F08F002200230020604900F0F8FB95 +:105EF80007B0BDE8F08F52465B465046594600F061 +:105F0800C5FA06460F46504659464FA3D3E9002323 +:105F180000F0BCFA02460B460020534900F002F993 +:105F280002460B463046394600F0B0FA06460F46A0 +:105F3800002C40F09D805046594632463B4600F0C2 +:105F4800F1F83BE7002C00F0AB80DDE904892CA3D5 +:105F5800D3E900234046494600F098FA32463B46CA +:105F680004460D465046594600F0DCF8DDE90023AA +:105F780000F08CFA06460F4686E021A3D3E90023F9 +:105F8800DDE9040100F082FA32463B4604460D463C +:105F98004046494600F0C8F8DDE9002300F076FAEB +:105FA80006460F4618A3D3E90023DDE9040100F0F3 +:105FB8006DFA02460B463046394600F0B5F80246FF +:105FC8000B464046494600F0ADF852465B4600F0A5 +:105FD800A9F802460B462046294600F0A3F807B068 +:105FE800BDE8F08F02460B4600F09CF80022002323 +:105FF80000F076FBE2E600200021DFE6AFF3008048 +:106008000000E0FE422EE63F763C7935EF39EA3D66 +:1060180044523EDF12F1C23FDE03CB966446C73FCF +:10602800599322942449D23F935555555555E53FE8 +:106038009FC678D0099AC33FAF788E1DC571CC3FF3 +:1060480004FA97999999D93F555555555555D53FBE +:1060580000005043FFFFEF7F645F09000000F03F3E +:1060680086EBF9FF51B806000000E03F000050C37E +:10607800204600F0A5F9804689460FA3D3E90023FE +:1060880000F004FA04460D46404649460CA3D3E9FD +:10609800002300F0FBF902460B463046394692E7EA +:1060A80002460B465046594600F03CF8DDE900230D +:1060B80000F0ECF90DE700BF0000E0FE422EE63FDD +:1060C800763C7935EF39EA3DB0FA80F031F000419D +:1060D8004FEA501002D108B102207047A1F5801292 +:1060E800084B9A4201D804207047B1F5801F01D2AD +:1060F80003207047044B994214BF002000F00100B0 +:10610800704700BFFFFFDF7F0000F07F002070476F +:1061180000200149704700BF0000F87F81F000416E +:1061280002E000BF83F0004330B54FEA41044FEA74 +:10613800430594EA050F08BF90EA020F1FBF54EA0F +:10614800000C55EA020C7FEA645C7FEA655C00F0AB +:10615800E2804FEA5454D4EB5555B8BF6D420CDD7C +:106168002C4480EA020281EA030382EA000083EAFF +:10617800010180EA020281EA0303362D88BF30BD9F +:1061880011F0004F4FEA01314FF4801C4CEA1131F5 +:1061980002D0404261EB410113F0004F4FEA033354 +:1061A8004CEA133302D0524263EB430394EA050FDF +:1061B80000F0A780A4F10104D5F1200E0DDB02FA4E +:1061C8000EFC22FA05F2801841F1000103FA0EF2E2 +:1061D800801843FA05F359410EE0A5F120050EF1A8 +:1061E800200E012A03FA0EFC28BF4CF0020C43FAD9 +:1061F80005F3C01851EBE37101F0004507D54FF0E6 +:10620800000EDCF1000C7EEB00006EEB0101B1F535 +:10621800801F1BD3B1F5001F0CD349085FEA30007B +:106228004FEA3C0C04F101044FEA445212F5800F86 +:1062380080F09A80BCF1004F08BF5FEA500C50F123 +:10624800000041EB045141EA050130BD5FEA4C0C06 +:10625800404141EB010111F4801FA4F10104E9D18F +:1062680091F0000F04BF01460020B1FA81F308BF86 +:106278002033A3F10B03B3F120020CDA0C3208DD52 +:1062880002F1140CC2F10C0201FA0CF021FA02F12D +:106298000CE002F11402D8BFC2F1200C01FA02F19D +:1062A80020FA0CFCDCBF41EA0C019040E41AA2BFC2 +:1062B80001EB0451294330BD6FEA04041F3C1CDA8A +:1062C8000C340EDC04F11404C4F1200220FA04F0AA +:1062D80001FA02F340EA030021FA04F345EA030154 +:1062E80030BDC4F10C04C4F1200220FA02F001FA16 +:1062F80004F340EA0300294630BD21FA04F0294698 +:1063080030BD94F0000F83F4801306BF81F4801130 +:106318000134013D4EE77FEA645C18BF7FEA655CA3 +:1063280029D094EA050F08BF90EA020F05D054EA75 +:10633800000C04BF1946104630BD91EA030F1EBF7A +:106348000021002030BD5FEA545C05D1400049417E +:1063580028BF41F0004130BD14F580043CBF01F571 +:10636800801130BD01F0004545F0FE4141F4700157 +:106378004FF0000030BD7FEA645C1ABF1946104632 +:106388007FEA655C1CBF0B46024650EA013406BF33 +:1063980052EA033591EA030F41F4002130BD00BFF2 +:1063A80090F0000F04BF0021704730B54FF48064AF +:1063B80004F132044FF000054FF0000150E700BF30 +:1063C80090F0000F04BF0021704730B54FF480648F +:1063D80004F1320410F0004548BF40424FF000017C +:1063E8003EE700BF42004FEAE2014FEA31014FEABF +:1063F80002701FBF12F07F4393F07F4F81F060510E +:10640800704792F0000F14BF93F07F4F704730B57C +:106418004FF4607401F0004521F0004120E700BF0F +:1064280050EA010208BF704730B54FF000050AE096 +:1064380050EA010208BF704730B511F0004502D597 +:10644800404261EB41014FF4806404F132045FEA99 +:10645800915C3FF4DCAE4FF003025FEADC0C18BF3E +:1064680003325FEADC0C18BF033202EBDC02C2F134 +:10647800200300FA03FC20FA02F001FA03FE40EAC6 +:106488000E0021FA02F11444C1E600BF70B54FF0C6 +:10649800FF0C4CF4E06C1CEA11541DBF1CEA1355A8 +:1064A80094EA0C0F95EA0C0F00F0DEF82C4481EA10 +:1064B800030621EA4C5123EA4C5350EA013518BF30 +:1064C80052EA033541F4801143F4801338D0A0FB1D +:1064D80002CE4FF00005E1FB02E506F00042E0FBCA +:1064E80003E54FF00006E1FB03569CF0000F18BFD0 +:1064F8004EF0010EA4F1FF04B6F5007F64F5407478 +:1065080004D25FEA4E0E6D4146EB060642EAC6210A +:1065180041EA55514FEAC52040EA5E504FEACE2E77 +:10652800B4F1FD0C88BFBCF5E06F1ED8BEF1004F7A +:1065380008BF5FEA500E50F1000041EB045170BDF6 +:1065480006F0004646EA010140EA020081EA03013A +:10655800B4EB5C04C2BFD4EB0C0541EA045170BD36 +:1065680041F480114FF0000E013C00F3AB8014F1B0 +:10657800360FDEBF002001F0004170BDC4F10004F9 +:10658800203C35DA0C341BDC04F11404C4F120057A +:1065980000FA05F320FA04F001FA05F240EA0200D5 +:1065A80001F0004221F0004110EBD37021FA04F60B +:1065B80042EB06015EEA430E08BF20EAD37070BDC5 +:1065C800C4F10C04C4F1200500FA04F320FA05F024 +:1065D80001FA04F240EA020001F0004110EBD37026 +:1065E80041F100015EEA430E08BF20EAD37070BD96 +:1065F800C4F1200500FA05F24EEA020E20FA04F36F +:1066080001FA05F243EA020321FA04F001F000411D +:1066180021FA04F220EA020000EBD3705EEA430E8E +:1066280008BF20EAD37070BD94F0000F0FD101F0BD +:106638000046400041EB010111F4801F08BF013CF6 +:10664800F7D041EA060195F0000F18BF704703F034 +:106658000046520043EB030313F4801F08BF013DBB +:10666800F7D043EA0603704794EA0C0F0CEA135577 +:1066780018BF95EA0C0F0CD050EA410618BF52EA31 +:106688004306D1D181EA030101F000414FF0000037 +:1066980070BD50EA410606BF1046194652EA430645 +:1066A80019D094EA0C0F02D150EA013613D195EAB9 +:1066B8000C0F05D152EA03361CBF104619460AD101 +:1066C80081EA030101F0004141F0FE4141F470010B +:1066D8004FF0000070BD41F0FE4141F4780170BDFB +:1066E80070B54FF0FF0C4CF4E06C1CEA11541DBF60 +:1066F8001CEA135594EA0C0F95EA0C0F00F0A7F862 +:10670800A4EB050481EA030E52EA03354FEA01318E +:1067180000F088804FEA03334FF0805545EA1313A1 +:1067280043EA12634FEA022245EA111545EA106569 +:106738004FEA00260EF000419D4208BF964244F100 +:10674800FD0404F5407402D25B084FEA3202B61A1F +:1067580065EB03055B084FEA32024FF480104FF4F3 +:10676800002CB6EB020E75EB030E22BFB61A754667 +:1067780040EA0C005B084FEA3202B6EB020E75EBFA +:10678800030E22BFB61A754640EA5C005B084FEA62 +:106798003202B6EB020E75EB030E22BFB61A75462F +:1067A80040EA9C005B084FEA3202B6EB020E75EB3A +:1067B800030E22BFB61A754640EADC0055EA060EFB +:1067C80018D04FEA051545EA16754FEA06164FEA3E +:1067D800C30343EA52734FEAC2025FEA1C1CC0D1EA +:1067E80011F4801F0BD141EA00014FF000004FF077 +:1067F800004CB6E711F4801F04BF01430020B4F138 +:10680800FD0C88BFBCF5E06F3FF6AFAEB5EB030CEF +:1068180004BFB6EB020C5FEA500C50F1000041EBEC +:10682800045170BD0EF0004E4EEA113114EB5C04B9 +:10683800C2BFD4EB0C0541EA045170BD41F480118C +:106848004FF0000E013C90E645EA060E8DE60CEA94 +:10685800135594EA0C0F08BF95EA0C0F3FF43BAFB1 +:1068680094EA0C0F0AD150EA01347FF434AF95EA68 +:106878000C0F7FF425AF104619462CE795EA0C0F4C +:1068880006D152EA03353FF4FDAE1046194622E719 +:1068980050EA410618BF52EA43067FF4C5AE50EAF3 +:1068A80041047FF40DAF52EA43057FF4EBAE12E7E3 +:1068B8004FF0FF3C06E000BF4FF0010C02E000BFC4 +:1068C8004FF0010C4DF804CD4FEA410C7FEA6C5CA7 +:1068D8004FEA430C18BF7FEA6C5C1BD001B050EA4A +:1068E800410C0CBF52EA430C91EA030F02BF90EA35 +:1068F800020F0020704710F1000F91EA030F58BFF4 +:10690800994208BF90422CBFD8176FEAE37040F055 +:10691800010070474FEA410C7FEA6C5C02D150EAF3 +:10692800013C07D14FEA430C7FEA6C5CD6D152EAAE +:10693800033CD3D05DF8040B704700BF8446104673 +:1069480062468C461946634600E000BF01B5FFF772 +:10695800B7FF002848BF10F1000F01BD4DF808ED42 +:10696800FFF7F4FF0CBF012000205DF808FB00BF13 +:106978004DF808EDFFF7EAFF34BF012000205DF86D +:1069880008FB00BF4DF808EDFFF7E0FF94BF0120BA +:1069980000205DF808FB00BF4DF808EDFFF7CEFFBB +:1069A80094BF012000205DF808FB00BF4DF808EDFA +:1069B800FFF7C4FF34BF012000205DF808FB00BFCB +:1069C8004FEA410212F5001215D211D56FF478730F +:1069D800B3EB625212D94FEAC12343F0004343EAB2 +:1069E800505311F0004F23FA02F018BF404270478D +:1069F8004FF00000704750EA013005D111F0004017 +:106A080008BF6FF0004070474FF00000704700BFAC +:106A18004FEA4102B2F1E04324BFB3F5001CDCF1B8 +:106A2800FE5C0DD901F0004C4FEAC0024CEA5070F0 +:106A3800B2F1004F40EB830008BF20F0010070471F +:106A480011F0804F21D113F13872BCBF01F0004022 +:106A5800704741F480114FEA5252C2F11802C2F154 +:106A6800200C10FA0CF320FA02F018BF40F00100D5 +:106A78004FEAC1234FEAD32303FA0CFC40EA0C0087 +:106A880023FA02F34FEA4303CCE77FEA625307D1C4 +:106A980050EA01331EBF4FF0FE4040F440007047FB +:106AA80001F0004040F0FE4040F40000704700BF95 +:106AB80080F0004002E000BF81F0004142001FBFAB +:106AC8005FEA410392EA030F7FEA226C7FEA236CB4 +:106AD8006AD04FEA1262D2EB1363C1BFD2184140A9 +:106AE80048404140B8BF5B42192B88BF704710F03F +:106AF800004F40F4000020F07F4018BF404211F0E2 +:106B0800004F41F4000121F07F4118BF494292EA49 +:106B1800030F3FD0A2F1010241FA03FC10EB0C0075 +:106B2800C3F1200301FA03F100F0004302D5494202 +:106B380060EB4000B0F5000F13D3B0F1807F06D3AF +:106B480040084FEA310102F10102FE2A51D2B1F1A7 +:106B5800004F40EBC25008BF20F0010040EA03009C +:106B68007047490040EB000010F4000FA2F1010249 +:106B7800EDD1B0FA80FCACF1080CB2EB0C0200FAD3 +:106B88000CF0AABF00EBC25052421843BCBFD04021 +:106B98001843704792F0000F81F4000106BF80F49B +:106BA80000000132013BB5E74FEA41037FEA226C5E +:106BB80018BF7FEA236C21D092EA030F04D092F029 +:106BC800000F08BF0846704790EA010F1CBF00205D +:106BD800704712F07F4F04D1400028BF40F00040BA +:106BE800704712F100723CBF00F50000704700F0DA +:106BF800004343F0FE4040F4000070477FEA226201 +:106C080016BF08467FEA23630146420206BF5FEAD1 +:106C1800412390EA010F40F4800070474FF00003D1 +:106C280004E000BF10F0004348BF40425FEA000C98 +:106C380008BF704743F0964301464FF000001CE040 +:106C480050EA010208BF70474FF000030AE000BF96 +:106C580050EA010208BF704711F0004302D54042D4 +:106C680061EB41015FEA010C02BF84460146002046 +:106C780043F0B64308BFA3F18053A3F50003BCFA61 +:106C88008CF2083AA3EBC25310DB01FA02FC63440E +:106C980000FA02FCC2F12002BCF1004F20FA02F215 +:106CA80043EB020008BF20F00100704702F1200208 +:106CB80001FA02FCC2F1200250EA4C0021FA02F269 +:106CC80043EB020008BF20EADC7070474FF0FF0C6E +:106CD8001CEAD0521EBF1CEAD15392EA0C0F93EA69 +:106CE8000C0F6FD01A4480EA010C400218BF5FEA0B +:106CF80041211ED04FF0006343EA501043EA51117E +:106D0800A0FB01310CF00040B1F5000F3EBF490077 +:106D180041EAD3715B0040EA010062F17F02FD2A7B +:106D28001DD8B3F1004F40EBC25008BF20F001005E +:106D3800704790F0000F0CF0004C08BF49024CEA75 +:106D4800502040EA51207F3AC2BFD2F1FF0340EA07 +:106D5800C250704740F400004FF00003013A5DDC78 +:106D680012F1190FDCBF00F000407047C2F10002B9 +:106D7800410021FA02F1C2F1200200FA02FC5FEAA6 +:106D8800310040F1000053EA4C0308BF20EADC70F0 +:106D9800704792F0000F00F0004C02BF400010F462 +:106DA800000F013AF9D040EA0C0093F0000F01F00F +:106DB800004C02BF490011F4000F013BF9D041EA31 +:106DC8000C018FE70CEAD15392EA0C0F18BF93EA33 +:106DD8000C0F0AD030F0004C18BF31F0004CD8D15D +:106DE80080EA010000F00040704790F0000F17BFE4 +:106DF80090F0004F084691F0000F91F0004F14D02A +:106E080092EA0C0F01D142020FD193EA0C0F03D181 +:106E18004B0218BF084608D180EA010000F0004084 +:106E280040F0FE4040F40000704740F0FE4040F45F +:106E3800400070474FF0FF0C1CEAD0521EBF1CEAFE +:106E4800D15392EA0C0F93EA0C0F69D0A2EB03021C +:106E580080EA010C49024FEA402037D04FF08053B6 +:106E680043EA111143EA10130CF000408B4238BF7B +:106E78005B0042F17D024FF4000C8B4224BF5B1A89 +:106E880040EA0C00B3EB510F24BFA3EB510340EAD7 +:106E98005C00B3EB910F24BFA3EB910340EA9C0085 +:106EA800B3EBD10F24BFA3EBD10340EADC001B01F5 +:106EB80018BF5FEA1C1CE0D1FD2A3FF650AF8B4299 +:106EC80040EBC25008BF20F0010070470CF0004CA6 +:106ED8004CEA50207F32C2BFD2F1FF0340EAC250D1 +:106EE800704740F400004FF00003013A37E792F092 +:106EF800000F00F0004C02BF400010F4000F013AF0 +:106F0800F9D040EA0C0093F0000F01F0004C02BFEA +:106F1800490011F4000F013BF9D041EA0C0195E753 +:106F28000CEAD15392EA0C0F08D142027FF47DAFEC +:106F380093EA0C0F7FF470AF084676E793EA0C0FDC +:106F480004D14B023FF44CAF08466EE730F0004CDA +:106F580018BF31F0004CCAD130F000427FF45CAF6A +:106F680031F000437FF43CAF5FE700BF4FF0FF3CD8 +:106F780006E000BF4FF0010C02E000BF4FF0010C2B +:106F88004DF804CD4FEA40024FEA41037FEA226CF4 +:106F980018BF7FEA236C11D001B052EA530C18BF16 +:106FA80090EA010F58BFB2EB030088BFC81738BF7B +:106FB8006FEAE17018BF40F0010070477FEA226C69 +:106FC80002D15FEA402C05D17FEA236CE4D15FEA65 +:106FD800412CE1D05DF8040B704700BF8446084699 +:106FE8006146FFE70FB5FFF7C9FF002848BF10F15A +:106FF800000F0FBD4DF808EDFFF7F4FF0CBF01209F +:1070080000205DF808FB00BF4DF808EDFFF7EAFF28 +:1070180034BF012000205DF808FB00BF4DF808EDE3 +:10702800FFF7E0FF94BF012000205DF808FB00BFD8 +:107038004DF808EDFFF7D2FF94BF012000205DF85E +:1070480008FB00BF4DF808EDFFF7C8FF34BF01206B +:1070580000205DF808FB00BF42000ED2B2F1FE4FDF +:107068000BD34FF09E03B3EB126209D44FEA00230F +:1070780043F0004323FA02F070474FF000007047D6 +:1070880012F1610F01D1420202D14FF0FF30704777 +:107098004FF00000704700BF014B1868704700BFF1 +:1070A800C8040020431E0A4410B5914204D011F8C8 +:1070B800014B03F8014FF8E710BD00000EB44FF480 +:1070C800027100B59CB0ADF814106FF000411DAB13 +:1070D8000290049107914FF6FF7153F8042BADF815 +:1070E800161007490690086802A9019300F0AEF847 +:1070F8000022029B1A701CB05DF804EB03B07047C5 +:10710800C8040020034611F8012B03F8012B002ABC +:10711800F9D17047034613F8012B002AFBD1181A3E +:107128000138704730B5141E9BB0054604DA8B232E +:1071380003604FF0FF301CE04FF40272009104919D +:107148006946ADF80C2014BF04F1FF3222460292C2 +:1071580005924FF6FF72ADF80E201A461E9B00F0FE +:1071680075F8431CBCBF8B232B6014B10022009B15 +:107178001A701BB030BD000073B5064600930D466B +:107188001446044B31462A4618682346FFF7CAFFBF +:1071980002B070BDC80400202DE9F0478E68824611 +:1071A8000C469046B342994640D38A8912F4906FB0 +:1071B8003AD02568022309696F1A656905EB450508 +:1071C80095FBF3F57B1C4B449D4238BF1D46530588 +:1071D8000FD5294600F02EFB064698B121693A469C +:1071E800FFF760FFA38923F4906343F08003A38132 +:1071F80013E02A4600F074FB064670B95046216930 +:1072080000F0D4FA0C234FF0FF30CAF80030A389FD +:1072180043F04003A381BDE8F08726613E446561E1 +:10722800ED1B26604E46A560B14500D24E4632465B +:107238002068414600F09EFAA36800209B1BA360CB +:1072480023681E442660BDE8F08700002DE9F0435E +:107258009DB006460D46904603938B891C060CD5B7 +:107268000B6953B9402100F0E5FA2860286110B98C +:107278000C233360CCE040236B6100230993202367 +:107288008DF8293030238DF82A3043461C4613F8F0 +:10729800012B1AB9B4EB08090FD002E0252AF5D161 +:1072A800F8E73046294642464B46FFF775FF01305E +:1072B80000F0A980099B4B4409932378002B00F028 +:1072C800A28000234FF0FF3204F1010804930793D2 +:1072D800059206938DF853301A934446DFF8489187 +:1072E800052208F101084846217800F035FA049B88 +:1072F80030B1C9EB00000122824013430493ECE74C +:10730800D80644BF20228DF85320190744BF2B22EA +:107318008DF8532022782A2A02D0079923460EE0B6 +:10732800039A0134111D1268002A0391BBBF52420F +:1073380043F0020307920792B8BF04930AE01C4681 +:1073480001332278303A092A03D80A2000FB0121A8 +:10735800F5E7079123782E2B1AD163782A2B0AD1C7 +:10736800039B02341A1D1B68002B0392B8BF4FF011 +:10737800FF3305930CE0611C00220C460131237891 +:10738800303B092B03D80A2000FB0232F5E70592AF +:10739800DFF8988003222178404600F0DDF938B103 +:1073A800C8EB00004023049A01348340134304933C +:1073B80021780622194804F101088DF8281000F0F8 +:1073C800CBF988B1164B33B9039B073323F0070376 +:1073D8000833039313E003AB304604A92A4600930D +:1073E800104BAFF3008007E003AB304604A92A46F0 +:1073F80000930C4B00F092F8421C074603D0099BFF +:107408003B44099341E7AB895B0601D4099801E045 +:107418004FF0FF301DB0BDE8F08300BFC4B90008CD +:1074280000000000A1710008BAB90008C0B900083E +:107438002DE9F84391461F468A6806460B690C46B3 +:10744800DDF820809342B8BF1346C9F8003091F8A0 +:10745800432012B10133C9F800302368990642BFAE +:10746800D9F800300233C9F80030256815F0060550 +:107478001CD094F843302268003318BF01239206C9 +:107488001FD5E1185A1C30200233224481F84300EA +:1074980094F8451082F8431013E03046394604F159 +:1074A80019020123C047013007D00135E368D9F834 +:1074B80000209B1A9D42F0DBDBE74FF0FF30BDE870 +:1074C800F8833046394604F14302C0470130F4D00E +:1074D8002268D9F800504FF0000902F00602E3686C +:1074E800042A226908BF5D1BA36814BF002525EA8A +:1074F800E5759342C4BF9B1AED18A9450ADA3046D0 +:10750800394604F11A020123C0470130D5D009F1E8 +:107518000109F2E70020BDE8F88300002DE9FF41EA +:107528000C46174698460646227E43310A9B6E2A29 +:1075380000F0AF8012D8632A23D00AD8002A00F0BE +:10754800BC80582A40F0CB8084F84520DFF800E260 +:1075580057E0642A1ED0692A1CD0C0E0732A00F0C4 +:10756800B08009D86F2A2ED0702A40F0B8802268DF +:1075780042F0200222603FE0752A24D0782A3BD0CE +:10758800ADE01A6804F14205111D1960136884F80A +:107598004230A8E020681A6810F0800F02D0101D51 +:1075A800186008E010F0400F02F10400186002D0E3 +:1075B800B2F9003000E01368002B3EDA2D225B425E +:1075C80084F8432039E020681A6810F0800F02D050 +:1075D800101D186007E010F0400F02F10400186059 +:1075E80001D0138800E01368227EDFF864E16F2A77 +:1075F8000CBF08220A221CE07822DFF858E184F840 +:1076080045202268186812F0800F00F104051D60FB +:1076180003D1550601D5038800E00368D00744BFAD +:1076280042F0200222601BB9226822F02002226068 +:107638001022002084F8430002E0DFF814E10A2257 +:107648006568002DA560A2BF206820F004002060B6 +:1076580003B965B10D46B3FBF2F002FB10331EF817 +:10766800033005F8013D03460028F4D100E00D463B +:10767800082A0BD12368DA0708D5236962689A4279 +:10768800DEBF302305F8013C05F1FF35491B2161B8 +:107698002EE025681A6815F0800F606903D0151D63 +:1076A8001D60136808E015F0400F02F104051D6025 +:1076B800136801D0188000E0186000230D4623618C +:1076C80016E01A68111D19600021156862682846BD +:1076D80000F042F808B1401B6060636804E004F100 +:1076E800420584F8422001232361002384F84330B3 +:1076F800CDF800803046214603AA3B46FFF798FEA6 +:10770800013002D14FF0FF301FE0304639462A469B +:107718002369C0470130F5D023689B0705D4E0688A +:10772800039B9842B8BF18460FE00025E368039A08 +:107738009B1A9D42F3DA3046394604F119020123B7 +:10774800C0470130DED00135F0E704B0BDE8F08174 +:10775800CBB90008DCB90008C9B2024410B59042A0 +:10776800034605D01C7801308C42F8D1184610BD6C +:10777800002010BD814201EB020310B501D3421E67 +:107788000BE09842FBD28118D21AD34204D013F8E6 +:10779800014D01F8014DF8E710BD994204D011F8E8 +:1077A800014B02F8014FF8E710BD000030B5002981 +:1077B8003DD051F8042C0B1F1D49002A0C46B8BFB8 +:1077C8009B180A6812B95A600B6030BD93420DD2FB +:1077D80019685818904201BF5A5852181A604268DE +:1077E80023605A6030BD994203D80A46516800297F +:1077F800F9D1146815199D420AD11B682344D01881 +:107808001360884213D10868034413604B680DE085 +:1078180002D90C23036030BD1C681819884202BFC6 +:10782800086849680019596008BF1860536030BD7E +:10783800C405002070B5CC1C064624F003040834A7 +:107848000C2C38BF0C24002C03DA0C2300203360E6 +:1078580070BD8C42F9D3204A136810461946A1B16D +:107868000A68121B0ED40B2A03D90A608B188C5095 +:107878001FE08B420BBF5A684A6802605A6018BF03 +:107888000B4616E00B464968E9E7144D2B681BB90F +:10789800304600F04BF828603046214600F046F8A4 +:1078A800421C0346D1D0C51C25F0030585420AD1E8 +:1078B8001C6003F10B001A1D20F00700821A0AD081 +:1078C8005142995070BD3046E91A00F02FF8013046 +:1078D800BBD02B46ECE770BDC4050020C0050020D6 +:1078E800F8B5074615460E4621B91146BDE8F840D9 +:1078F800FFF7A0BF1AB9FFF759FF2846F8BD00F0F7 +:1079080025F8A8420ED238462946FFF793FF0446C9 +:1079180050B131462A46FFF7C5FB38463146FFF7D6 +:1079280045FF01E03046F8BD2046F8BD38B50023D4 +:10793800054C054608462360FBF762F9431C02D153 +:10794800236803B12B6038BDC805002051F8040C2A +:107958000028BEBF091851F8043CC0180438704705 +:107968002E2E2F73797374656D2F7372632F737452 +:107978006D333266372D68616C2F73746D333266E0 +:107988003778785F68616C5F6164632E630000001C +:107998002E2E2F73797374656D2F7372632F737422 +:1079A8006D333266372D68616C2F73746D333266B0 +:1079B8003778785F68616C5F636F727465782E637F +:1079C800000000002E2E2F73797374656D2F73726B +:1079D800632F73746D333266372D68616C2F73743F +:1079E8006D3332663778785F68616C5F6461632EE7 +:1079F800630000002E2E2F73797374656D2F7372D8 +:107A0800632F73746D333266372D68616C2F73740E +:107A18006D3332663778785F68616C5F6770696F5D +:107A28002E6300002E2E2F73797374656D2F737279 +:107A3800632F73746D333266372D68616C2F7374DE +:107A48006D3332663778785F68616C5F6932632EB0 +:107A580063000000000000000102030401020304A7 +:107A6800060708092E2E2F73797374656D2F7372AC +:107A7800632F73746D333266372D68616C2F73749E +:107A88006D3332663778785F68616C5F7263632E36 +:107A9800630000002E2E2F73797374656D2F737237 +:107AA800632F73746D333266372D68616C2F73746E +:107AB8006D3332663778785F68616C5F7370692EF2 +:107AC800630000002E2E2F73797374656D2F737207 +:107AD800632F73746D333266372D68616C2F73743E +:107AE8006D3332663778785F68616C5F74696D2EC4 +:107AF8006300000061626F727428292C2065786920 +:107B080074696E672E2E2E002C2066756E6374695C +:107B18006F6E3A2000000000617373657274696FBC +:107B28006E2022257322206661696C65643A20669E +:107B3800696C6520222573222C206C696E652025CE +:107B480064257325730A00006173736572745F702E +:107B58006172616D2829206661696C65643A2066E6 +:107B6800696C6520222573222C206C696E6520259E +:107B7800640A00006D61696E28617267633D25645F +:107B88002C20617267763D5B000000002C2000000D +:107B980022257322000000005D293B0A0000000036 +:107BA800537461636B206672616D653A0A00000068 +:107BB800205230203D2020253038580A000000008F +:107BC800205231203D2020253038580A000000007E +:107BD800205232203D2020253038580A000000006D +:107BE800205233203D2020253038580A000000005C +:107BF80020523132203D20253038580A000000003C +:107C0800204C52203D2020253038580A0000000022 +:107C1800205043203D2020253038580A000000001D +:107C280020505352203D20253038580A00000000CB +:107C38004653522F4641523A0A0000002043465309 +:107C480052203D2020253038580A0000204846534D +:107C580052203D2020253038580A00002044465341 +:107C680052203D2020253038580A00002041465334 +:107C780052203D2020253038580A0000204D4D461E +:107C88004152203D20253038580A00002042464104 +:107C980052203D2020253038580A00004D69736372 +:107CA8000A000000204C522F4558435F5245545556 +:107CB800524E3D20253038580A0000005B4861725A +:107CC800644661756C745D0A000000005B42757360 +:107CD8004661756C745D0A005B5573616765466142 +:107CE800756C745D0A0000000000000000000000D0 +:107CF8000102030406070809000002400100000011 +:107D08000010024040000000000402401000000083 +:107D18000010024002000000000402404000000081 +:107D2800000402400002000000040240002000009D +:107D3800000402400008000000100240002000007B +:107D4800001002400100000000040240080000008A +:107D58000004024080000000000002400080000093 +:107D6800000402402000000000100240080000004B +:107D7800000C02402000000000100240100000002B +:107D8800000C0240800000000010024020000000AB +:107D9800000C024040000000000C024008000000F7 +:107DA8000010024080000000000402400080000033 +:107DB800000402400004000000000000EF7BFFFF09 +:107DC800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:107DD800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:107DE800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:107DF800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:107E0800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:107E1800EF7B000000000000FFFFFFFFFFFFFFFFF8 +:107E2800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:107E3800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:107E4800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:107E5800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:107E6800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:107E7800FFFF0000EF7BFFFF30FE00000000000066 +:107E8800000000003C5514FF00500A001FA730FEF8 +:107E980000000A001FA7FFFFFFFFFFFF00C400004C +:107EA80000000000000000000000180414FF00504B +:107EB800000000000000000000003F86F8FF00807E +:107EC800000000000000000000003C55FFFFFFFF1D +:107ED800EF7BFFFFFFFF30FE000000000000000006 +:107EE80000003C5514FF00500A001FA730FE000098 +:107EF8000A001FA7FFFFFFFFFFFF00C400000000EC +:107F08000000000000000000180414FF00500000EA +:107F180000000000000000003F86F8FF008000001D +:107F280000000000000000000A001FA7FFFFFFFF7D +:107F3800FFFFFFFF30FE00000A001FA7FFFFFFFF43 +:107F4800FFFF14FF00500A001FA730FE00000A00C0 +:107F58001FA7FFFFFFFFFFFFFFFFFFFF14FF0050FA +:107F68000A001FA7FFFFFFFF14FF005000003F8615 +:107F7800FFFFFFFFFFFFFFFFF8FF008000003C55F9 +:107F8800FFFF14FF005000003F86FFFFFFFFFFFFC9 +:107F9800FFFF30FE00000000000000001000FFC7D7 +:107FA80014FF00500A001FA730FE00000A001FA798 +:107FB800FFFFFFFFFFFFFFFFFFFF14FF00500A0056 +:107FC8001FA7FFFFFFFF14FF005000000000000084 +:107FD80000000A001FA7F8FF008000000000000052 +:107FE800000000001000FFC7FFFFFFFFFFFFFFFFBB +:107FF80030FE00000000000000001000FFC714FF62 +:1080080000500A001FA730FE00000A001FA7FFFF4C +:10801800FFFFFFFFFFFFFFFF14FF00500A001FA72D +:10802800FFFFFFFF14FF00500000000000000000E9 +:108038000A001FA7F8FF00800000000000000000F1 +:10804800B402FFE7FFFFFFFFFFFFFFFFFFFF30FE68 +:1080580000000A001FA7FFFFFFFFFFFF14FF0050EB +:108068000A001FA730FE00000A001FA7FFFFFFFF3E +:10807800FFFFFFFFFFFF14FF00500A001FA7FFFFCD +:10808800FFFF14FF005000003F86FFFFFFFFFFFFC8 +:10809800FFFFF8FF008000003C5530FE00000000A4 +:1080A8003C55FFFFFFFFFFFFFFFFFFFF30FE000013 +:1080B8000A001FA7FFFFFFFFFFFF14FF00500A0081 +:1080C8001FA730FE00000000000000000000180498 +:1080D800FFFFFFFF14FF00500A001FA7FFFFFFFF6D +:1080E80014FF0050000000000000000000003C5594 +:1080F800F8FF008000003C55FCFFA0A200000A0029 +:108108001FA7FFFFFFFFEF7BFFFF30FE00000A0005 +:108118001FA7FFFFFFFFFFFF14FF00500A001FA764 +:1081280030FE000000000000000000001804FFFFFF +:10813800FFFF14FF00500A001FA7FFFFFFFF14FFF7 +:108148000050000000000000000000003C55F8FF4F +:10815800008000003C55FFFF14FF00500000B402EF +:10816800FFFFEF7B0000FFFFFFFFFFFFFFFFFFFFA9 +:10817800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:10818800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:10819800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:1081A800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:1081B800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:1081C800000000000000EF7BFFFFFFFFFFFFFFFF45 +:1081D800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:1081E800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:1081F800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:10820800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:10821800FFFFFFFFFFFFFFFFFFFFEF7B00000000F6 +:108228003C55FFFFFFFFFFFFFFFFFFFFFFFF2AE5B2 +:108238003C55FFFFFFFFFFFFFFFFFFFFFFFF2AE5A2 +:1082480000000000000000003C55FFFF30FE000069 +:10825800000000000000B402FFE7F8FF0080000003 +:10826800000000000A001FA7FFFF2AE50000000029 +:1082780000000000B402FFE7F8FF008000000000E3 +:10828800000000003C55FFFF14FF005000000000F4 +:1082980000000A001FA7FFFF2AE5000000000000F9 +:1082A80000001000FFC7FFFF00C40000000000002E +:1082B800070009000A000B000C000D000D000E005D +:1082C8000E100F180F20102010281128113011300F +:1082D8001138114012481250125812601260126878 +:1082E80012681270127812801288129012901290EE +:1082F8001298139813A013A012A011A811B012B0CD +:1083080012B011B811B830C030B850C08FC08FC08B +:108318008FC08FC0AEC8CDC8CDC80CC92CD14AD922 +:1083280069D187D186D1C5D9C3D9E2D902DA21E288 +:1083380041E260E260E2A0E2A0EAA0E2C0E2E0EA94 +:10834800E0EA00EB20EB40F360F380EB80EB80F396 +:10835800C0F3E0F300F420F420F440F460FC80FC67 +:10836800C0FCC0FCE0FCE0FC00FD40FD60FD80FDC1 +:1083780060F580F5C0F5E0F500FE20F640F620F641 +:1083880040F660F6A1FEA1FEA2F6C3FEE4FEE5F605 +:1083980006F728FF29FF2AFF2BF74EFF90FF92FFD1 +:1083A80093FF95F797F7B8FFB9F7BAF7DCFFDEFF49 +:1083B80000000000000000000C00FFB7FFFFFFFFF7 +:1083C800FFFFFBFFC091000000000000000000005C +:1083D800000000009B3CFFFFFFFFFFFFFFFFFFFFC8 +:1083E800FFFFFFFFD2FE0038000000000000000081 +:1083F8009B3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10840800FFFFFFFFACFD0000000000000C00FFB7FD +:10841800FFFFFFFFFBFFC09100000700DF96FFFF93 +:10842800FFFFFFFF20B3000000003603FFFFFFFF40 +:10843800FFFF20B3000000000000D201FFDFFFFFB4 +:10844800FFFFACFD000000003603FFFFFFFFFBFF4E +:10845800C0910000000000000700DF96FFFFFFFF4B +:10846800ACFD000000003603FFFFFFFFFFFF20B355 +:108478000000000000000C00FFB7FFFFFFFFACFD8D +:10848800000000000C00FFB7FFFFFFFFFBFFC091DB +:1084980000000700DF96FFFFFFFFFFFF20B300008B +:1084A800000000009B3CFFFFFFFFFFFFFFFFFFFFF7 +:1084B800FFFFFFFFFFFFFFFFD2FE003800000000B4 +:1084C800000000009B3CFFFFFFFFFFFFFFFFFFFFD7 +:1084D800FFFFFFFFFFFF20B30000000000000000C7 +:1084E800000000000C00FFB7FFFFFFFFFFFFFFFFCA +:1084F800FFFFACFD000000000000000000000000CD +:108508000000000000000000BF65FFFFFFFFFBFF49 +:10851800C091000000000000000000000000000002 +:10852800000000003603FFFFFFFFFFFFACFD000067 +:108538000000000000000000000000000000000033 +:108548000700DF96FFFFFFFFFBFFC0910000000060 +:1085580000000000000000000000000000003603DA +:10856800FFFFFFFFFFFFACFD000000000000000060 +:10857800000000000000000000000700DF96FFFF79 +:10858800FFFFFBFFC091000000000000000000009A +:1085980000000000000000003603FFFFFFFFFFFFA0 +:1085A80087DC000000000000000000000000000060 +:1085B800000000000700DF96FFFFFFFFF6FF0060E6 +:1085C80000000000000000000000000000000000A3 +:1085D8000000000000000700DF9687DC00000000B4 +:1085E8000000000000000000000000000000000083 +:1085F800EF7BFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:10860800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:10861800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:10862800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:10863800FFFFFFFFFFFFEF7B000000000000FFFFD0 +:10864800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:10865800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:10866800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:10867800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:10868800FFFFFFFFFFFFFFFFFFFF0000EF7BFFFF84 +:10869800ACFD000000000C00FFB7F6FF0060000012 +:1086A8000000BF65FFFFFFFF20B3000000000000CF +:1086B800D201FFDFFFFFF6FF0060000000000000AE +:1086C8000000D201FFDFFFFFD2FE003800000000EB +:1086D800000000000000BF65FFFFEF7BFFFFFFFF0A +:1086E800ACFD000000000700DF96D2FE0038000055 +:1086F8000000BF65FBFFC091000000000000000003 +:108708000000D201FFDFF6FF00600000000000005B +:1087180000000000D201FFDFD2FE00380000000098 +:10872800000000000000BF65FFFFFFFFFFFFFFFF25 +:10873800ACFD0000000000009B3CACFD0700C03908 +:108748000000BF65ACFD00000000BF65FFFFACFD89 +:1087580000000000BF65F6FF006000009B3CFFFFC3 +:10876800ACFD00000700DF96D2FE00380000BF65B0 +:10877800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:10878800ACFD0000CC01C061360320B30C002063AF +:108798000000BF6587DC00000C00FFB7FFFFFBFF90 +:1087A800C09100009B3CF6FF006000009B3CFFFF6F +:1087B800F6FF00600000BF65D2FE00380000000030 +:1087C800000000000700DF96FFFFFFFFFFFFFFFF2D +:1087D800ACFD0000D20120930700C039360320B356 +:1087E8000000BF6587DC00000C00FFB7FFFFFBFF40 +:1087F800C09100009B3CF6FF006000009B3CFFFF1F +:10880800F6FF00600000BF65D2FE003800000000DF +:10881800000000000700DF96FFFFFFFFFFFFFFFFDC +:10882800ACFD0000D20187B4000000009B3C20B3DF +:108838000000BF65ACFD00000000BF65FFFFACFD98 +:1088480000000000BF65F6FF006000009B3CFFFFD2 +:10885800ACFD00000000BF65D2FE00380000BF6517 +:10886800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10887800ACFD0000D201D2DE00380000BF6520B395 +:108888000000BF65FBFFC091000000000000000071 +:108898000000D201FFDFF6FF0060000000000000CA +:1088A80000000000D201FFDFD2FE00380000000007 +:1088B8000000000000009B3CFFFFFFFFEF7BFFFF75 +:1088C800ACFD0000D201F6DF00600C00FFB720B35A +:1088D8000000BF65FFFFFFFF20B30000000000009D +:1088E800D201FFDFFFFFF6FF00600000000000007C +:1088F8000000D201FFDFFFFFD2FE003800000000B9 +:108908000000000000009B3CFFFFEF7B0000FFFF22 +:10891800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:10892800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:10893800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:10894800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:10895800FFFFFFFFFFFFFFFFFFFF00000000000019 +:10896800EF7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:10897800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10898800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10899800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:1089A800FFFFFFFFFFFFEF7B000000000000360322 +:1089B800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:1089C800FFFFFFFFFFFFFBFFC09100003603FFFF23 +:1089D800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:1089E800FFFFFFFFFBFFC09100003603FFFFFFFF03 +:1089F800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:108A0800FFFFD2FE00380000000000000000000058 +:108A180000000000000000009B3CFFFFFFFFFFFF7D +:108A280020B300000000000000000000000000006B +:108A3800000000000C00FFB7FFFFFFFFD2FE003868 +:108A4800000000000000000000000000000000001E +:108A580000009B3CFFFFFFFFFFFF20B3000000006A +:108A680000000000000000000000000000000C00F2 +:108A7800FFB7FFFFFFFFD2FE003800000000000034 +:108A88000000000000000000000000009B3CFFFF09 +:108A9800FFFFFFFF20B300000000000000000000FF +:108AA8000000000000000000D201FFDFFFFFFFFF11 +:108AB800D2FE0038000000000000000000000000A6 +:108AC800000000000000BF65FFFFFFFFFFFF20B3AD +:108AD800000000000000000000000000000000008E +:108AE8000000D201FFDFFFFFFFFFD2FE00380000C9 +:108AF800000000000000000000000000000000006E +:108B0800BF65FFFFFFFFFFFF20B30000000000006C +:108B1800000000000000000000000000D201FFDF9C +:108B2800FFFFFFFFD2FE0038000000000000000039 +:108B380000000000000000000000BF65FFFFFFFF0D +:108B4800FFFF20B30000000000000000000000004C +:108B5800000000000000D201FFDFFFFFFFFFD2FE90 +:108B680000380000000000000000000000000000C5 +:108B780000000000BF65FFFFFFFFFFFF20B30000FC +:108B880000000000000000000000000000000000DD +:108B9800D201FFDFFFFFFFFFD2FE00380000000018 +:108BA8000000000000000000000000000000BF6599 +:108BB800FFFFFFFFFFFF20B30000000000000000E0 +:108BC800000000000000000000000000000000009D +:108BD8009B3CD2FE003800000000000000000000AE +:108BE800000000000000000000000000000000007D +:108BF800000000000000000000000000000000006D +:108C0800000000000000000000000000000000005C +:108C1800000000000000000000000000000000004C +:108C28000000000000000000000000001FA7FFFF78 +:108C3800FFFF14FF00500000000000001FA7FFFF07 +:108C4800FFFF14FF005000000000000000000000BB +:108C5800000000000000000000000000000000000C +:108C680000000000000000000000000000000000FC +:108C780000000000000000000000000000000000EC +:108C880000000000000000000000000000000000DC +:108C980000000000000000000000000000000000CC +:108CA80000000000000000000000000000000000BC +:108CB80000000000000000000000000000000000AC +:108CC800000000000000000000000000000000009C +:108CD800000000000000000000000000000000008C +:108CE800000000000000000000000000000000007C +:108CF800000000000000000000000000000000006C +:108D0800000000000000000000000000000000005B +:108D1800000000000000000000000000000000004B +:108D2800000000000000000000000000000000003B +:108D3800000000000000000000000000000000002B +:108D4800000000000000000000000000000000001B +:108D5800000000000000000000000000000000000B +:108D680000000000000000000000000000000000FB +:108D780000000000000000000000000000000000EB +:108D880000000000000000000000000000000000DB +:108D980000000000000000000000000000000000CB +:108DA80000000000000000000000000000000000BB +:108DB80000000000000000000000000000000000AB +:108DC800000000000000000000000000000000009B +:108DD800000000000000000000000000000000008B +:108DE800000000000000000000000000000000007B +:108DF800000000000000000000000000000000006B +:108E0800000000000000000000000000000000005A +:108E1800000000000000000000000000000000004A +:108E2800000000000000000000000000000000003A +:108E3800000000000000000000000000000000002A +:108E4800000000000000BF65FFFFFBFFC0910000AD +:108E5800000000000000000000000000000000000A +:108E68000000D201FFDFFFFFFFFFD2FE0038000045 +:108E780000000000000000000000000000000000EA +:108E8800D201FFDFFFFFFFFFD2FE00380000000025 +:108E980000000000000000000000000000000000CA +:108EA8009B3CFFFFFBFFC09100000000000000009A +:108EB80000000000000000000000000000000000AA +:108EC8000700DF96FFFFFBFFC09100000000D20102 +:108ED800FFDFFFFFFFFF20B300003603FFFFFFFFA8 +:108EE800FBFFC0910000000000000000000000002F +:108EF8000000000000000000D201FFDFFFFFFFFFBD +:108F080087DC00000000D201FFDFFFFFFFFF87DCE6 +:108F180000009B3CFFFFFFFFFBFFC091000000002B +:108F28000000000000000000000000000000000039 +:108F3800BF65FFFFFFFFFFFFD2FE00380000D20130 +:108F4800FFDFFFFFFFFFD2FE0038BF65FFFFFFFF17 +:108F5800FBFFC091000000000000000000000000BE +:108F68000000000000000C00FFB7FFFF2CB3FFB7A4 +:108F7800FBFFC0910000D201FFDFFBFFDFDEF6FF41 +:108F88000C60FFB7DBFEFFDFFBFFC09100000000B5 +:108F98000000000000000000000000000000360390 +:108FA800FFFFF6FF0760DF96FFFF87DC0000D201B6 +:108FB800FFDFF6FF9B94FFFF92B4FFDF92DCFFB761 +:108FC800FBFFC0910000000000000000000000004E +:108FD800000000000000BF65FFFFD2FE00389B3C88 +:108FE800FFFFD2FE0038D201FFDFF6FF3663FFFF36 +:108FF800FFFFFFFF2CB3FFB7FBFFC091000000008D +:10900800000000000000000000000000D201FFDFA7 +:10901800FFFFFFFFFFFFFFFFFFFFFBFFC091D20134 +:10902800FFDFF6FF0C60FFB7FFFFFBFFCC91FFB738 +:10903800FBFFC091000000000000000000000000DD +:10904800000000009B3CFFFFFFFFFFFFFFFFFFFF4B +:10905800FFFFFFFF87DCD201FFDFF6FF0760DF9627 +:10906800FFFFD2FE0C38FFB7FBFFC09100000000E5 +:10907800000000000000000000000000DF96FFFF75 +:10908800D2FE003800000700DF96FFFFF6FFD2612E +:10909800FFDFF6FF0060BF65FFFFACFD0C00FFB708 +:1090A800FBFFC091000000000000000000000A0063 +:1090B8001FA7FFFFFFFFFFFF00C400000A001FA754 +:1090C800FFFFFFFFFFFFFFFFFCFFA0A21804FFFF49 +:1090D800FFFF00C400000000000000003C55FFFF37 +:1090E800F8FF3CA5FFFFFFFF00C400003C55FFFF51 +:1090F800FFFFFFFFFFFFFFFFFCFFA0A23C55FFFFA4 +:10910800FCFFA0A20A001FA7FFFF2AE51804FFFF23 +:10911800FCFFA0A20A001FA7FFFF2AE50A001FA75D +:10912800FFFFFFFFFFFFFFFFFCFFA0A200000A00F8 +:109138001FA7FFFFFFFFFFFF00C4000000000000A3 +:10914800000000000000000000000000BF65FFFFF5 +:10915800FFFFFFFF87DC00000000000000000000A8 +:1091680000000000000000003603FFFFFFFFFFFFC4 +:10917800FFFF87DC00000000000000000000000086 +:10918800000000000C00FFB7FFFFFFFFFFFFFFFF1D +:1091980087DC000000000000000000000000000064 +:1091A8000000BF65FFFFFFFFFFFFFFFFFFFF87DC3A +:1091B800000000000000000000000000000036036E +:1091C800FFFFFFFFFFFFFFFFFFFFFFFF87DC000040 +:1091D800000000000000000000000C00FFB7FFFFC7 +:1091E800FFFFFFFFFFFFFFFFFFFF87DC000000001E +:1091F8000000000000000700DF96FFFFFFFFFFFFF1 +:1092080092B4FFDFFFFFFFFF87DC000000000000D3 +:10921800000000009B3CFFFFFFFFFFFFACFDD201F9 +:10922800FFDFFFFFFFFF87DC0000000000000000F9 +:10923800D201FFDFFFFFFFFFF6FF0060D201FFDF73 +:10924800FFFFFFFF87DC0000000000000700DF963B +:10925800FFFFFFFFFBFFC0910000D201FFDFFFFF10 +:10926800FFFF87DC0000000000009B3CFFFFFFFFC2 +:10927800FFFF87DC00000000D201FFDFFFFFFFFFD8 +:1092880087DC00000000D201FFDFFFFFFFFFD2FEF6 +:10929800003800000000D201FFDFFFFFFFFF87DC7E +:1092A800000000009B3CFFFFFFFFFFFFFFFFFFFFE9 +:1092B800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFBA +:1092C800C0919B3CFFFFFFFFFFFFFFFFFFFFFFFF7A +:1092D800FFFFFFFFFFFFFFFFFFFFFFFFFBFFC09147 +:1092E8009B3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:1092F800FFFFFFFFFFFFFFFFFFFFFBFFC091000025 +:109308000000000000000000000000000000D20182 +:10931800FFDFFFFFFFFF87DC000000000000000008 +:10932800000000000000000000000000D201FFDF84 +:10933800FFFFFFFF87DC00000000000000000000C6 +:1093480000000000000000000000D201FFDFFFFF66 +:10935800FFFF87DC000000000000000000000000A4 +:109368000000000000000000D201FFDFFFFFFFFF48 +:1093780087DC0000000000000000B402FFE7FFFFE8 +:10938800FFFFF8FF008000001000FFC7FFFFFFFF8E +:10939800FFFFFFFF14FF00501804FFFFF8FF0080D5 +:1093A8001804FFFFF8FF0080000000000000000024 +:1093B8003C55FFFF14FF00500000000000003F86EE +:1093C800FFFFFCFFA0A2000000000000000000005A +:1093D8001000FFC7FFFF00C43C55FFFFF8FF0080E7 +:1093E8001000FFC7FFFF2AE51000FFC7FFFFFFFFC0 +:1093F800FFFFFFFFFCFFA0A20000B402FFE7FFFF92 +:10940800FFFFFCFFA0A200000000B402FFE7FFFF7F +:10941800FFFFFCFFA0A20000B402FFE7FFFFFFFF71 +:10942800FFFFFFFFFCFFA0A2B402FFE7F8FF0080E8 +:109438001000FFC7FCFFA0A20A001FA7FFFFFFFF45 +:10944800FFFFFFFF30FE00000A001FA7FFFFFFFF1E +:10945800FFFFFFFF14FF00503C55FFFFF8FF00809F +:109468001000FFC7FFFF00C43C55FFFFF8FF008056 +:109478001000FFC7FFFF2AE5B402FFE7FFFFFFFF69 +:10948800FFFFFFFFFCFFA0A200001804FFFFFFFF83 +:10949800FFFFFFFF00C40000000000000000000004 +:1094A800D201FFDFFFFFFFFFFFFFFBFFC0910000BE +:1094B800000000000000000000000700DF96FFFF2A +:1094C800FFFFFFFFFFFFFFFFFFFFFFFFACFD0000F7 +:1094D8000000000000000700DF96FFFFFFFFFFFF0E +:1094E800FFFFFFFFFFFFFFFFFFFFFFFF87DC00001D +:1094F800000000003603FFFFFFFFFFFFD2FE003829 +:1095080000000C00FFB7FFFFFFFFFBFFC09100004A +:109518000000BF65FFFFFFFFF6FF006000000000CE +:1095280000003603FFFFFFFFFFFF20B30000070026 +:10953800DF96FFFFFFFFD2FE0038000000000000AA +:10954800D201FFDFFFFFFFFF87DC00000000000003 +:109558000000000000000000000000000000D20130 +:10956800FFDFFFFFFFFF87DC0000000000000000B6 +:10957800000000000000000000000000BF65FFFFC1 +:10958800FFFFFBFFC091000000000000000000008A +:109598000000000000000000D201FFDFFFFFFFFF16 +:1095A800D2FE0038000000000000000000000000AB +:1095B800000000000C00FFB7FFFFFFFFFFFF20B314 +:1095C8000000000000000000000000000000000093 +:1095D8000700DF96FFFFFFFFFFFFD2FE0038000005 +:1095E8000000000000000000000000000700DF96F7 +:1095F800FFFFFFFFFFFFF6FF006000000000000014 +:1096080000000000000000000700DF96FFFFFFFFDA +:10961800FFFFFBFFC09100000000000000000000F9 +:10962800000000000700DF96FFFFFFFFFFFFFFFFBE +:1096380020B300000000000000000000000000004F +:109648000000BF65FFFFFFFFFFFFFFFF20B3000023 +:109658000000000000000000000000000000BF65DE +:10966800FFFFFFFFFFFFFFFF20B300000000000027 +:1096780000000000000000000000BF65FFFFFFFFC2 +:10968800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:10969800FFFFACFD00009B3CFFFFFFFFFFFFFFFF4C +:1096A800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:1096B800ACFD00009B3CFFFFFFFFFFFFFFFFFFFF2C +:1096C800FFFFFFFFFFFFFFFFFFFFFFFFFFFFACFDF7 +:1096D800000000000000000000000000D201FFDFD1 +:1096E800FFFFFFFFFFFFFBFFC0910000000000002D +:1096F8000000000000000000BF65FFFFFFFFFFFF44 +:10970800FFFFFFFFFFFFFFFFACFD000000000000B0 +:10971800000000009B3CFFFFFFFFFFFFFFFFFFFF74 +:10972800FFFFFFFFFFFFFFFF87DC000000000000D6 +:109738000C00FFB7FFFFFFFFFBFFC0910000D20145 +:10974800FFDFFFFFFFFFF6FF006000000000D2010F +:10975800FFDFFFFFFFFF87DC0000000000009B3CED +:10976800FFFFFFFFFBFFC091000000003603FFFF73 +:10977800FFFFFFFF20B30000000000003603FFFFDB +:10978800FFFFFFFF20B300000000D201FFDFFFFF53 +:10979800FFFF87DC0000000000009B3CFFFFFFFF8D +:1097A800FBFFC091000000000700DF96FFFFFFFFEE +:1097B800FBFFC0910000D201FFDFFFFFFFFFD2FED9 +:1097C8000038000000000000D201FFDFFFFFFFFFAC +:1097D800FFFFFFFFFFFFFFFFFFFFFBFFC091000040 +:1097E8000000000000000700DF96FFFFFFFFFFFFFB +:1097F800FFFFFFFFFFFFFFFFD2FE00380000000061 +:1098080000000C00FFB7FFFFFFFFFFFFFFFFFFFF98 +:10981800FFFFFFFFFFFFFFFFF6FF006000000000F3 +:10982800BF65FFFFFFFFFFFFACFD00000000000069 +:10983800BF65FFFFFFFFFFFFACFD00000C00FFB797 +:10984800FFFFFFFFACFD000000000000000000006B +:10985800BF65FFFFFFFFF6FF0060D201FFDFFFFFDC +:10986800FFFF87DC000000000000000000009B3CB8 +:10987800FFFFFFFFFBFFC091D201FFDFFFFFFFFFEC +:10988800ACFD00000000000000000000BF65FFFF05 +:10989800FFFFFBFFC0910700DF96FFFFFFFFFFFF01 +:1098A800ACFD0000000000009B3CFFFFFFFFFFFF36 +:1098B800D2FE003800003603FFFFFFFFFFFFFFFF67 +:1098C800FFFFFFFFFFFFFFFFFFFFFFFFFFFF20B3CB +:1098D8000000000000009B3CFFFFFFFFFFFFFFFFB1 +:1098E800FFFFFFFFFFFFFFFFFFFF87DC0000000017 +:1098F8000000000000000700DF96FFFFFFFFFFFFEA +:10990800FFFFFFFFD2FE003800000000000000004B +:1099180000000A001FA7FFFFFFFF14FF0050000010 +:109928001000FFC7FFFFFFFFFFFFFFFF14FF0050FE +:109938001804FFFFFCFFA0A2B402FFE7FFFF00C46A +:109948003C55FFFF14FF00501000FFC7FFFF2AE53A +:109958003C55FFFF14FF00500A001FA7FFFF2AE530 +:109968003C55FFFFF8FF00800A001FA7FFFF2AE50C +:109978001804FFFFFCFFA0A2B402FFE7FFFF00C42A +:109988000A001FA7FFFFFFFFFFFFFFFF14FF0050A4 +:1099980000000A001FA7FFFFFFFF14FF0050000090 +:1099A80000000000000000000000000000000000AF +:1099B800000000000000000000000000000000009F +:1099C800000000000000000000000000000000008F +:1099D8000A001FA7FFFFFCFFA0A20000180400C494 +:1099E8003C55FFFFFFFFFFFFFFFFFFFFFFFF00C426 +:1099F8003855A0A20000B402FFE7FFFF30FE0000C8 +:109A0800000000000000000000000000000000004E +:109A1800000000000000000000000000000000003E +:109A2800000000000000000000000000000000002E +:109A380000000000000000000C00FFB7FFFFFFFF60 +:109A4800FFFFFFFF20B3000000000000000000003F +:109A5800000000009B3CFFFFFFFFFFFFFFFFFFFF31 +:109A6800FFFFFFFFD2FE00380000000000000000EA +:109A78003603FFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:109A8800FFFFFFFFACFD0000000000000700DF96AD +:109A9800FFFFFFFFFFFF20B300000700DF96FFFF77 +:109AA800FFFFFBFFC09100000000D201FFDFFFFFB6 +:109AB800FFFF87DC0000000000003603FFFFFFFF08 +:109AC800FFFF20B3000000000000000000000000BD +:109AD80000000000000000009B3CFFFFFFFFFBFFB1 +:109AE800C09100000000000000000000000000001D +:109AF80000000000BF65FFFFFFFFFFFFD2FE003838 +:109B08000000000000000000000000000C00FFB78B +:109B1800FFFFFFFFFFFFFFFFD2FE0038000000003D +:109B2800000000000000000000000C00FFB7FFFF6D +:109B3800FFFFFFFFF6FF00600000000000000000CC +:109B480000000000000000000C00FFB7FFFFFFFF4F +:109B5800FFFFFFFFFFFFACFD00000000000000005A +:109B68000000000000000000000000003603FFFFB6 +:109B7800FFFFFFFFFFFF87DC000000000000000080 +:109B88000000000000000000000000000C00FFB70B +:109B9800FFFFFFFFF6FF006000000000000000006C +:109BA8000000000000000000000000009B3CFFFFD8 +:109BB800FFFFFBFFC091D201FFDFFFFFFFFF87DC44 +:109BC800000000000000000000009B3CFFFFFFFFBA +:109BD800FBFFC0910C00FFB7FFFFFFFFD2FE00386C +:109BE8000000000000000700DF96FFFFFFFFF6FF00 +:109BF80000600000BF65FFFFFFFFFFFFD2FE0038D7 +:109C080000000000BF65FFFFFFFFFFFFACFD000085 +:109C180000000C00FFB7FFFFFFFFFFFFFFFFFFFF84 +:109C2800FFFFFFFFFFFFFFFFF6FF006000000000DF +:109C38000000D201FFDFFFFFFFFFFFFFFFFFFFFF75 +:109C4800FFFFFFFFF6FF00600000000000000000BB +:109C5800000000009B3CFFFFFFFFFFFFFFFFFFFF2F +:109C680020B3000000000000000000000000000019 +:109C780000001804FFFFF8FF00800000000000004B +:109C88003F86FFFFFFFFF8FF008000001000FFC7BE +:109C9800FFFFFFFFFFFFF8FF008000001000FFC775 +:109CA80000C43C55FFFFF8FF0080000000000000E2 +:109CB80000003C55FFFFF8FF008000000000000096 +:109CC80000003C55FFFFF8FF008000000000000086 +:109CD80000003C55FFFFF8FF008000000000000076 +:109CE80000003C55FFFFF8FF008000000000000066 +:109CF80000003C55FFFFF8FF008000000100010054 +:109D08000100010002000200030003000400040037 +:109D18000500050006000600070007000800080007 +:109D2800090009000A000A080B080B080C100D109E +:109D38000D180E180E200F280F281030103011386B +:109D48001138124012401240134813481348134860 +:109D580013501450145014501458145814581458BC +:109D68001460156015603568556875689570B5702C +:109D7800D570157955797581B581D589158A35924A +:109D88007592B592D49A149B349B54A394A3B4A30C +:109D9800D4ABF4AB13AC33AC53B473B492B4B2B425 +:109DA800B2B4D1BCF1BC10BD30BD30BD4FBD6FBD2C +:109DB8006EBD8EBD8EC5AEC5ADC5CDC5CDC5EDC517 +:109DC800EDC5EDC50DC60DC60DC62EC62EC62FC6D1 +:109DD8002FC630CE30CE51CE51CE52CE53CE53CEEA +:109DE80054CE54CE55CE55CE56CE56CE56CE57CE50 +:109DF80057CE57CE58CE58CE58CE58CE0000000079 +:109E080000000000BF65FFFFFFFFFFFFFFFFFFFF30 +:109E1800FFFFFFFFFFFF87DC0000000000000000DD +:109E28000700DF96FFFFFFFFFFFFFFFFFFFFFFFFBA +:109E3800FFFFFFFF87DC0000000000000000D201E8 +:109E4800FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:109E5800FFFF87DC00000000000000003603FFFF62 +:109E6800FFFFF6FF00600000000000000000000097 +:109E780000000000000000000000BF65FFFFFFFFBA +:109E8800D2FE0038000000000000000000000000C2 +:109E98000000000000000700DF96FFFFFFFFACFD99 +:109EA80000000000000000000000000000000000AA +:109EB800000000000C00FFB7FFFFFFFF87DC000079 +:109EC800000000000000000000000000000000008A +:109ED80000003603FFFFFFFFFFFFFFFFFFFFFFFF4D +:109EE800FFFF20B300000000000000000000000099 +:109EF8009B3CFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:109F0800FFFFD2FE00380000000000000000BF651F +:109F1800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:109F2800FFFFACFD0000000000000700DF96FFFF08 +:109F3800FFFFD2FE003800000C00FFB7FFFFFFFF55 +:109F4800FFFF20B300000000000000000000000038 +:109F58000000000000000000D201FFDFFFFFFFFF4C +:109F6800ACFD000000000000000000000000000040 +:109F78000000000000000C00FFB7FFFFFFFFACFD72 +:109F880000000000000000000000000000000000C9 +:109F9800000000000C00FFB7FFFFFFFFACFD000052 +:109FA8003603FFFFFFFFFFFFACFD000000000000CD +:109FB80000003603FFFFFFFFFFFF87DC00000C00F7 +:109FC800FFB7FFFFFFFFFFFFACFD00000000D2015D +:109FD800FFDFFFFFFFFFFBFFC0910000000036031B +:109FE800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:109FF800FFFFFFFF87DC00000000000000003603C1 +:10A00800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:10A0180087DC0000000000000000000000000000D5 +:10A02800BF65FFFFFFFFFFFFFFFFD2FE0038000004 +:10A0380000000000000000000000D201FFDFFFFF69 +:10A0480087DC000000000000000000000700DF9629 +:10A05800FFFFFFFFFFFFD2FE00380000D201FFDF45 +:10A06800FFFFFFFFFFFFFFFFFFFF87DC000000008F +:10A078000000D201FFDFFFFF87DC000000000000C6 +:10A0880000000700DF96FFFFFFFFFFFFFFFFFFFF56 +:10A09800D2FE0038D201FFDFFFFFFFFFFFFFFFFF07 +:10A0A800FFFFFBFFC09100000000D201FFDFFFFFB0 +:10A0B80087DC0000000000000000D201FFDFFFFF86 +:10A0C80020B300009B3CFFFFFBFFC091D201FFDFE4 +:10A0D800FFFF87DC00009B3CFFFFFBFFC0910000F7 +:10A0E8000000D201FFDFFFFF87DC00000000000056 +:10A0F80000000C00FFB7FFFFFFFFFFFFD2FE003894 +:10A1080000000000D201FFDFFFFFFFFFFFFFFFFF9E +:10A11800FFFF20B3000000000000D201FFDFFFFFB7 +:10A1280087DC000000000000000000000C00FFB702 +:10A13800FFFFFFFFFFFFFFFFD2FE0038D201FFDF66 +:10A14800FFFFFFFFFFFFFFFFFFFFF6FF00600000BC +:10A158000000D201FFDFFFFF87DC000000000000E5 +:10A16800000000000000000000000700DF96FFFF6D +:10A17800FFFF87DCD201FFDFFFFF87DC0000D20191 +:10A18800FFDFFFFF87DC00000000D201FFDFFFFFD9 +:10A1980087DC00000000000000009B3CFFFFFBFF85 +:10A1A800C0910000D201FFDFFFFF87DCD201FFDF93 +:10A1B800FFFF87DC00003603FFFFFFFF87DC00009E +:10A1C8000000D201FFDFFFFFFFFFFFFFFFFFFFFFE0 +:10A1D800ACFD0C00FFB7FFFFFFFFFFFFFFFFFFFF16 +:10A1E800FBFFC091D201FFDFFFFFFFFFFFFFFFFF73 +:10A1F800FFFFFFFF20B300000000D201FFDFFFFFD9 +:10A20800FFFFFFFFFFFFFFFFACFD0000D201FFDFF4 +:10A21800FFFFFFFFFFFFF6FF00600000D201FFDF36 +:10A22800FFFFFFFFFFFFFFFFFFFF87DC00000000CD +:10A2380000001804FFFFFFFFFFFFFFFF00C400003E +:10A24800B402FFE7FFFFFFFFFFFFFFFFFCFFA0A235 +:10A258003C55FFFFF8FF00801000FFC7FFFF2AE50D +:10A268000000000000000000B402FFE7FFFF00C488 +:10A27800000000000000B402FFE7FFFF14FF0050D9 +:10A28800000000003C55FFFFFFFF30FE000000000B +:10A2980000003C55FFFFFFFF00C400000000000065 +:10A2A800B402FFE7FFFFFFFFFFFFFFFFFFFF2AE505 +:10A2B8003F86FFFFFFFFFFFFFFFFFFFFFFFF2AE5CE +:10A2C800D201FFDFFFFF87DC000000009B3CFFFF9F +:10A2D800FBFFC09100000700DF96FFFFFFFFFFFFB5 +:10A2E800D2FE00380000D201FFDFFFFFFFFFFFFFB3 +:10A2F800FFFFFFFF87DC0000D201FFDFFFFF87DCE5 +:10A30800000000009B3CFFFFFBFFC0910700DF96A9 +:10A31800FFFFFFFFFFFFFFFFFFFFD2FE0038D20164 +:10A32800FFDFFFFFFFFFFFFFFFFFFFFFFBFFC09106 +:10A33800D201FFDFFFFF87DC000000009B3CFFFF2E +:10A34800FBFFC091D201FFDFFFFF20B300009B3C61 +:10A35800FFFFFBFFC091D201FFDFFFFF87DC00009A +:10A368009B3CFFFFFBFFC091D201FFDFFFFF87DCB3 +:10A37800000000009B3CFFFFFBFFC0910C00FFB7F3 +:10A38800FFFFFFFFFFFFD2FE003800000000D201F0 +:10A39800FFDFFFFFFFFFFFFFFFFFFFFF20B300000E +:10A3A800D201FFDFFFFF87DC000000009B3CFFFFBE +:10A3B800FBFFC09100000C00FFB7FFFFFFFFFFFF8E +:10A3C800FFFFD2FE0038D201FFDFFFFFFFFFFFFFD4 +:10A3D800FFFFFFFFF6FF0060D201FFDFFFFF87DC12 +:10A3E800000000009B3CFFFFFBFFC0910000000045 +:10A3F800000000000700DF96FFFFFFFF87DCD201A7 +:10A40800FFDFFFFF87DC0000D201FFDFFFFF87DCF3 +:10A418000C00FFB7FFFFD2FE00380700DF96FFFFF2 +:10A42800F6FF00609B3CFFFFFBFFC0910000D201DC +:10A43800FFDFFFFF87DCD201FFDFFFFF87DC0000C3 +:10A448003603FFFFFFFF87DC00009B3CFFFFFFFF99 +:10A45800FFFFFFFFFFFFFFFF87DC00000C00FFB7D7 +:10A46800FFFFFFFFFFFFFFFFFFFFFBFFC091D201D0 +:10A47800FFDFFFFFFFFFFFFFFFFFFFFFFFFF20B32F +:10A48800000000009B3CFFFFFFFFFFFFFFFF87DC92 +:10A49800000000000000D201FFDFFFFFFFFFFFFF09 +:10A4A800F6FF00600000D201FFDFFFFFFFFFFFFFA4 +:10A4B800FFFFFFFF87DC000000003F86FFFFFFFF74 +:10A4C800FFFFFFFFFCFFA0A20A001FA7FFFFFFFF7F +:10A4D800FFFFFFFFFCFFA0A21000FFC7FCFFA0A228 +:10A4E80000000000000000001000FFC7FCFF1FE78D +:10A4F800FFFFFFFF00C40000B402FFE7FFFFFFFFFC +:10A50800FFFFFFFFFFFF00C4000000000000000085 +:10A518001000FFC7FFFF2AE53C55FFFFF8FF00804A +:10A528001000FFC7FFFF2AE5B402FFE7FFFFFFFFA8 +:10A53800FFFFFFFFFCFFA0A20000B402FFE7FFFF40 +:10A54800FFFFFCFFA0A200000000000000000000C8 +:10A558000000000000000000FFFF000000000000F5 +:10A56800000000000000000000000000FFFF0000E5 +:10A5780000000000000000000000000000000000D3 +:10A58800FFFF0000000000000000000000000000C5 +:10A5980000000000FFFF00000000000000000000B5 +:10A5A8000000000000000000FFFF000000000000A5 +:10A5B800000000000000000000000000FFFF000095 +:10A5C8000000000000000000000000000000000083 +:10A5D800FFFF000000000000000000000000000075 +:10A5E80000000000FFFF0000000000000000000065 +:10A5F8000000000000000000FFFF00000000000055 +:10A6080000000000000000000000EF7BFFFFEF7B70 +:10A618000000000000000000000000000000EF7BC8 +:10A62800FFFFEF7B000000000000000000000000BA +:10A638000000EF7BFFFFEF7B000000000000000040 +:10A64800000000000000EF7BFFFFEF7B0000000030 +:10A6580000000000000000000000EF7BFFFFEF7B20 +:10A668000000000000000000000000000000EF7B78 +:10A67800FFFFEF7B0000000000000000000000006A +:10A688000000000000000000000000000000FFFFC4 +:10A6980000000000000000000000000000000000B2 +:10A6A8000000FFFF000000000000000000000000A4 +:10A6B800000000000000FFFF000000000000000094 +:10A6C80000000000000000000000FFFF0000000084 +:10A6D8000000000000000000000000000000FFFF74 +:10A6E8000000000000000000000000000000000062 +:10A6F8000000FFFF00000000000000000000000054 +:10A70800000000000000FFFF000000000000000043 +:10A7180000000000000000000000FFFF0000000033 +:10A728000000000000000000000000000000FFFF23 +:10A738000000000000000000000000000000000011 +:10A74800EF7BFFFFEF7B000000000000000000002F +:10A7580000000000EF7BFFFFEF7B0000000000001F +:10A768000000000000000000EF7BFFFFEF7B00000F +:10A77800000000000000000000000000EF7BFFFF69 +:10A78800EF7B000000000000000000000000000057 +:10A79800EF7BFFFFEF7B00000000000000000000DF +:10A7A80000000000EF7BFFFFEF7B000000000000CF +:10A7B8000000000000000000000000000000000091 +:10A7C80000000000FFFF0000000000000000000083 +:10A7D8000000000000000000000000000000000071 +:10A7E800000000000000000000000000FFFF000063 +:10A7F8000000000000000000000000000000000051 +:10A808000000000000000000000000000000000040 +:10A8180000000000FFFF0000000000000000000032 +:10A828000000000000000000000000000000000020 +:10A83800000000000000000000000000FFFF000012 +:10A848000000000000000000000000000000000000 +:10A8580000000000000000000000000000000000F0 +:10A8680000000000FFFF00000000000000000000E2 +:10A8780000000000000000000000000000000000D0 +:10A8880000000000000000000000EF7BFFFFEF7BEE +:10A8980000000000000000000000000000000000B0 +:10A8A80000000000000000000000000000000000A0 +:10A8B8000000EF7BFFFFEF7B0000000000000000BE +:10A8C8000000000000000000000000000000000080 +:10A8D80000000000000000000000EF7BFFFFEF7B9E +:10A8E8000000000000000000000000000000000060 +:10A8F80000000000000000000000FFFF0000000052 +:10A90800000000000000000000000000000000003F +:10A91800000000000000000000000000000000002F +:10A928000000FFFF00000000000000000000000021 +:10A93800000000000000000000000000000000000F +:10A9480000000000000000000000FFFF0000000001 +:10A9580000000000000000000000000000000000EF +:10A9680000000000000000000000000000000000DF +:10A978000000FFFF000000000000000000000000D1 +:10A9880000000000000000000000000000000000BF +:10A9980000000000000000000000FFFF00000000B1 +:10A9A800000000000000000000000000000000009F +:10A9B800000000000000000000000000000000008F +:10A9C800EF7BFFFFEF7B00000000000000000000AD +:10A9D800000000000000000000000000000000006F +:10A9E8000000000000000000EF7BFFFFEF7B00008D +:10A9F800000000000000000000000000000000004F +:10AA0800000000000000000000000000000000003E +:10AA1800EF7BFFFFEF7B000000000000000000005C +:10AA2800000000000000000000000000000000001E +:10AA3800000000000000000000000000000000000E +:10AA480000000000000000000000000000000000FE +:10AA580000000000000000000000000000000000EE +:10AA680000000000000000000000000000000000DE +:10AA780000000000000000000000000000000000CE +:10AA880000000000000000000000000000000000BE +:10AA980000000000000000000000000000000000AE +:10AAA800000000000000000000000000000000009E +:10AAB800000000000000000000000000000000008E +:10AAC800000000000000000000000000000000007E +:10AAD800000000000000000000000000000000006E +:10AAE800000000000000000000000000000000005E +:10AAF800000000000000000000000000000000004E +:10AB0800000000000000000000000000000000003D +:10AB1800000000000000000000000000000000002D +:10AB2800000000000000000000000000000000001D +:10AB3800000000000000000000000000000000000D +:10AB480000000000000000000000000000000000FD +:10AB5800000000000000EF7BFFFFFFFFFFFFEF7B1F +:10AB6800000000000000EF7BFFFF00000000000075 +:10AB780000000000000000000000000000000000CD +:10AB88000000000000000000000000000000FFFFBF +:10AB9800FFFFEF7B00000000000000000000000045 +:10ABA800000000000000000000000000000000009D +:10ABB800000000000000FFFFFFFFFFFF0000000093 +:10ABC800000000000000000000000000000000007D +:10ABD8000000000000000000000000000000FFFF6F +:10ABE800FFFFFFFF00000000000000000000000061 +:10ABF800000000000000000000000000000000004D +:10AC0800000000000000EF7BFFFFFFFF00000000D6 +:10AC1800000000000000000000000000000000002C +:10AC28000000000000000000000000000000EF7BB2 +:10AC3800FFFFFFFF0000EF7BFFFFFFFF00000000AA +:10AC480000000000000000000000000000000000FC +:10AC5800000000000000EF7B0000FFFF0000EF7B1A +:10AC6800FFFFFFFF000000000000000000000000E0 +:10AC78000000000000000000000000000000EF7B62 +:10AC8800FFFF00000000EF7BFFFFFFFFFFFF00005A +:10AC9800000000000000000000000000FFFFFFFFB0 +:10ACA800000000000000000000000000000000009C +:10ACB800000000000000000000000000000000008C +:10ACC8000000000000000000FFFF0000000000007E +:10ACD800000000000000000000000000000000006C +:10ACE800000000000000000000000000FFFF00005E +:10ACF800000000000000000000000000000000004C +:10AD0800000000000000000000000000000000003B +:10AD18000000000000000000FFFF0000000000002D +:10AD2800000000000000000000000000000000001B +:10AD3800000000000000000000000000FFFF00000D +:10AD4800FFFF0000000000000000000000000000FD +:10AD58000000000000000000000000000000FFFFED +:10AD680000000000FFFF0000FFFF0000FFFF0000E1 +:10AD7800FFFF0000000000000000000000000000CD +:10AD8800000000000000FFFF00000000FFFF0000BF +:10AD9800FFFF0000FFFF0000FFFF000000000000B1 +:10ADA8000000000000000000000000000000FFFF9D +:10ADB80000000000FFFF000000000000FFFF00008F +:10ADC800FFFFEF7BFFFFFFFFFFFFEF7B00000000AF +:10ADD80000000000FFFF000000000000000000006D +:10ADE800000000000000000000000000000000005B +:10ADF800000000000000000000000000FFFFEF7BE3 +:10AE0800000000000000000000000000000000003A +:10AE1800000000000000000000000000000000002A +:10AE280000000000FFFFFFFF00000000000000001E +:10AE3800000000000000000000000000000000000A +:10AE4800000000000000000000000000FFFF0000FC +:10AE580000000000000000000000000000000000EA +:10AE680000000000000000000000000000000000DA +:10AE78000000FFFFFFFFFFFF0000000000000000D0 +:10AE880000000000000000000000000000000000BA +:10AE98000000FFFFFFFFFFFF00000000FFFF0000B2 +:10AEA8000000FFFF0000FFFF00000000000000009E +:10AEB80000000000000000000000FFFFFFFFFFFF90 +:10AEC8000000FFFFFFFFFFFF0000FFFF0000FFFF84 +:10AED800000000000000000000000000000000006A +:10AEE8000000FFFFFFFFFFFF0000FFFFFFFFFFFF66 +:10AEF8000000FFFF0000FFFF00000000000000004E +:10AF0800FFFF0000000000000000FFFF000000003D +:10AF18000000000000000000000000000000000029 +:10AF28000000000000000000000000000000000019 +:10AF380000000000FFFF000000000000000000000B +:10AF480000000000000000000000000000000000F9 +:10AF5800000000000000000000000000FFFF0000EB +:10AF680000000000000000000000000000000000D9 +:10AF780000000000000000000000000000000000C9 +:10AF8800EF7B00000000000000000000000000004F +:10AF980000000000000000000000000000000000A9 +:10AFA800000000000000000000000000FFFF00009B +:10AFB8000000000000000000000000000000000089 +:10AFC80000000000000000000000FFFF000000007B +:10AFD800FFFF000000000000FFFF0000FFFF00006F +:10AFE8000000000000000000000000000000000059 +:10AFF8000000FFFF0000000000000000FFFF00004D +:10B00800FFFF0000FFFF000000000000000000003C +:10B0180000000000000000000000FFFF000000002A +:10B02800FFFF0000FFFF0000FFFF0000FFFFEF7BB6 +:10B03800FFFFFFFFFFFFEF7B0000000000000000A4 +:10B04800FFFF0000000000000000000000000000FA +:10B0580000000000000000000000000000000000E8 +:10B06800000000000000FFFFFFFFEF7B0000000072 +:10B0780000000000000000000000000000000000C8 +:10B088000000000000000000000000000000FFFFBA +:10B09800FFFFEF7B00000000000000000000000040 +:10B0A8000000000000000000000000000000000098 +:10B0B800000000000000FFFF00000000000000008A +:10B0C8000000000000000000000000000000000078 +:10B0D8000000000000000000000000000000000068 +:10B0E8000000FFFF0000000000000000000000005A +:10B0F8000000000000000000000000000000000048 +:10B10800000000000000FFFFFFFFFFFF0000FFFF3F +:10B11800FFFFEF7B000000000000000000000000BF +:10B128000000000000000000000000000000000017 +:10B138000000FFFF0000FFFFFFFFEF7B00000000A3 +:10B1480000000000000000000000000000000000F7 +:10B15800000000000000FFFFFFFFEF7B0000FFFF83 +:10B16800FFFFEF7B0000000000000000D201FFDFBE +:10B17800FFFFFFFFFFFFFBFFC09100000000000082 +:10B188000000000000000000BF65FFFFFFFFFFFF99 +:10B19800FFFFFFFFFFFFFFFFACFD00000000000006 +:10B1A80000000000BF65FFFFFFFFFFFFFFFFFFFF7D +:10B1B800FFFFFFFFFFFFFFFFACFD000000000000E6 +:10B1C800D201FFDFFFFFFFFFF6FF006000000C0069 +:10B1D800FFB7FFFFFFFFFBFFC091000000009B3C93 +:10B1E800FFFFFFFFFBFFC091000000000000D2013D +:10B1F800FFDFFFFFFFFFACFD00000700DF96FFFF4A +:10B20800FFFFD2FE00380000000000000700DF96B4 +:10B21800FFFFFFFFD2FE00380C00FFB7FFFFFFFF64 +:10B22800ACFD00000000000000000000BF65FFFF4B +:10B23800FFFFF6FF0060D201FFDFFFFFFFFF87DCA3 +:10B24800000000000000000000009B3CFFFFFFFF23 +:10B25800FBFFC091D201FFDFFFFFFFFF87DC00008B +:10B2680000000000000000009B3CFFFFFFFFFBFF09 +:10B27800C091D201FFDFFFFFFFFF87DC0000000065 +:10B288000000000000009B3CFFFFFFFFFBFFC09198 +:10B29800D201FFDFFFFFFFFF87DC00000000000096 +:10B2A800000000009B3CFFFFFFFFFBFFC091D201A5 +:10B2B800FFDFFFFFFFFF87DC000000000000000049 +:10B2C80000009B3CFFFFFFFFFBFFC0910C00FFB796 +:10B2D800FFFFFFFFACFD00000000000000000000C1 +:10B2E800BF65FFFFFFFFF6FF00600700DF96FFFF67 +:10B2F800FFFFD2FE00380000000000000700DF96C4 +:10B30800FFFFFFFFD2FE00380000BF65FFFFFFFF11 +:10B31800FBFFC0910000000000003603FFFFFFFFA5 +:10B32800FFFFACFD00000000D201FFDFFFFFFFFFC1 +:10B33800F6FF006000000C00FFB7FFFFFFFFFBFFF8 +:10B34800C091000000000000BF65FFFFFFFFFFFF86 +:10B35800FFFFFFFFFFFFFFFFFFFFFFFFACFD000048 +:10B368000000000000000700DF96FFFFFFFFFFFF5F +:10B37800FFFFFFFFFFFFFFFFD2FE003800000000C5 +:10B388000000000000000000D201FFDFFFFFFFFF08 +:10B39800FFFFFFFF20B300000000000000000000D6 +:10B3A80000001804FFFFFFFFFFFF14FF005000001C +:10B3B800B402FFE7FFFFFFFFFFFFFFFF14FF00508E +:10B3C8003C55FFFF14FF0050B402FFE7FFFF00C425 +:10B3D8003C55FFFF14FF0050B402FFE7FFFF2AE5CA +:10B3E800B402FFE7FFFFFFFFFFFFFFFFFFFF2AE5B4 +:10B3F80000001804FFFFFFFF10C4FFC7FFFF2AE586 +:10B4080000000000000000001804FFFFFFFF00C458 +:10B41800B402FFE7FFFFFFFFFFFFFFFF14FF00502D +:10B4280000001804FFFFFFFFFFFF14FF005000009B +:10B438000000000000000A001FA7FFFF30FE000008 +:10B448000000000000003F86FFFFFFFF30FE000005 +:10B45800000000003C55FFFFFFFFFFFF30FE00002B +:10B4680000001804FFFFF8FF1884FFFF30FE0000FB +:10B478001804FFFFFCFFA0A21804FFFF30FE000025 +:10B488001FA7FFFFFFFFFFFFFFFFFFFFFFFF14FFE7 +:10B498001FA7FFFFFFFFFFFFFFFFFFFFFFFF14FFD7 +:10B4A80000000000000000001804FFFF30FE00004C +:10B4B80000000000000000001804FFFF30FE00003C +:10B4C8000000000000000C00FFB7FFFFFFFFFFFFB8 +:10B4D800FFFFD2FE0038000000000000000000005E +:10B4E80000000000BF65FFFFFFFFFFFFFFFFFFFF3A +:10B4F800D2FE00380000000000000000000000003C +:10B508003603FFFFFFFFFFFFFFFFFFFFFFFFD2FE36 +:10B518000038000000000000000000000000C739EB +:10B52800000000000700DF96FFFFFFFFD2FE003893 +:10B538000000000000000000000000000000000003 +:10B5480000000700DF96FFFFFFFFD2FE0038000073 +:10B5580000000000000000000000000000000000E3 +:10B568000700DF96FFFFFFFFD2FE00380000000053 +:10B5780000000000000000000000000000000700BC +:10B58800DF96FFFFFFFFD2FE00380000000000003A +:10B598000000000000000000000000000700DF9627 +:10B5A800FFFFFFFFD2FE003800000000000000008F +:10B5B800000000000000000000000700DF96FFFF09 +:10B5C800FFFFD2FE0038000000000000000000006D +:10B5D80000000000000000000700DF96FFFFFFFFEB +:10B5E800D2FE00380000000000000000000000004B +:10B5F8000000000000000700DF96FFFFFFFFD2FEFB +:10B6080000380000000000000000000000000000FA +:10B61800000000000700DF96FFFFFFFFD2FE0038A2 +:10B628000000000000000000000000000000000012 +:10B6380000000700DF96FFFFFFFFD2FE0038000082 +:10B6480000000000000000000000000000000000F2 +:10B658000700DF96FFFFFFFFD2FE00380000000062 +:10B6680000000000000000000000000000000700CB +:10B67800DF96FFFFFFFFD2FE003800000000000049 +:10B688000000000000000000000000000700DF9636 +:10B69800FFFFFFFFD2FE003800000000000000009E +:10B6A800000000000000000000000700DF96FFFF18 +:10B6B800FFFFD2FE0038000000000000000000007C +:10B6C80000000000000000000700DF96FFFFFFFFFA +:10B6D800D2FE00380000000000000000000000005A +:10B6E8000000000000000700DF96FFFFFFFFD2FE0A +:10B6F800003800000000000000000000000000000A +:10B70800000000000000000000009B3CD2FE003852 +:10B718000000000000000000000000000000000021 +:10B728000000000000000C00FFB7FFFFFFFFD2FE83 +:10B7380000380000000000000000000000000000C9 +:10B74800000000009B3CFFFFFFFFFFFF20B300004D +:10B7580000000000000000000000000000000000E1 +:10B76800D201FFDFFFFFFFFFD2FE0038000000001C +:10B778000000000000000000000000000000BF659D +:10B78800FFFFFFFFFFFF20B30000000000000000E4 +:10B7980000000000000000000000D201FFDFFFFFF2 +:10B7A800FFFFD2FE0038000000000000000000008B +:10B7B8000000000000000000BF65FFFFFFFFFFFF63 +:10B7C80020B300000000000000000000000000009E +:10B7D80000000000D201FFDFFFFFFFFFACFD00000B +:10B7E8000000000000000000000000000000000051 +:10B7F8000000BF65FFFFFFFFFFFFFFFFFFFFF6FF32 +:10B808000060000000000000000000000000360397 +:10B81800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:10B8280087DC00000000000000000700DF96FFFF33 +:10B83800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10B8480087DC0000000000003603FFFFFFFFFFFF5A +:10B85800D2FE00380000D201FFDFFFFFFFFFF6FF36 +:10B86800006000000000BF65FFFFFFFFF6FF0060FB +:10B878000000000000003603FFFFFFFFFFFF20B3BA +:10B8880000000000BF65FFFFFFFFD2FE0038000088 +:10B8980000000000D201FFDFFFFFFFFF20B3000020 +:10B8A8000000BF65FFFFFFFFFBFFC0910000000025 +:10B8B80000003603FFFFFFFFFFFF20B3000000007A +:10B8C8003603FFFFFFFFFFFFD2FE00380000D20162 +:10B8D800FFDFFFFFFFFFF6FF006000000000000031 +:10B8E800BF65FFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:10B8F800FFFFFFFF87DC00000000000000000700DA +:10B90800DF96FFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:10B9180087DC0000000000000000000000000000BC +:10B92800D201FFDFFFFFFFFFFFFFF6FF006000000F +:10B938000000000000000000253864002534640081 +:10B94800252D346400000000252D34660000000019 +:10B9580048656C6C6F2041524D20576F726C6421A2 +:10B968000000000053776565742C207468697320A3 +:10B97800776F726B73206E6F772100005379737441 +:10B98800656D20636C6F636B3A202575487A0A00F1 +:10B99800493243206469646E277420496E697420B3 +:10B9A800636F72726563746C790000006C6F670076 +:10B9B8004300232D302B2000686C4C0065666745DA +:10B9C800464700303132333435363738394142430F +:10B9D80044454600303132333435363738396162C0 +:05B9E8006364656600C8 +:10B9F00078563412DC040020000000000024F4001B +:10BA00000000000100000200000300000400000527 +:10BA1000000006081D070000087000090F000A005A +:10BA2000000B00000C00000D00000E00000F0000D5 +:10BA30001000001100001200001300001400001597 +:10BA400000001600001700001800001900001A007E +:10BA5000001B70801C16FF1D90FF1EB0FF1FC0FF53 +:10BA600020E3FF21E3FF22E3FF2300FF24061F253D +:10BA7000001F26001F27001F2863FF290C7F2A2391 +:10BA80003F2B00002C00002D00FF2E00FF2F143F45 +:10BA90003038FF3100FF32C4FF3307FF3410FF3569 +:10BAA00000FF36B0FF3700FF3800FF3900FF3A00D3 +:10BAB000FF3B01FF3C00FF3D00FF3E003F3F10FF0A +:10BAC0004000FF4100FF4200FF4300FF4400FF45EC +:10BAD00000FF4600FF4700FF4800FF49003F4A10B3 +:10BAE000FF4B00FF4C00FF4D00FF4E00FF4F00FFDB +:10BAF0005000FF5100FF5200FF5300FF54003F551C +:10BB000010FF5600FF5700FF5800FF5900FF5A0072 +:10BB1000FF5B00FF5C00FF5D00FF5E00FF5F003F1A +:10BB2000601000610FFF622EFF6324FF6400FF6559 +:10BB300000FF6600FF6719FF6800FF6900FF6A8069 +:10BB4000BF6B00FF6C00FF6D00FF6EC0FF6F00FF5A +:10BB50007000FF7100FF7240FF7300FF7480FF757B +:10BB600000FF7640FF7700FF7800FF7900FF7A4002 +:10BB7000FF7B00FF7C00FF7D00FF7E00FF7F00FF5A +:10BB80008000FF81000F82000F8300FF8400FF858B +:10BB900000FF8600FF8700FF8800FF8900FF8A0002 +:10BBA000FF8B00FF8C00FF8D00FF8E00FF8F00FFDA +:10BBB0009000FF91000092FF009300009400009518 +:10BBC00000009600009700009800FF9900FF9A007F +:10BBD000FF9B00FF9C00FF9D00FF9E000F9F000F3A +:10BBE000A000FFA100FFA200FFA300FFA400FFA58B +:10BBF00000FFA600FFA700FFA800FFA900FFAA0002 +:10BC0000FFAB00FFAC00FFAD00FFAE00FFAF00FFD9 +:10BC1000B000FFB100FFB200FFB300FFB400FFB5FA +:10BC2000000FB600FFB700FFB800FFB900FFBA0071 +:10BC3000FFBB00FFBC00FFBD00FFBE00FFBF00FF59 +:10BC4000C000FFC100FFC200FFC300FFC400FFC56A +:10BC500000FFC600FFC700FFC800FFC900FFCA0001 +:10BC6000FFCB000FCC00FFCD00FFCE00FFCF00FFC9 +:10BC7000D000FFD100FFD200FFD300FFD400FFD5DA +:10BC800000FFD600FFD700FFD800FFD900FFDA0081 +:10BC900000DB0000DC0000DD0D00DE0000DF000046 +:10BCA000E0F400E1F000E20000E30000E40000E561 +:10BCB0000000E70000E80000E90000EA0000EB00F7 +:10BCC00000EC0000ED0000EE1400EF0000F00000BA +:10BCD000F20002F3F000F40000F50000F70000F8B5 +:10BCE0000000F9A800FA0000FB8400FC0000FD0041 +:10BCF00000FE0000FF01FF00000001000002000044 +:10BD00000300000400000500000600000700000812 +:10BD100000000900000A00000B00000C00000D00EC +:10BD2000000E00000F0000100000110100120000C2 +:10BD300013000014900015310016000017000018C1 +:10BD400001001900001A00001B00001C00001D006B +:10BD5000001E00001F00FF2000FF2101FF2200FF46 +:10BD60002300FF2490FF2531FF2600FF2700FF2836 +:10BD700001FF2900FF2A00FF2B000F2C00002D00DF +:10BD8000002E00002F00FF3000FF3101FF3200FFC6 +:10BD90003300FF3490FF3531FF3600FF3700FF38A6 +:10BDA00001FF3900FF3A00FF3B000F3C00003D005F +:10BDB000003E00003F00FF4000FF4101FF4200FF46 +:10BDC0004300FF4490FF4531FF4600FF4700FF4816 +:10BDD00001FF4900FF4A00FF4B000F4C00004D00DF +:10BDE000004E00004F00FF5000FF5100FF5200FFC7 +:10BDF0005300FF5490FF5531FF5600FF5700FF5886 +:10BE000001FF5900FF5A00FF5B000F5C00005D005E +:10BE1000005E0000FF00FF0001000000CDCCCC3D23 +:10BE20000B0002000000004001000000020044007E +:10BE3000183F5D00CDCC4C3E0000A0410000C84141 +:10BE40000000803F02000000242424242424242411 +:10BE50002424242424240100000000000000000009 +:10BE600000000000000000000000000000000000D2 +:10BE70000000000000000000B8B900080000000049 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000680400203254769862 +:04000005080001C925 :00000001FF diff --git a/Source/include/ILI9341_t3.h b/Source/include/ILI9341_t3.h deleted file mode 100644 index 51b6144..0000000 --- a/Source/include/ILI9341_t3.h +++ /dev/null @@ -1,252 +0,0 @@ -// https://github.com/PaulStoffregen/ILI9341_t3 -// http://forum.pjrc.com/threads/26305-Highly-optimized-ILI9341-(320x240-TFT-color-display)-library - -/*************************************************** - This is our library for the Adafruit ILI9341 Breakout and Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#ifndef _ILI9341_t3H_ -#define _ILI9341_t3H_ - -//#include "Arduino.h" -#include "stdbool.h" - -#define ILI9341_TFTWIDTH 240 -#define ILI9341_TFTHEIGHT 320 - -#define ILI9341_NOP 0x00 -#define ILI9341_SWRESET 0x01 -#define ILI9341_RDDID 0x04 -#define ILI9341_RDDST 0x09 - -#define ILI9341_SLPIN 0x10 -#define ILI9341_SLPOUT 0x11 -#define ILI9341_PTLON 0x12 -#define ILI9341_NORON 0x13 - -#define ILI9341_RDMODE 0x0A -#define ILI9341_RDMADCTL 0x0B -#define ILI9341_RDPIXFMT 0x0C -#define ILI9341_RDIMGFMT 0x0A -#define ILI9341_RDSELFDIAG 0x0F - -#define ILI9341_INVOFF 0x20 -#define ILI9341_INVON 0x21 -#define ILI9341_GAMMASET 0x26 -#define ILI9341_DISPOFF 0x28 -#define ILI9341_DISPON 0x29 - -#define ILI9341_CASET 0x2A -#define ILI9341_PASET 0x2B -#define ILI9341_RAMWR 0x2C -#define ILI9341_RAMRD 0x2E - -#define ILI9341_PTLAR 0x30 -#define ILI9341_MADCTL 0x36 -#define ILI9341_PIXFMT 0x3A - -#define ILI9341_FRMCTR1 0xB1 -#define ILI9341_FRMCTR2 0xB2 -#define ILI9341_FRMCTR3 0xB3 -#define ILI9341_INVCTR 0xB4 -#define ILI9341_DFUNCTR 0xB6 - -#define ILI9341_PWCTR1 0xC0 -#define ILI9341_PWCTR2 0xC1 -#define ILI9341_PWCTR3 0xC2 -#define ILI9341_PWCTR4 0xC3 -#define ILI9341_PWCTR5 0xC4 -#define ILI9341_VMCTR1 0xC5 -#define ILI9341_VMCTR2 0xC7 - -#define ILI9341_RDID1 0xDA -#define ILI9341_RDID2 0xDB -#define ILI9341_RDID3 0xDC -#define ILI9341_RDID4 0xDD - -#define ILI9341_GMCTRP1 0xE0 -#define ILI9341_GMCTRN1 0xE1 -/* -#define ILI9341_PWCTR6 0xFC - -*/ - -// Color definitions -#define ILI9341_BLACK 0x0000 -#define ILI9341_BLUE 0x001F -#define ILI9341_RED 0xF800 -#define ILI9341_GREEN 0x07E0 -#define ILI9341_CYAN 0x07FF -#define ILI9341_MAGENTA 0xF81F -#define ILI9341_YELLOW 0xFFE0 -#define ILI9341_WHITE 0xFFFF - - -//class ILI9341_t3 : public Print -//{ -// public: - ILI9341_t3(uint8_t _CS, uint8_t _DC, uint8_t _RST = 255); - void begin(void); - void pushColor(uint16_t color); - void fillScreen(uint16_t color); - void drawPixel(int16_t x, int16_t y, uint16_t color); - void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - void setRotation(uint8_t r); - void invertDisplay(bool i); - void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); - // Pass 8-bit (each) R,G,B, get back 16-bit packed color - static uint16_t color565(uint8_t r, uint8_t g, uint8_t b) { - return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); - } - - //uint8_t readdata(void); - uint8_t readcommand8(uint8_t reg, uint8_t index = 0); - - // KJE Added functions to read pixel data... - uint16_t readPixel(int16_t x, int16_t y); - - - // from Adafruit_GFX.h - void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color); - void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color); - void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); - void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); - void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); - void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); - void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); - void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); - void setCursor(int16_t x, int16_t y); - void setTextColor(uint16_t c); - void setTextColor(uint16_t c, uint16_t bg); - void setTextSize(uint8_t s); - void setTextWrap(bool w); - virtual size_t write(uint8_t); - int16_t width(void) { return _width; } - int16_t height(void) { return _height; } - uint8_t getRotation(void); - void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); - void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - - -// protected: - int16_t - _width, _height, // Display w/h as modified by current rotation - cursor_x, cursor_y; - uint16_t - textcolor, textbgcolor; - uint8_t - textsize, - rotation; - bool - wrap; // If set, 'wrap' text at right edge of display - -// private: - uint8_t _rst; - uint8_t _cs, _dc; - uint8_t pcs_data, pcs_command; - - void setAddr(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) - __attribute__((always_inline)) { - writecommand_cont(ILI9341_CASET); // Column addr set - writedata16_cont(x0); // XSTART - writedata16_cont(x1); // XEND - writecommand_cont(ILI9341_PASET); // Row addr set - writedata16_cont(y0); // YSTART - writedata16_cont(y1); // YEND - } - //void waitFifoNotFull(void) __attribute__((always_inline)) { - void waitFifoNotFull(void) { - uint32_t sr; - uint32_t tmp __attribute__((unused)); - do { - sr = SPI0.SR; - if (sr & 0xF0) tmp = SPI0_POPR; // drain RX FIFO - } while ((sr & (15 << 12)) > (3 << 12)); - } - //void waitFifoEmpty(void) __attribute__((always_inline)) { - void waitFifoEmpty(void) { - uint32_t sr; - uint32_t tmp __attribute__((unused)); - do { - sr = SPI0.SR; - if (sr & 0xF0) tmp = SPI0_POPR; // drain RX FIFO - } while ((sr & 0xF0F0) > 0); // wait both RX & TX empty - } - void waitTransmitComplete(void) __attribute__((always_inline)) { - uint32_t tmp __attribute__((unused)); - while (!(SPI0.SR & SPI_SR_TCF)) ; // wait until final output done - tmp = SPI0_POPR; // drain the final RX FIFO word - } - void writecommand_cont(uint8_t c) __attribute__((always_inline)) { - SPI0.PUSHR = c | (pcs_command << 16) | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT; - waitFifoNotFull(); - } - void writedata8_cont(uint8_t c) __attribute__((always_inline)) { - SPI0.PUSHR = c | (pcs_data << 16) | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT; - waitFifoNotFull(); - } - void writedata16_cont(uint16_t d) __attribute__((always_inline)) { - SPI0.PUSHR = d | (pcs_data << 16) | SPI_PUSHR_CTAS(1) | SPI_PUSHR_CONT; - waitFifoNotFull(); - } - void writecommand_last(uint8_t c) __attribute__((always_inline)) { - waitFifoEmpty(); - SPI0.SR = SPI_SR_TCF; - SPI0.PUSHR = c | (pcs_command << 16) | SPI_PUSHR_CTAS(0); - waitTransmitComplete(); - } - void writedata8_last(uint8_t c) __attribute__((always_inline)) { - waitFifoEmpty(); - SPI0.SR = SPI_SR_TCF; - SPI0.PUSHR = c | (pcs_data << 16) | SPI_PUSHR_CTAS(0); - waitTransmitComplete(); - } - void writedata16_last(uint16_t d) __attribute__((always_inline)) { - waitFifoEmpty(); - SPI0.SR = SPI_SR_TCF; - SPI0.PUSHR = d | (pcs_data << 16) | SPI_PUSHR_CTAS(1); - waitTransmitComplete(); - } - void HLine(int16_t x, int16_t y, int16_t w, uint16_t color) - __attribute__((always_inline)) { - setAddr(x, y, x+w-1, y); - writecommand_cont(ILI9341_RAMWR); - do { writedata16_cont(color); } while (--w > 0); - } - void VLine(int16_t x, int16_t y, int16_t h, uint16_t color) - __attribute__((always_inline)) { - setAddr(x, y, x, y+h-1); - writecommand_cont(ILI9341_RAMWR); - do { writedata16_cont(color); } while (--h > 0); - } - void Pixel(int16_t x, int16_t y, uint16_t color) - __attribute__((always_inline)) { - setAddr(x, y, x, y); - writecommand_cont(ILI9341_RAMWR); - writedata16_cont(color); - } - - - -//}; - -#ifndef swap -#define swap(a, b) { typeof(a) t = a; a = b; b = t; } -#endif - -#endif diff --git a/Source/include/hal.h b/Source/include/hal.h index 8ed45aa..7757585 100644 --- a/Source/include/hal.h +++ b/Source/include/hal.h @@ -27,7 +27,7 @@ #include "stm32f7xx_hal_i2c.h" #endif -#include +//#include typedef struct _Gpio_Pin { diff --git a/Source/include/main.h b/Source/include/main.h index 6667686..5cc5c0a 100644 --- a/Source/include/main.h +++ b/Source/include/main.h @@ -4,6 +4,8 @@ //#define PSDR2 2 //#define PSDR25 3 #define PSDR257 4 +#define ARM_MATH_CM7 + //#define PSDR_BOARD PSDR2 @@ -48,6 +50,7 @@ #include "stm32f7xx_hal_dac.h" #include "stm32f7xx_hal_uart.h" #include "stm32f7xx_hal_usart.h" +#include "stm32f7xx_hal_i2c.h" #endif @@ -75,7 +78,7 @@ //#include "stm32f4xx_hal_rtc.h" //#include "stm32f4xx_hal_adc.h" -//#include "stm32f4xx_hal_i2c.h" + #include "images.h" //#include "misc.h" diff --git a/Source/include/uart.h b/Source/include/uart.h deleted file mode 100644 index 932f0c4..0000000 --- a/Source/include/uart.h +++ /dev/null @@ -1,65 +0,0 @@ -/* uart.h - * - * gunbox uart interface - * - * Copyright 2013 RPH Engineering, VPI Engineering - */ - -#ifndef UART_H_ - #define UART_H_ - - #include - - - - enum Uarts - { - uart_uartNone, - uart_uart1, - uart_uart2, - uart_uart3, - }; - - - - int uart_putChar(uint8_t uart, char c); - // enqueue a char to a uart - // returns 0 on success - - int uart_getChar(uint8_t uart, char* c); - // dequeue a char from a uart and put it in *c - // returns 0 on success - - int uart_write(uint8_t uart, uint8_t* buffer, uint8_t size); - // write a buffer of data to a uart - // return the number of bytes written - - int uart_read(uint8_t uart, uint8_t* buffer, uint8_t size); - // try to read size bytes of data into buffer from a uart - // return the number of bytes read - - void uart_init(uint8_t uart); - // initialize specified uart - - void uart_deinit(uint8_t uart); - // deinitialize specified uart - - void uart_enable(uint8_t uart); - // enable a uart, enables rxne interrupt, does not set other config info - - void uart_disable(uint8_t uart); - // disable a uart and the uart rxne and txe itnerrupts but leave registers setup - - void uart_purgeRxQueue(uint8_t uart); - // purge the rx q for uart - - int uart_getRxQueueCount(uint8_t uart); - // get the count for the rx q for uart - - int uart_queueHasChar(char c, uint8_t uart); - // return true if the rx q contains c - - int uart_queueContains(char thingToFind[], int thingToFindLength, uint8_t); - - -#endif /* UART_H_ */ diff --git a/Source/src/ILI9341_t3.c b/Source/src/ILI9341_t3.c deleted file mode 100644 index 8079fb7..0000000 --- a/Source/src/ILI9341_t3.c +++ /dev/null @@ -1,912 +0,0 @@ -// https://github.com/PaulStoffregen/ILI9341_t3 -// http://forum.pjrc.com/threads/26305-Highly-optimized-ILI9341-(320x240-TFT-color-display)-library - -/*************************************************** - This is our library for the Adafruit ILI9341 Breakout and Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include "ILI9341_t3.h" -#include - -// Teensy 3.1 can only generate 30 MHz SPI when running at 120 MHz (overclock) -// At all other speeds, SPI.beginTransaction() will use the fastest available clock -#define SPICLOCK 30000000 - -#define WIDTH ILI9341_TFTWIDTH -#define HEIGHT ILI9341_TFTHEIGHT - -// Constructor when using hardware SPI. Faster, but must use SPI pins -// specific to each board type (e.g. 11,13 for Uno, 51,52 for Mega, etc.) -ILI9341_t3(uint8_t cs, uint8_t dc, uint8_t rst) -{ - _cs = cs; - _dc = dc; - _rst = rst; - _width = WIDTH; - _height = HEIGHT; - rotation = 0; - cursor_y = cursor_x = 0; - textsize = 1; - textcolor = textbgcolor = 0xFFFF; - wrap = true; -} - -void ILI9341_t3_setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) -{ - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x0, y0, x1, y1); - writecommand_last(ILI9341_RAMWR); // write to RAM - SPI.endTransaction(); -} - -void ILI9341_t3_pushColor(uint16_t color) -{ - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - writedata16_last(color); - SPI.endTransaction(); -} - -void ILI9341_t3_drawPixel(int16_t x, int16_t y, uint16_t color) { - - if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return; - - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x, y, x, y); - writecommand_cont(ILI9341_RAMWR); - writedata16_last(color); - SPI.endTransaction(); -} - -void ILI9341_t3_drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) -{ - // Rudimentary clipping - if((x >= _width) || (y >= _height)) return; - if((y+h-1) >= _height) h = _height-y; - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x, y, x, y+h-1); - writecommand_cont(ILI9341_RAMWR); - while (h-- > 1) { - writedata16_cont(color); - } - writedata16_last(color); - SPI.endTransaction(); -} - -void ILI9341_t3_drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) -{ - // Rudimentary clipping - if((x >= _width) || (y >= _height)) return; - if((x+w-1) >= _width) w = _width-x; - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x, y, x+w-1, y); - writecommand_cont(ILI9341_RAMWR); - while (w-- > 1) { - writedata16_cont(color); - } - writedata16_last(color); - SPI.endTransaction(); -} - -void ILI9341_t3_fillScreen(uint16_t color) -{ - fillRect(0, 0, _width, _height, color); -} - -// fill a rectangle -void ILI9341_t3_fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) -{ - // rudimentary clipping (drawChar w/big text requires this) - if((x >= _width) || (y >= _height)) return; - if((x + w - 1) >= _width) w = _width - x; - if((y + h - 1) >= _height) h = _height - y; - - // TODO: this can result in a very long transaction time - // should break this into multiple transactions, even though - // it'll cost more overhead, so we don't stall other SPI libs - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x, y, x+w-1, y+h-1); - writecommand_cont(ILI9341_RAMWR); - for(y=h; y>0; y--) { - for(x=w; x>1; x--) { - writedata16_cont(color); - } - writedata16_last(color); - } - SPI.endTransaction(); -} - - - -#define MADCTL_MY 0x80 -#define MADCTL_MX 0x40 -#define MADCTL_MV 0x20 -#define MADCTL_ML 0x10 -#define MADCTL_RGB 0x00 -#define MADCTL_BGR 0x08 -#define MADCTL_MH 0x04 - -void ILI9341_t3_setRotation(uint8_t m) -{ - writecommand_cont(ILI9341_MADCTL); - rotation = m % 4; // can't be higher than 3 - switch (rotation) { - case 0: - writedata8_last(MADCTL_MX | MADCTL_BGR); - _width = ILI9341_TFTWIDTH; - _height = ILI9341_TFTHEIGHT; - break; - case 1: - writedata8_last(MADCTL_MV | MADCTL_BGR); - _width = ILI9341_TFTHEIGHT; - _height = ILI9341_TFTWIDTH; - break; - case 2: - writedata8_last(MADCTL_MY | MADCTL_BGR); - _width = ILI9341_TFTWIDTH; - _height = ILI9341_TFTHEIGHT; - break; - case 3: - writedata8_last(MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR); - _width = ILI9341_TFTHEIGHT; - _height = ILI9341_TFTWIDTH; - break; - } -} - - -void ILI9341_t3_invertDisplay(bool i) -{ - writecommand_last(i ? ILI9341_INVON : ILI9341_INVOFF); -} - - - - - - - - - - -/* -uint8_t ILI9341_t3::readdata(void) -{ - uint8_t r; - // Try to work directly with SPI registers... - // First wait until output queue is empty - uint16_t wTimeout = 0xffff; - while (((SPI0.SR) & (15 << 12)) && (--wTimeout)) ; // wait until empty - -// SPI0_MCR |= SPI_MCR_CLR_RXF; // discard any received data -// SPI0_SR = SPI_SR_TCF; - - // Transfer a 0 out... - writedata8_cont(0); - - // Now wait until completed. - wTimeout = 0xffff; - while (((SPI0.SR) & (15 << 12)) && (--wTimeout)) ; // wait until empty - r = SPI0.POPR; // get the received byte... should check for it first... - return r; -} - */ - - -uint8_t ILI9341_t3_readcommand8(uint8_t c, uint8_t index) -{ - uint16_t wTimeout = 0xffff; - uint8_t r=0; - - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - while (((SPI0.SR) & (15 << 12)) && (--wTimeout)) ; // wait until empty - - // Make sure the last frame has been sent... - SPI0.SR = SPI_SR_TCF; // dlear it out; - wTimeout = 0xffff; - while (!((SPI0.SR) & SPI_SR_TCF) && (--wTimeout)) ; // wait until it says the last frame completed - - // clear out any current received bytes - wTimeout = 0x10; // should not go more than 4... - while ((((SPI0.SR) >> 4) & 0xf) && (--wTimeout)) { - r = SPI0.POPR; - } - - //writecommand(0xD9); // sekret command - SPI0.PUSHR = 0xD9 | (pcs_command << 16) | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT; -// while (((SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full - - // writedata(0x10 + index); - SPI0.PUSHR = (0x10 + index) | (pcs_data << 16) | SPI_PUSHR_CTAS(0); -// while (((SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full - - // writecommand(c); - SPI0.PUSHR = c | (pcs_command << 16) | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT; -// while (((SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full - - // readdata - SPI0.PUSHR = 0 | (pcs_data << 16) | SPI_PUSHR_CTAS(0); -// while (((SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full - - // Now wait until completed. - wTimeout = 0xffff; - while (((SPI0.SR) & (15 << 12)) && (--wTimeout)) ; // wait until empty - - // Make sure the last frame has been sent... - SPI0.SR = SPI_SR_TCF; // dlear it out; - wTimeout = 0xffff; - while (!((SPI0.SR) & SPI_SR_TCF) && (--wTimeout)) ; // wait until it says the last frame completed - - wTimeout = 0x10; // should not go more than 4... - // lets get all of the values on the FIFO - while ((((SPI0.SR) >> 4) & 0xf) && (--wTimeout)) { - r = SPI0.POPR; - } - SPI.endTransaction(); - return r; // get the received byte... should check for it first... -} - - -// KJE Added functions to read pixel data... -uint16_t ILI9341_t3_readPixel(int16_t x, int16_t y) -{ - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - writecommand_cont(ILI9341_CASET); // Column addr set - writedata16_cont(x); // XSTART - x++; - writedata16_cont(x); // XEND - - writecommand_cont(ILI9341_PASET); // Row addr set - writedata16_cont(y); // YSTART - y++; - writedata16_cont(y); // YEND - - writecommand_cont(ILI9341_RAMRD); // write to RAM - - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); - uint16_t r = SPI.transfer(0x00); - r <<= 8; - r |= SPI.transfer(0x00); - digitalWrite(_cs, HIGH); - SPI.endTransaction(); - return r; -} - -static const uint8_t init_commands[] = { - 4, 0xEF, 0x03, 0x80, 0x02, - 4, 0xCF, 0x00, 0XC1, 0X30, - 5, 0xED, 0x64, 0x03, 0X12, 0X81, - 4, 0xE8, 0x85, 0x00, 0x78, - 6, 0xCB, 0x39, 0x2C, 0x00, 0x34, 0x02, - 2, 0xF7, 0x20, - 3, 0xEA, 0x00, 0x00, - 2, ILI9341_PWCTR1, 0x23, // Power control - 2, ILI9341_PWCTR2, 0x10, // Power control - 3, ILI9341_VMCTR1, 0x3e, 0x28, // VCM control - 2, ILI9341_VMCTR2, 0x86, // VCM control2 - 2, ILI9341_MADCTL, 0x48, // Memory Access Control - 2, ILI9341_PIXFMT, 0x55, - 3, ILI9341_FRMCTR1, 0x00, 0x18, - 4, ILI9341_DFUNCTR, 0x08, 0x82, 0x27, // Display Function Control - 2, 0xF2, 0x00, // Gamma Function Disable - 2, ILI9341_GAMMASET, 0x01, // Gamma curve selected - 16, ILI9341_GMCTRP1, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, - 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, // Set Gamma - 16, ILI9341_GMCTRN1, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, - 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, // Set Gamma - 0 -}; - -void ILI9341_t3_begin(void) -{ - SPI.begin(); - if (SPI.pinIsChipSelect(_cs, _dc)) { - pcs_data = SPI.setCS(_cs); - pcs_command = pcs_data | SPI.setCS(_dc); - } else { - pcs_data = 0; - pcs_command = 0; - return; - } - // toggle RST low to reset - if (_rst < 255) { - pinMode(_rst, OUTPUT); - digitalWrite(_rst, HIGH); - delay(5); - digitalWrite(_rst, LOW); - delay(20); - digitalWrite(_rst, HIGH); - delay(150); - } - /* - uint8_t x = readcommand8(ILI9341_RDMODE); - Serial.print("\nDisplay Power Mode: 0x"); Serial.println(x, HEX); - x = readcommand8(ILI9341_RDMADCTL); - Serial.print("\nMADCTL Mode: 0x"); Serial.println(x, HEX); - x = readcommand8(ILI9341_RDPIXFMT); - Serial.print("\nPixel Format: 0x"); Serial.println(x, HEX); - x = readcommand8(ILI9341_RDIMGFMT); - Serial.print("\nImage Format: 0x"); Serial.println(x, HEX); - x = readcommand8(ILI9341_RDSELFDIAG); - Serial.print("\nSelf Diagnostic: 0x"); Serial.println(x, HEX); - */ - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - const uint8_t *addr = init_commands; - while (1) { - uint8_t count = *addr++; - if (count-- == 0) break; - writecommand_cont(*addr++); - while (count-- > 0) { - writedata8_cont(*addr++); - } - } - writecommand_last(ILI9341_SLPOUT); // Exit Sleep - SPI.endTransaction(); - - delay(120); - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - writecommand_last(ILI9341_DISPON); // Display on - SPI.endTransaction(); -} - - - - -/* -This is the core graphics library for all our displays, providing a common -set of graphics primitives (points, lines, circles, etc.). It needs to be -paired with a hardware-specific library for each display device we carry -(to handle the lower-level functions). - -Adafruit invests time and resources providing this open source code, please -support Adafruit & open-source hardware by purchasing products from Adafruit! - -Copyright (c) 2013 Adafruit Industries. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- 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. - -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 HOLDER 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. -*/ - -#include "glcdfont.c" - -// Draw a circle outline -void ILI9341_t3_drawCircle(int16_t x0, int16_t y0, int16_t r, - uint16_t color) { - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - drawPixel(x0 , y0+r, color); - drawPixel(x0 , y0-r, color); - drawPixel(x0+r, y0 , color); - drawPixel(x0-r, y0 , color); - - while (x= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - drawPixel(x0 + x, y0 + y, color); - drawPixel(x0 - x, y0 + y, color); - drawPixel(x0 + x, y0 - y, color); - drawPixel(x0 - x, y0 - y, color); - drawPixel(x0 + y, y0 + x, color); - drawPixel(x0 - y, y0 + x, color); - drawPixel(x0 + y, y0 - x, color); - drawPixel(x0 - y, y0 - x, color); - } -} - -void ILI9341_t3_drawCircleHelper( int16_t x0, int16_t y0, - int16_t r, uint8_t cornername, uint16_t color) { - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - while (x= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - if (cornername & 0x4) { - drawPixel(x0 + x, y0 + y, color); - drawPixel(x0 + y, y0 + x, color); - } - if (cornername & 0x2) { - drawPixel(x0 + x, y0 - y, color); - drawPixel(x0 + y, y0 - x, color); - } - if (cornername & 0x8) { - drawPixel(x0 - y, y0 + x, color); - drawPixel(x0 - x, y0 + y, color); - } - if (cornername & 0x1) { - drawPixel(x0 - y, y0 - x, color); - drawPixel(x0 - x, y0 - y, color); - } - } -} - -void ILI9341_t3_fillCircle(int16_t x0, int16_t y0, int16_t r, - uint16_t color) { - drawFastVLine(x0, y0-r, 2*r+1, color); - fillCircleHelper(x0, y0, r, 3, 0, color); -} - -// Used to do circles and roundrects -void ILI9341_t3_fillCircleHelper(int16_t x0, int16_t y0, int16_t r, - uint8_t cornername, int16_t delta, uint16_t color) { - - int16_t f = 1 - r; - int16_t ddF_x = 1; - int16_t ddF_y = -2 * r; - int16_t x = 0; - int16_t y = r; - - while (x= 0) { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - if (cornername & 0x1) { - drawFastVLine(x0+x, y0-y, 2*y+1+delta, color); - drawFastVLine(x0+y, y0-x, 2*x+1+delta, color); - } - if (cornername & 0x2) { - drawFastVLine(x0-x, y0-y, 2*y+1+delta, color); - drawFastVLine(x0-y, y0-x, 2*x+1+delta, color); - } - } -} - - -// Bresenham's algorithm - thx wikpedia -void ILI9341_t3_drawLine(int16_t x0, int16_t y0, - int16_t x1, int16_t y1, uint16_t color) -{ - if (y0 == y1) { - if (x1 > x0) { - drawFastHLine(x0, y0, x1 - x0 + 1, color); - } else if (x1 < x0) { - drawFastHLine(x1, y0, x0 - x1 + 1, color); - } else { - drawPixel(x0, y0, color); - } - return; - } else if (x0 == x1) { - if (y1 > y0) { - drawFastVLine(x0, y0, y1 - y0 + 1, color); - } else { - drawFastVLine(x0, y1, y0 - y1 + 1, color); - } - return; - } - - bool steep = abs(y1 - y0) > abs(x1 - x0); - if (steep) { - swap(x0, y0); - swap(x1, y1); - } - if (x0 > x1) { - swap(x0, x1); - swap(y0, y1); - } - - int16_t dx, dy; - dx = x1 - x0; - dy = abs(y1 - y0); - - int16_t err = dx / 2; - int16_t ystep; - - if (y0 < y1) { - ystep = 1; - } else { - ystep = -1; - } - - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - int16_t xbegin = x0; - if (steep) { - for (; x0<=x1; x0++) { - err -= dy; - if (err < 0) { - int16_t len = x0 - xbegin; - if (len) { - VLine(y0, xbegin, len + 1, color); - } else { - Pixel(y0, x0, color); - } - xbegin = x0 + 1; - y0 += ystep; - err += dx; - } - } - if (x0 > xbegin + 1) { - VLine(y0, xbegin, x0 - xbegin, color); - } - - } else { - for (; x0<=x1; x0++) { - err -= dy; - if (err < 0) { - int16_t len = x0 - xbegin; - if (len) { - HLine(xbegin, y0, len + 1, color); - } else { - Pixel(x0, y0, color); - } - xbegin = x0 + 1; - y0 += ystep; - err += dx; - } - } - if (x0 > xbegin + 1) { - HLine(xbegin, y0, x0 - xbegin, color); - } - } - writecommand_last(ILI9341_NOP); - SPI.endTransaction(); -} - -// Draw a rectangle -void ILI9341_t3_drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) -{ - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - HLine(x, y, w, color); - HLine(x, y+h-1, w, color); - VLine(x, y, h, color); - VLine(x+w-1, y, h, color); - writecommand_last(ILI9341_NOP); - SPI.endTransaction(); -} - -// Draw a rounded rectangle -void ILI9341_t3_drawRoundRect(int16_t x, int16_t y, int16_t w, - int16_t h, int16_t r, uint16_t color) { - // smarter version - drawFastHLine(x+r , y , w-2*r, color); // Top - drawFastHLine(x+r , y+h-1, w-2*r, color); // Bottom - drawFastVLine(x , y+r , h-2*r, color); // Left - drawFastVLine(x+w-1, y+r , h-2*r, color); // Right - // draw four corners - drawCircleHelper(x+r , y+r , r, 1, color); - drawCircleHelper(x+w-r-1, y+r , r, 2, color); - drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color); - drawCircleHelper(x+r , y+h-r-1, r, 8, color); -} - -// Fill a rounded rectangle -void ILI9341_t3_fillRoundRect(int16_t x, int16_t y, int16_t w, - int16_t h, int16_t r, uint16_t color) { - // smarter version - fillRect(x+r, y, w-2*r, h, color); - - // draw four corners - fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color); - fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color); -} - -// Draw a triangle -void ILI9341_t3_drawTriangle(int16_t x0, int16_t y0, - int16_t x1, int16_t y1, - int16_t x2, int16_t y2, uint16_t color) { - drawLine(x0, y0, x1, y1, color); - drawLine(x1, y1, x2, y2, color); - drawLine(x2, y2, x0, y0, color); -} - -// Fill a triangle -void ILI9341_t3_fillTriangle ( int16_t x0, int16_t y0, - int16_t x1, int16_t y1, - int16_t x2, int16_t y2, uint16_t color) { - - int16_t a, b, y, last; - - // Sort coordinates by Y order (y2 >= y1 >= y0) - if (y0 > y1) { - swap(y0, y1); swap(x0, x1); - } - if (y1 > y2) { - swap(y2, y1); swap(x2, x1); - } - if (y0 > y1) { - swap(y0, y1); swap(x0, x1); - } - - if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing - a = b = x0; - if(x1 < a) a = x1; - else if(x1 > b) b = x1; - if(x2 < a) a = x2; - else if(x2 > b) b = x2; - drawFastHLine(a, y0, b-a+1, color); - return; - } - - int16_t - dx01 = x1 - x0, - dy01 = y1 - y0, - dx02 = x2 - x0, - dy02 = y2 - y0, - dx12 = x2 - x1, - dy12 = y2 - y1, - sa = 0, - sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y1 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y0=y1 - // (flat-topped triangle). - if(y1 == y2) last = y1; // Include y1 scanline - else last = y1-1; // Skip it - - for(y=y0; y<=last; y++) { - a = x0 + sa / dy01; - b = x0 + sb / dy02; - sa += dx01; - sb += dx02; - /* longhand: - a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if(a > b) swap(a,b); - drawFastHLine(a, y, b-a+1, color); - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y1=y2. - sa = dx12 * (y - y1); - sb = dx02 * (y - y0); - for(; y<=y2; y++) { - a = x1 + sa / dy12; - b = x0 + sb / dy02; - sa += dx12; - sb += dx02; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if(a > b) swap(a,b); - drawFastHLine(a, y, b-a+1, color); - } -} - -void ILI9341_t3_drawBitmap(int16_t x, int16_t y, - const uint8_t *bitmap, int16_t w, int16_t h, - uint16_t color) { - - int16_t i, j, byteWidth = (w + 7) / 8; - - for(j=0; j> (i & 7))) { - drawPixel(x+i, y+j, color); - } - } - } -} - -size_t ILI9341_t3_write(uint8_t c) { - if (c == '\n') { - cursor_y += textsize*8; - cursor_x = 0; - } else if (c == '\r') { - // skip em - } else { - drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize); - cursor_x += textsize*6; - if (wrap && (cursor_x > (_width - textsize*6))) { - cursor_y += textsize*8; - cursor_x = 0; - } - } - return 1; -} - -// Draw a character -void ILI9341_t3_drawChar(int16_t x, int16_t y, unsigned char c, - uint16_t fgcolor, uint16_t bgcolor, uint8_t size) -{ - if((x >= _width) || // Clip right - (y >= _height) || // Clip bottom - ((x + 6 * size - 1) < 0) || // Clip left TODO: is this correct? - ((y + 8 * size - 1) < 0)) // Clip top TODO: is this correct? - return; - - if (fgcolor == bgcolor) { - // This transparent approach is only about 20% faster - if (size == 1) { - uint8_t mask = 0x01; - int16_t xoff, yoff; - for (yoff=0; yoff < 8; yoff++) { - uint8_t line = 0; - for (xoff=0; xoff < 5; xoff++) { - if (font[c * 5 + xoff] & mask) line |= 1; - line <<= 1; - } - line >>= 1; - xoff = 0; - while (line) { - if (line == 0x1F) { - drawFastHLine(x + xoff, y + yoff, 5, fgcolor); - break; - } else if (line == 0x1E) { - drawFastHLine(x + xoff, y + yoff, 4, fgcolor); - break; - } else if ((line & 0x1C) == 0x1C) { - drawFastHLine(x + xoff, y + yoff, 3, fgcolor); - line <<= 4; - xoff += 4; - } else if ((line & 0x18) == 0x18) { - drawFastHLine(x + xoff, y + yoff, 2, fgcolor); - line <<= 3; - xoff += 3; - } else if ((line & 0x10) == 0x10) { - drawPixel(x + xoff, y + yoff, fgcolor); - line <<= 2; - xoff += 2; - } else { - line <<= 1; - xoff += 1; - } - } - mask = mask << 1; - } - } else { - uint8_t mask = 0x01; - int16_t xoff, yoff; - for (yoff=0; yoff < 8; yoff++) { - uint8_t line = 0; - for (xoff=0; xoff < 5; xoff++) { - if (font[c * 5 + xoff] & mask) line |= 1; - line <<= 1; - } - line >>= 1; - xoff = 0; - while (line) { - if (line == 0x1F) { - fillRect(x + xoff * size, y + yoff * size, - 5 * size, size, fgcolor); - break; - } else if (line == 0x1E) { - fillRect(x + xoff * size, y + yoff * size, - 4 * size, size, fgcolor); - break; - } else if ((line & 0x1C) == 0x1C) { - fillRect(x + xoff * size, y + yoff * size, - 3 * size, size, fgcolor); - line <<= 4; - xoff += 4; - } else if ((line & 0x18) == 0x18) { - fillRect(x + xoff * size, y + yoff * size, - 2 * size, size, fgcolor); - line <<= 3; - xoff += 3; - } else if ((line & 0x10) == 0x10) { - fillRect(x + xoff * size, y + yoff * size, - size, size, fgcolor); - line <<= 2; - xoff += 2; - } else { - line <<= 1; - xoff += 1; - } - } - mask = mask << 1; - } - } - } else { - // This solid background approach is about 5 time faster - SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0)); - setAddr(x, y, x + 6 * size - 1, y + 8 * size); - writecommand_cont(ILI9341_RAMWR); - uint8_t xr, yr; - uint8_t mask = 0x01; - uint16_t color; - for (y=0; y < 8; y++) { - for (yr=0; yr < size; yr++) { - for (x=0; x < 5; x++) { - if (font[c * 5 + x] & mask) { - color = fgcolor; - } else { - color = bgcolor; - } - for (xr=0; xr < size; xr++) { - writedata16_cont(color); - } - } - for (xr=0; xr < size; xr++) { - writedata16_cont(bgcolor); - } - } - mask = mask << 1; - } - uint32_t n = 6 * size * size; - do { - writedata16_cont(bgcolor); - n--; - } while (n > 1); - writedata16_last(bgcolor); - SPI.endTransaction(); - } -} - -void ILI9341_t3_setCursor(int16_t x, int16_t y) { - cursor_x = x; - cursor_y = y; -} - -void ILI9341_t3_setTextSize(uint8_t s) { - textsize = (s > 0) ? s : 1; -} - -void ILI9341_t3_setTextColor(uint16_t c) { - // For 'transparent' background, we'll set the bg - // to the same as fg instead of using a flag - textcolor = textbgcolor = c; -} - -void ILI9341_t3_setTextColor(uint16_t c, uint16_t b) { - textcolor = c; - textbgcolor = b; -} - -void ILI9341_t3_setTextWrap(bool w) { - wrap = w; -} - -uint8_t ILI9341_t3_getRotation(void) { - return rotation; -} - - diff --git a/Source/src/main.c b/Source/src/main.c index 21e51bd..0be2171 100644 --- a/Source/src/main.c +++ b/Source/src/main.c @@ -702,12 +702,12 @@ void setGainPot(uint8_t a, uint8_t b) } -USART1_IRQHandler(void) -{ - //blink_led_on(); - USARTx_IRQHandler(); - -} +//USART1_IRQHandler(void) +//{ +// //blink_led_on(); +// USARTx_IRQHandler(); +// +//} __IO ITStatus UartReady = RESET; @@ -716,58 +716,58 @@ uint8_t aRxBuffer[256]; void configUartPeripheral() { // //Enable Clocks - __GPIOC_CLK_ENABLE(); - __USART6_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct; - -// //Setup TX Pin - GPIO_InitStruct.Pin = RX_TO_GPS.pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = GPIO_AF8_USART6; - HAL_GPIO_Init(RX_TO_GPS.port, &GPIO_InitStruct); - - //Setup RX Pin - //It doesn't get set as an input? - GPIO_InitStruct.Pin = TX_FROM_GPS.pin; - GPIO_InitStruct.Alternate = GPIO_AF8_USART6; - HAL_GPIO_Init(TX_FROM_GPS.port, &GPIO_InitStruct); - - -// //Configure NVIC -// HAL_NVIC_SetPriority(USART1_IRQn, 0, 1); -// HAL_NVIC_EnableIRQ(USART1_IRQn); +// __GPIOC_CLK_ENABLE(); +// __USART6_CLK_ENABLE(); // - UartHandle.Instance = USART6; - UartHandle.Init.BaudRate = 9600; - UartHandle.Init.WordLength = UART_WORDLENGTH_8B; - UartHandle.Init.StopBits = UART_STOPBITS_1; - UartHandle.Init.Parity = UART_PARITY_NONE; - UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; - UartHandle.Init.Mode = UART_MODE_TX_RX; - UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; - - if(HAL_UART_Init(&UartHandle) != HAL_OK) - { - trace_puts("UART didn't init rightly."); - } - - TinyGPS_init(); - - while(1) - { - if(HAL_UART_Receive(&UartHandle, (uint8_t *)aRxBuffer, 256, 5000) != HAL_OK) - { - trace_puts("UART recieve didn't work. No sir."); - } else { - trace_puts(aRxBuffer); - for(int i = 0; i < 256; i++) - TinyGPS_encode(aRxBuffer[i]); - - } - } +// GPIO_InitTypeDef GPIO_InitStruct; +// +//// //Setup TX Pin +// GPIO_InitStruct.Pin = RX_TO_GPS.pin; +// GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +// GPIO_InitStruct.Pull = GPIO_NOPULL; +// GPIO_InitStruct.Speed = GPIO_SPEED_FAST; +// GPIO_InitStruct.Alternate = GPIO_AF8_USART6; +// HAL_GPIO_Init(RX_TO_GPS.port, &GPIO_InitStruct); +// +// //Setup RX Pin +// //It doesn't get set as an input? +// GPIO_InitStruct.Pin = TX_FROM_GPS.pin; +// GPIO_InitStruct.Alternate = GPIO_AF8_USART6; +// HAL_GPIO_Init(TX_FROM_GPS.port, &GPIO_InitStruct); +// +// +//// //Configure NVIC +//// HAL_NVIC_SetPriority(USART1_IRQn, 0, 1); +//// HAL_NVIC_EnableIRQ(USART1_IRQn); +//// +// UartHandle.Instance = USART6; +// UartHandle.Init.BaudRate = 9600; +// UartHandle.Init.WordLength = UART_WORDLENGTH_8B; +// UartHandle.Init.StopBits = UART_STOPBITS_1; +// UartHandle.Init.Parity = UART_PARITY_NONE; +// UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; +// UartHandle.Init.Mode = UART_MODE_TX_RX; +// UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; +// +// if(HAL_UART_Init(&UartHandle) != HAL_OK) +// { +// trace_puts("UART didn't init rightly."); +// } +// +// TinyGPS_init(); +// +// while(1) +// { +// if(HAL_UART_Receive(&UartHandle, (uint8_t *)aRxBuffer, 256, 5000) != HAL_OK) +// { +// trace_puts("UART recieve didn't work. No sir."); +// } else { +// trace_puts(aRxBuffer); +// for(int i = 0; i < 256; i++) +// TinyGPS_encode(aRxBuffer[i]); +// +// } +// } } @@ -930,7 +930,7 @@ i2cLoop(); //Also since this is a form of direct conversion receiver (two of them together) I was worried about AM broadcast interference //but I haven't noticed any, again, maybe I did something right? Beginner's luck? - HAL_UART_Receive_IT(&UartHandle, (uint8_t*)aRxBuffer, 16); + //HAL_UART_Receive_IT(&UartHandle, (uint8_t*)aRxBuffer, 16); int* p = UartHandle.pRxBuffPtr; int* q = &aRxBuffer; @@ -1288,6 +1288,7 @@ void drawWaterfall() else gradient = &bitmapWebSdrGradient; + //arm_cmplx_mag_f32(samplesDisplay, magnitudes, FFT_SIZE); arm_cmplx_mag_f32(samplesDisplay, magnitudes, FFT_SIZE); float fftMax = 0; //AH! These are being reset each time! Static makes them persistant right? Does it also ensure they are diff --git a/Source/src/misc.c b/Source/src/misc.c deleted file mode 100644 index c211e87..0000000 --- a/Source/src/misc.c +++ /dev/null @@ -1,249 +0,0 @@ -/** - ****************************************************************************** - * @file misc.c - * @author MCD Application Team - * @version V1.3.0 - * @date 08-November-2013 - * @brief This file provides all the miscellaneous firmware functions (add-on - * to CMSIS functions). - * - * @verbatim - * - * =================================================================== - * How to configure Interrupts using driver - * =================================================================== - * - * This section provide functions allowing to configure the NVIC interrupts (IRQ). - * The Cortex-M4 exceptions are managed by CMSIS functions. - * - * 1. Configure the NVIC Priority Grouping using NVIC_PriorityGroupConfig() - * function according to the following table. - - * The table below gives the allowed values of the pre-emption priority and subpriority according - * to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function - * ========================================================================================================================== - * NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description - * ========================================================================================================================== - * NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority - * | | | 4 bits for subpriority - * -------------------------------------------------------------------------------------------------------------------------- - * NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority - * | | | 3 bits for subpriority - * -------------------------------------------------------------------------------------------------------------------------- - * NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority - * | | | 2 bits for subpriority - * -------------------------------------------------------------------------------------------------------------------------- - * NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority - * | | | 1 bits for subpriority - * -------------------------------------------------------------------------------------------------------------------------- - * NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority - * | | | 0 bits for subpriority - * ========================================================================================================================== - * - * 2. Enable and Configure the priority of the selected IRQ Channels using NVIC_Init() - * - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the subpriority. - * - * @note IRQ priority order (sorted by highest to lowest priority): - * - Lowest pre-emption priority - * - Lowest subpriority - * - Lowest hardware priority (IRQ number) - * - * @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2013 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "misc.h" - -/** @addtogroup STM32F4xx_StdPeriph_Driver - * @{ - */ - -/** @defgroup MISC - * @brief MISC driver modules - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup MISC_Private_Functions - * @{ - */ - -/** - * @brief Configures the priority grouping: pre-emption priority and subpriority. - * @param NVIC_PriorityGroup: specifies the priority grouping bits length. - * This parameter can be one of the following values: - * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority - * 4 bits for subpriority - * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority - * 3 bits for subpriority - * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority - * 2 bits for subpriority - * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority - * 1 bits for subpriority - * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority - * 0 bits for subpriority - * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. - * The pending IRQ priority will be managed only by the subpriority. - * @retval None - */ -void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) -{ - /* Check the parameters */ - assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); - - /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */ - SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; -} - -/** - * @brief Initializes the NVIC peripheral according to the specified - * parameters in the NVIC_InitStruct. - * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() - * function should be called before. - * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains - * the configuration information for the specified NVIC peripheral. - * @retval None - */ -void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) -{ - uint8_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; - - /* Check the parameters */ -// assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd)); -// assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority)); -// assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority)); - - if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) - { - /* Compute the Corresponding IRQ Priority --------------------------------*/ - tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08; - tmppre = (0x4 - tmppriority); - tmpsub = tmpsub >> tmppriority; - - tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; - tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub); - - tmppriority = tmppriority << 0x04; - - NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority; - - /* Enable the Selected IRQ Channels --------------------------------------*/ - NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = - (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); - } - else - { - /* Disable the Selected IRQ Channels -------------------------------------*/ - NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = - (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); - } -} - -/** - * @brief Sets the vector table location and Offset. - * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory. - * This parameter can be one of the following values: - * @arg NVIC_VectTab_RAM: Vector Table in internal SRAM. - * @arg NVIC_VectTab_FLASH: Vector Table in internal FLASH. - * @param Offset: Vector Table base offset field. This value must be a multiple of 0x200. - * @retval None - */ -void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) -{ - /* Check the parameters */ - assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); - assert_param(IS_NVIC_OFFSET(Offset)); - - SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); -} - -/** - * @brief Selects the condition for the system to enter low power mode. - * @param LowPowerMode: Specifies the new mode for the system to enter low power mode. - * This parameter can be one of the following values: - * @arg NVIC_LP_SEVONPEND: Low Power SEV on Pend. - * @arg NVIC_LP_SLEEPDEEP: Low Power DEEPSLEEP request. - * @arg NVIC_LP_SLEEPONEXIT: Low Power Sleep on Exit. - * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE. - * @retval None - */ -void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) -{ - /* Check the parameters */ - assert_param(IS_NVIC_LP(LowPowerMode)); - assert_param(IS_FUNCTIONAL_STATE(NewState)); - - if (NewState != DISABLE) - { - SCB->SCR |= LowPowerMode; - } - else - { - SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); - } -} - -/** - * @brief Configures the SysTick clock source. - * @param SysTick_CLKSource: specifies the SysTick clock source. - * This parameter can be one of the following values: - * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. - * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. - * @retval None - */ -void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) -{ - /* Check the parameters */ - assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); - if (SysTick_CLKSource == SysTick_CLKSource_HCLK) - { - SysTick->CTRL |= SysTick_CLKSource_HCLK; - } - else - { - SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Source/src/uart.c b/Source/src/uart.c deleted file mode 100644 index e106cfb..0000000 --- a/Source/src/uart.c +++ /dev/null @@ -1,565 +0,0 @@ -/* uart.c - * - */ - -#include "uart.h" -#include -#include -#include -#include - - -enum -{ - uart1TxBufferSize = 64, - uart1RxBufferSize = 64, - uart2TxBufferSize = 64, - uart2RxBufferSize = 128, - uart3TxBufferSize = 64, - uart3RxBufferSize = 64 -}; - - - -static uint8_t uart1TxBuffer[uart1TxBufferSize]; -static uint8_t uart1RxBuffer[uart1RxBufferSize]; -static uint8_t uart2TxBuffer[uart2TxBufferSize]; -static uint8_t uart2RxBuffer[uart2RxBufferSize]; -static uint8_t uart3TxBuffer[uart3TxBufferSize]; -static uint8_t uart3RxBuffer[uart3RxBufferSize]; - -static Queue8 uart1TxQ; -static Queue8 uart1RxQ; -static Queue8 uart2TxQ; -static Queue8 uart2RxQ; -static Queue8 uart3TxQ; -static Queue8 uart3RxQ; - -static bool uart1TxPrimed; // is uart tx reg empty interrupt enabled -static bool uart2TxPrimed; -static bool uart3TxPrimed; -static bool uart1RxOverflow; // overlow in uart rx Q (currently set but not used) -static bool uart2RxOverflow; -static bool uart3RxOverflow; - - - -int uart_putChar(uint8_t uart, char c) -{ - // enqueue a char to a uart - // returns 0 on success - - int status; - - switch( uart ) - { - case uart_uart1: - status = queue8_enqueue(&uart1TxQ, (uint8_t)c); - - if( !uart1TxPrimed ) - { - uart1TxPrimed = true; - USART_ITConfig(USART1, USART_IT_TXE, ENABLE); - } - - break; - case uart_uart2: - status = queue8_enqueue(&uart2TxQ, (uint8_t)c); - - if( !uart2TxPrimed ) - { - uart2TxPrimed = true; - USART_ITConfig(USART2, USART_IT_TXE, ENABLE); - } - break; - case uart_uart3: - status = queue8_enqueue(&uart3TxQ, (uint8_t)c); - - if( !uart3TxPrimed ) - { - uart3TxPrimed = true; - USART_ITConfig(USART3, USART_IT_TXE, ENABLE); - } - - break; - default: - status = -1; - } - - return status; -} - - - -int uart_getChar(uint8_t uart, char* c) -{ - // dequeue a char from a uart and put it in *c - // returns 0 on success - - int status; - - switch( uart ) - { - case uart_uart1: - status = queue8_dequeue(&uart1RxQ, (uint8_t*)c); - break; - case uart_uart2: - status = queue8_dequeue(&uart2RxQ, (uint8_t*)c); - break; - case uart_uart3: - status = queue8_dequeue(&uart3RxQ, (uint8_t*)c); - break; - default: - status = -1; - } - - return status; -} - - - -int uart_write(uint8_t uart, uint8_t* buffer, uint8_t size) -{ - // write a buffer of data to a uart - // return the number of bytes written - - int status; - uint8_t bytes = 0; - Queue8* queue = 0; - - USART_TypeDef* usart; - - switch( uart ) - { - case uart_uart1: - queue = &uart1TxQ; - uart1TxPrimed = true; - usart = USART1; - break; - case uart_uart2: - queue = &uart2TxQ; - uart2TxPrimed = true; - usart = USART2; - break; - case uart_uart3: - queue = &uart3TxQ; - uart3TxPrimed = true; - usart = USART3; - break; - default: - break; - } - - if( queue ) - { - uint8_t* bufferPtr = buffer; - - for( bytes = 0; bytes < size; ++bytes ) - { - status = queue8_enqueue(queue, *bufferPtr++); - if( status ) - break; - } - - USART_ITConfig(usart, USART_IT_TXE, ENABLE); - } - - return bytes; -} - - - -int uart_read(uint8_t uart, uint8_t* buffer, uint8_t size) -{ - // try to read size bytes of data into buffer from a uart - // return the number of bytes read - - int status; - uint8_t bytes = 0; - Queue8* queue = 0; - - switch( uart ) - { - case uart_uart1: - queue = &uart1RxQ; - break; - case uart_uart2: - queue = &uart2RxQ; - break; - case uart_uart3: - queue = &uart3RxQ; - break; - default: - break; - } - - if( queue ) - { - uint8_t* bufferPtr = buffer; - - for( bytes = 0; bytes < size; ++bytes ) - { - status = queue8_dequeue(queue, bufferPtr); - if( status ) - break; - - ++bufferPtr; - } - } - - return bytes; -} - - - -void uart_init(uint8_t uart) -{ - switch( uart ) - { - case uart_uart1: - // setup data structures - queue8_init(&uart1TxQ, uart1TxBuffer, uart1TxBufferSize); - queue8_init(&uart1RxQ, uart1RxBuffer, uart1RxBufferSize); - - // init h/w - hal_setupUart1(); - - break; - - case uart_uart2: - queue8_init(&uart2TxQ, uart2TxBuffer, uart2TxBufferSize); - queue8_init(&uart2RxQ, uart2RxBuffer, uart2RxBufferSize); - - hal_setupUart2(); - - break; - - case uart_uart3: - queue8_init(&uart3TxQ, uart3TxBuffer, uart3TxBufferSize); - queue8_init(&uart3RxQ, uart3RxBuffer, uart3RxBufferSize); - -#ifdef SIRF_MODULE - hal_setupUart3(4800); -#endif -#ifdef MEDIATEK_MODULE - hal_setupUart3(9600); -#endif - - break; - - default: - // do nothing - break; - } -} - - - -void uart_deinit(uint8_t uart) -{ - switch( uart ) - { - case uart_uart1: - hal_resetUart1(); - - break; - - case uart_uart2: - hal_resetUart2(); - - break; - - case uart_uart3: - hal_resetUart3(); - - break; - - default: - // do nothing - break; - } -} - - - -void uart_enable(uint8_t uart) -{ - // enable a uart, enables rxne interrupt, does not set other config info - - switch( uart ) - { - case uart_uart1: - USART_Cmd(USART1, ENABLE); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); - break; - case uart_uart2: - USART_Cmd(USART2, ENABLE); - USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); - break; - case uart_uart3: - USART_Cmd(USART3, ENABLE); - USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); - break; - default: - break; - } -} - - - -void uart_disable(uint8_t uart) -{ - // disable a uart and the uart rxne and txe itnerrupts but leave registers setup - - switch( uart ) - { - case uart_uart1: - USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); - USART_ITConfig(USART1, USART_IT_TXE, DISABLE); - USART_Cmd(USART1, DISABLE); - break; - case uart_uart2: - USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); - USART_ITConfig(USART2, USART_IT_TXE, DISABLE); - USART_Cmd(USART2, DISABLE); - break; - case uart_uart3: - USART_ITConfig(USART3, USART_IT_RXNE, DISABLE); - USART_ITConfig(USART3, USART_IT_TXE, DISABLE); - USART_Cmd(USART3, DISABLE); - break; - default: - break; - } -} - - - -void uart_purgeRxQueue(uint8_t uart) -{ - // purge the rx q for uart - - Queue8* queue = 0; - - switch( uart ) - { - case uart_uart1: - queue = &uart1RxQ; - break; - case uart_uart2: - queue = &uart2RxQ; - break; - case uart_uart3: - queue = &uart3RxQ; - break; - default: - break; - } - - queue8_purge(queue); -} - - - -int uart_getRxQueueCount(uint8_t uart) -{ - // get the count for the rx q for uart - - int count; - Queue8* queue = 0; - - switch( uart ) - { - case uart_uart1: - queue = &uart1RxQ; - break; - case uart_uart2: - queue = &uart2RxQ; - break; - case uart_uart3: - queue = &uart3RxQ; - break; - default: - break; - } - - count = queue8_getCount(queue); - - return count; -} - -//Checks for a particular character within a Queue -//Does not dequeueueue -int uart_queueHasChar(char c, uint8_t uart) -{ - Queue8* queue = 0; - switch( uart ) - { - case uart_uart1: - queue = &uart1RxQ; - break; - case uart_uart2: - queue = &uart2RxQ; - break; - case uart_uart3: - queue = &uart3RxQ; - break; - default: - break; - } - - - //I think this has a bug where if the queue is empty (ie pRD == pWR) it scans through the whole queue intead of returning immediately. - //Since the queue may actually contain the desired char in it's currently unused spaces, this returns true, but since the dequeue function - //doesn't remove them, the while loops that this function is placed in never release. - if(queue->qCount == 0) - return false; - - uint8_t i = 0; - for(i = queue->readIndex; i != queue->writeIndex; i++) - { - i = i % queue->size; - if(queue->data[i] == c) return true; - } - return false; -} - -int uart_queueContains(char thingToFind[], int thingToFindLength, uint8_t uart) -{ - Queue8* queue = 0; - switch( uart ) - { - case uart_uart1: - queue = &uart1RxQ; - break; - case uart_uart2: - queue = &uart2RxQ; - break; - case uart_uart3: - queue = &uart3RxQ; - break; - default: - break; - } - - - - uint8_t i = 0; - int examinationIndex = 0; - - for(i = queue->readIndex; i != queue->writeIndex; i++) - { - i = i % queue->size; - if(queue->data[i] == thingToFind[examinationIndex]) - examinationIndex++; - else - examinationIndex = 0; - if (examinationIndex >= thingToFindLength) //We've matched all the characters we were looking for, return true; - return true; - } - return false; -} - -USART_HandleTypeDef usart; -void USART1_IRQHandler(void) -{ - // uart 1 interrupt handler - // this function name must match that in the startup file - - // handle uart rx char - //if( USART_GetITStatus(USART1, USART_IT_RXNE) != RESET ) - if(HAL_USART_GetState(usart) != HAL_USART_STATE_RESET) ; - { - uint8_t data; - - //data = USART_ReceiveData(USART1) & 0xFF; - //data = HAL_USART_Receive(usart, data, 1, - HAL_USART_Receive_IT(usart, data, 1); - if( queue8_enqueue(&uart1RxQ, data) ) - uart1RxOverflow = true; - } - - // handle uart tx char empty - if( USART_GetITStatus(USART1, USART_IT_TXE) != RESET ) - { - uint8_t data; - - if( !queue8_dequeue(&uart1TxQ, &data) ) - { - USART_SendData(USART1, data); - } - else - { - USART_ITConfig(USART1, USART_IT_TXE, DISABLE); - uart1TxPrimed = false; - } - } -} - - - -//void USART2_IRQHandler(void) -//{ -// // uart 2 interrupt handler -// // this function name must match that in the startup file -// -// // handle uart rx char -// if( USART_GetITStatus(USART2, USART_IT_RXNE) != RESET ) -// { -// uint8_t data; -// -// data = USART_ReceiveData(USART2) & 0xFF; -// if( queue8_enqueue(&uart2RxQ, data) ) -// uart2RxOverflow = true; -// } -// -// // handle uart tx char empty -// if( USART_GetITStatus(USART2, USART_IT_TXE) != RESET ) -// { -// uint8_t data; -// -// if( !queue8_dequeue(&uart2TxQ, &data) ) -// { -// USART_SendData(USART2, data); -// } -// else -// { -// USART_ITConfig(USART2, USART_IT_TXE, DISABLE); -// uart2TxPrimed = false; -// } -// } -//} - - - -//void USART3_IRQHandler(void) -//{ -// // uart 3 interrupt handler -// // this function name must match that in the startup file -// -// // handle uart rx char -// if( USART_GetITStatus(USART3, USART_IT_RXNE) != RESET ) -// { -// uint8_t data; -// -// data = USART_ReceiveData(USART3) & 0xFF; -// if( queue8_enqueue(&uart3RxQ, data) ) -// uart3RxOverflow = true; -// } -// -// // handle uart tx char empty -// if( USART_GetITStatus(USART3, USART_IT_TXE) != RESET ) -// { -// uint8_t data; -// -// if( !queue8_dequeue(&uart3TxQ, &data) ) -// { -// USART_SendData(USART3, data); HAL_USART_Transmit() -// } -// else -// { -// USART_ITConfig(USART3, USART_IT_TXE, DISABLE); -// uart3TxPrimed = false; -// } -// } -//}