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;
-// }
-// }
-//}