-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_history
More file actions
1 lines (1 loc) · 81.1 KB
/
Copy path_history
File metadata and controls
1 lines (1 loc) · 81.1 KB
1
{"entries":[{"timestamp":1781844782006,"editorVersion":"4.1.4","changes":[{"type":"edited","filename":"main.blocks","patch":[{"start1":0,"length1":84,"diffs":[[1,"<xml xmlns=\"https://developers.google.com/blockly/xml\"><variables></variables><block type=\"pxt-on-start\" x=\"0\" y=\"0\"></block></xml>"]]}]},{"type":"edited","filename":"pxt.json","patch":[{"start1":286,"length1":44,"diffs":[[1,""]]}]},{"type":"added","filename":"test.ts","value":"// tests go here; this will not be compiled when this package is used as an extension.\n"}]}],"snapshots":[{"timestamp":1781844782005,"editorVersion":"4.1.4","text":{"main.blocks":"<xml xmlns=\"https://developers.google.com/blockly/xml\"><variables></variables><block type=\"pxt-on-start\" x=\"0\" y=\"0\"></block></xml>","main.ts":"// Generated by https://github.com/UnsignedArduino/MIDI-to-MakeCode-Arcade\nconst songHex = hex`00780004186C0900001C00010500C80090016400000300000000640000001400010A0000000000E41566006C00011C73007900011C79007F00011C7F008600011C86008C0001238C009200012199009F000121A600AC000121B200B9000121BF00C500011CC600CC000121CC00D200011ED900DF00011EDF00E500011EE500EC00011EEC00F2000125F200F80001230C011201012312011801012318011F0101231F01250101262B013201012332013801011C3F014501011C45014B01011C4B015201011C52015801012358015E01012165016B0101217201780101217E01850101218B019101011C91019801012198019E01011EA501AB01011EAB01B101011EB101B801011EB801BE010125BE01C4010123D801DE010121E401EB010121EB01F1010126F701FE010126FE010402011C0A021102011C11021702011C17021E02011C1E022402012324022A0201213102370201213D02440201214A025102012157025D02011C5D026402012164026A02011E70027702011E77027D02011E7D028302011E84028A0201258A0290020123A302AA020123AA02B0020123B002B6020123B702BD020126C302CA020123CA02D002011CD602DD02011CDD02E302011CE302E902011CE902F0020123F002F6020121FD020303012109031003012116031C03012123032903011C29033003012130033603011E3C034303011E43034903011E49034F03011E4F035603012556035C0301236F03760301217C03820301218203890301218F039503012696039C030123A203A9030123A903AF030123AF03B5030123B503BC030126BC03C2030125C803CF030121D503DC030123EF03F503011EF503FB030123FB030204012108040F0401210F041504012315041B0401251B042204012622042804012555045B04011E5B04610401236104680401236E047404012375047B0401237B048104012381048804012688048E04012594049B040121A104A7040123BB04C104011EC104C7040123C704CE04011CD404DA04011CDA04E104011CE104E704011CE704EE04011CEE04F404012107050D0501210D051405012121052705011E27052D0501232D05340501233A054005012340054705012347054D0501234D055305012654055A0501256005670501216D057305012387058D05011E8D059305012393059A050121A005A6050121A605AD050123AD05B3050125B305B9050126B905C0050125EC05F305011EF305F9050123F9050006012306060C0601230C061306012313061906012319061F0601261F06260601252C063206012139063F06012352065906011E59065F0601235F066506011C6C067206011C72067906011C79067F06011C7F068506011C85068C0601219F06A5060121A506AC060121B806BF06011CBF06C5060121C506CB060123D206D8060123D806DF060123DF06E5060123E506EB060126EB06F2060125F806FE06012105070B0701231E072507011E25072B0701232B073107012138073E0701213E074407012345074B0701254B075107012651075807012584078B07011E8B07910701239107970701239E07A4070123A407AA070123AA07B1070123B107B7070126B707BE070125C407CA070121D107D7070123EA07F107011EF107F7070123F707FD07012304080A0801230A081008012310081708012317081D0801261D082308012550085608011C57085D08011C5D086308011C6A087008011C70087608011C76087D08011C7D08830801238308890801219008960801219D08A3080121A908B0080121B608BC08011CBC08C3080121C308C908011ED008D608011ED608DC08011EDC08E308011EE308E9080125E908EF08012303090909012309090F0901230F091609012316091C09012622092909012329092F09011C36093C09011C3C094209011C42094909011C49094F0901234F09550901215C096209012168096F09012175097C09012182098809011C88098F0901218F099509011E9B09A209011EA209A809011EA809AF09011EAF09B5090125B509BB090123CE09D5090121DB09E2090121E209E8090126EE09F5090126F509FB09011C010A080A011C080A0E0A011C0E0A140A011C150A1B0A01231B0A210A0121280A2E0A0121340A3B0A0121410A470A01214E0A540A011C540A5B0A01215B0A610A011E670A6E0A011E6E0A740A011E740A7A0A011E7A0A810A0125810A870A01239A0AA10A0123A10AA70A0123A70AAD0A0123AD0AB40A0126BA0AC10A0123C10AC70A011CCD0AD40A011CD40ADA0A011CDA0AE00A011CE00AE70A0123E70AED0A0121F40AFA0A0121000B070B01210D0B130B01211A0B200B011C200B260B0121270B2D0B011E330B3A0B011E3A0B400B011E400B460B011E460B4D0B01254D0B530B0123660B6D0B0121730B790B0121790B800B0121860B8C0B01268C0B930B0123990BA00B0123A00BA60B0123A60BAC0B0123AC0BB30B0126B30BB90B0125BF0BC60B0121CC0BD20B0123E60BEC0B011EEC0BF20B0123F20BF90B0121FF0B050C0121060C0C0C01230C0C120C0125120C190C0126190C1F0C01254C0C520C011E520C580C0123580C5F0C0123650C6B0C01236B0C720C0123720C780C0123780C7F0C01267F0C850C01258B0C920C0121980C9E0C0123B20CB80C011EB80CBE0C0123BE0CC50C011CCB0CD10C011CD10CD80C011CD80CDE0C011CDE0CE40C011CE50CEB0C0121FE0C040D0121040D0B0D0121180D1E0D011E1E0D240D0123240D2B0D0123310D370D0123370D3E0D01233E0D440D0123440D4A0D01264A0D510D0125570D5E0D0121640D6A0D01237D0D840D011E840D8A0D01238A0D910D0121970D9D0D01219D0DA40D0123A40DAA0D0125AA0DB00D0126B00DB70D0125E30DEA0D011EEA0DF00D0123F00DF60D0123FD0D030E0123030E0A0E01230A0E100E0123100E160E0126160E1D0E0125230E290E0121300E360E0123490E500E011E500E560E0123560E5C0E011C630E690E011C690E700E011C700E760E011C760E7C0E011C7C0E830E0121960E9C0E01219C0EA20E0121AF0EB60E011CB60EBC0E0121BC0EC20E0123C90ECF0E0123CF0ED50E0123D60EDC0E0123DC0EE20E0126E20EE90E0125EF0EF50E0121FC0E020F0123150F1C0F011E1C0F220F0123220F280F01212F0F350F0121350F3B0F01233B0F420F0125420F480F0126480F4F0F01257B0F820F011E820F880F0123880F8E0F0123950F9B0F01239B0FA10F0123A10FA80F0123A80FAE0F0126AE0FB40F0125BB0FC10F0121C80FCE0F0123E10FE70F011EE80FEE0F0123EE0FF40F0123FB0F0110012301100710012307100E1001230E101410012614101A10012547104D10011C4D105410011C54105A10011C61106710011C67106D10011C6D107410011C74107A1001237A108010012187108D10012194109A100121A010A7100121AD10B310011CB310BA100121BA10C010011EC710CD10011ECD10D310011ED310DA10011EDA10E0100125E010E6100123F9100011012300110611012306110D1101230D111311012619112011012320112611011C2C113311011C33113911011C39114011011C40114611012346114C1101215311591101215F11661101216C117311012179117F11011C7F118611012186118C11011E92119911011E99119F11011E9F11A511011EA611AC110125AC11B2110123C511CC110121D211D8110121D911DF110126E511EC110126EC11F211011CF811FF11011CFF110512011C05120B12011C0B12121201231212181201211F12251201212B123212012138123E12012145124B12011C4B125212012152125812011E5E126512011E65126B12011E6B127112011E71127812012578127E12012391129812012398129E1201239E12A4120123A412AB120126B112B7120123B812BE12011CC412CB12011CCB12D112011CD112D712011CD712DE120123DE12E4120121EA12F1120121F712FE12012104130A13012111131713011C17131D1301211D132413011E2A133113011E31133713011E37133D13011E3D134413012544134A1301235D13631301216A13701301217013771301217D138313012683138A13011C90139613011C97139D13011C9D13A313011CA313AA130123AA13B0130121B613BD130121C313C9130121D013D6130121DD13E313011CE313E9130121E913F013011EF613FC13011EFC130314011E03140914011E09141014012510141614012329142F1401232F143614012336143C1401233C144314012649144F1401234F145614011C5C146214011C62146914011C69146F14011C6F147514012376147C1401218214891401218F14951401219C14A2140121A914AF14011CAF14B5140121B514BC14011EC214C814011EC814CF14011ECF14D514011ED514DB140125DB14E2140123F514FB14012102150815012108150E15012615151B1501261B152215011C28152E15011C2E153515011C35153B15011C3B15411501234115481501214E15541501215B156115012168156E15012174157B15011C7B158115012181158715011E8E159415011E94159B15011E9B15A115011EA115A7150125A715AE150123C115C7150123C715CE150123CE15D4150123D415DA150126E115E7150123E715ED15011CF415FA15011CFA150116011C01160716011C07160D1601230D16141601211A162016012127162D16012134163A16012140164716011C47164D1601214D165316011E5A166016011E60166616011E67166D16011E6D167316012573167A1601238D16931601219916A0160121A016A6160121AD16B3160126B316B9160126C016C6160126C616CC160128CC16D316012AD316D916012BD916E016012AE616EC160126F316F91601280C171317011E13171917012319171F17012126172C1701212C173217012332173917012539173F1701263F174517012572177817012179177F1701267F17851701268C179217012692179817012898179F17012A9F17A517012BA517AB17012AB217B8170126BF17C5170128D817DE17011EDE17E5170123E517EB170121F217F8170121F817FE170123FE170518012505180B1801260B18111801253E184418012144184B1801264B185118012658185E1801265E186418012864186B18012A6B187118012B71187718012A7E18841801268A1891180128A418AA18011EAA18B1180123B118B7180121BD18C4180121C418CA180123CA18D1180125D118D7180126D718DD1801250A191019012110191719012617191D19012623192A1901262A193019012830193619012A37193D19012B3D194319012A4A195019012656195D19012870197619011E76197D1901237D198319012189199019012190199619012396199C1901259C19A3190126A319A9190125D619DC190121DC19E3190126121D181D01231F1D251D0123251D2C1D01232C1D321D0123321D381D0126381D3F1D0125451D4B1D0121521D581D01236B1D721D011E721D781D0123781D7E1D0121851D8B1D01218B1D921D0123921D981D0125981D9E1D01269E1DA51D0125D11DD81D011ED81DDE1D0123DE1DE41D0123EB1DF11D0123F11DF71D0123F81DFE1D0123FE1D041E0126041E0B1E0125111E171E01211E1E241E0123371E3E1E011E3E1E441E0123441E4A1E0121511E571E0121571E5D1E01235D1E641E0125641E6A1E01266A1E711E01259D1EA31E011EA41EAA1E0123AA1EB01E011CB71EBD1E011CBD1EC31E011CC31ECA1E011CCA1ED01E0123D01ED61E0121DD1EE31E0121EA1EF01E0121F61EFD1E0121031F091F011C091F101F0121101F161F011E1D1F231F011E231F291F011E291F301F011E301F361F0125361F3C1F0123501F561F0123561F5C1F01235C1F631F0123631F691F01266F1F761F0123761F7C1F011C831F891F011C891F8F1F011C8F1F961F011C961F9C1F01239C1FA21F0121A91FAF1F0121B61FBC1F0121C21FC91F0121CF1FD51F011CD51FDC1F0121DC1FE21F011EE91FEF1F011EEF1FF51F011EF51FFC1F011EFC1F022001250220082001231B202220012128202F2001212F20352001263B204220012642204820011C4E205520011C55205B20011C5B206220011C62206820012368206E20012175207B2001218120882001218E20942001219B20A120011CA120A8200121A820AE20011EB420BB20011EBB20C120011EC120C720011EC820CE200125CE20D4200123E720EE200123EE20F4200123F420FA200123FA200121012607210E2101230E211421011C1A212121011C21212721011C27212D21011C2D213421012334213A2101214121472101214D21542101215A216021012167216D21011C6D217321012174217A21011E80218721011E87218D21011E8D219321011E93219A2101259A21A0210123B321BA210121C021C6210121C621CD210121D321D9210126D921E021011CE621ED21011CED21F321011CF321F921011CF921002201230022062201210C221322012119222022012126222C22012133223922011C39223F2201213F224622011E4C225322011E53225922011E59225F22011E5F226622012566226C2201237F228522012386228C2201238C22922201239222992201269F22A5220123A522AC22011CB222B822011CB922BF22011CBF22C522011CC522CC220123CC22D2220121D822DF220121E522EB220121F222F8220121FF220523011C05230B2301210B231223011E18231E23011E1E232523011E25232B23011E2B23322301253223382301234B235123012158235E2301215E23642301266B237123012671237823011C7E238423011C84238B23011C8B239123011C91239723012398239E230121A423AB230121B123B7230121BE23C4230121CA23D123011CD123D7230121D723DE23011EE423EA23011EEA23F123011EF123F723011EF723FD230125FD230424012317241D2401231D242424012324242A2401232A243024012637243D2401233D244324011C4A245024011C50245724011C57245D24011C5D246324012363246A2401217024762401217D24832401218A249024012196249D24011C9D24A3240121A324A924011EB024B624011EB624BD24011EBD24C324011EC324C9240125C924D0240123E324E9240121F024F6240121F624FC24012103250925012609250F25011C16251C25011C1C252325011C23252925011C29252F2501232F25362501213C254225012149254F25012156255C25012162256925011C69256F2501216F257525011E7C258225011E82258825011E89258F25011E8F259525012595259C250123AF25B5250123B525BB250123BB25C2250123C225C8250126CF25D5250123D525DB25011CE225E825011CE825EE25011CEE25F525011CF525FB250123FB250226012108260E26012115261B2601212126282601212E263426011C35263B2601213B264126011E48264E26011E4E265426011E54265B26011E5B26612601256126672601237B268126012187268E2601218E26942601269A26A1260126A126A726011CAE26B426011CB426BA26011CBA26C126011CC126C7260123C726CD260121D426DA260121E126E7260121ED26F4260121FA260027011C00270727012107270D27011E14271A27011E1A272027011E20272727011E27272D2701252D273327012347274D2701234D275327012353275A2701235A276027012666276D2701236D277327011C79278027011C80278627011C86278D27011C8D2793270123932799270121A027A6270121AC27B3270121B927C0270121C627CC27011CCC27D3270121D327D927011EDF27E627011EE627EC27011EEC27F327011EF327F9270125F927FF2701231228192801211F282528012126282C28012132283928012601001C0002960000008403C80080010000000000000000000000000003030003520866008C00012666008C0001328C00B20001288C00B2000134B200CC000121B200CC00012DCC00F2000128CC00F2000134F2001801012AF2001801013618011F01012D18011F0101391F012501012B1F012501013725012B01012A25012B0101362B01580101262B015801013258017E01012858017E0101347E01980101217E019801012DE401EB01012DE401EB010139EB01F101012BEB01F1010137F101F701012AF101F7010136F70124020126F7012402013224024A02012824024A0201344A02640201214A026402012D64028A02012864028A0201348A02B002012A8A02B0020136B002B602012DB002B6020139B702BD02012BB702BD020137BD02C302012ABD02C3020136C302F0020126C302F0020132F00216030128F0021603013416033003012116033003012D5D08830801265D08830801328308A90801288308A9080134A908C3080121A908C308012DC308E9080128C308E9080134E9080F09012AE9080F0901360F091609012D0F091609013916091C09012B16091C0901371C092209012A1C092209013622094F09012622094F0901324F09750901284F097509013475098F09012175098F09012DDB09E209012DDB09E2090139E209E809012BE209E8090137E809EE09012AE809EE090136EE091B0A0126EE091B0A01321B0A410A01281B0A410A0134410A5B0A0121410A5B0A012D5B0A810A01285B0A810A0134810AA70A012A810AA70A0136A70AAD0A012DA70AAD0A0139AD0AB40A012BAD0AB40A0137B40ABA0A012AB40ABA0A0136BA0AE70A0126BA0AE70A0132E70A0D0B0128E70A0D0B01340D0B260B01210D0B260B012D54107A10012654107A1001327A10A01001287A10A0100134A010BA100121A010BA10012DBA10E0100128BA10E0100134E0100611012AE0100611013606110D11012D06110D1101390D111311012B0D111311013713111911012A13111911013619114611012619114611013246116C11012846116C1101346C11861101216C118611012DD211D811012DD211D8110139D911DF11012BD911DF110137DF11E511012ADF11E5110136E51112120126E5111212013212123812012812123812013438125212012138125212012D52127812012852127812013478129E12012A78129E1201369E12A412012D9E12A4120139A412AB12012BA412AB120137AB12B112012AAB12B1120136B112DE120126B112DE120132DE1204130128DE120413013404131D13012104131D13012D8313AA1301268313AA130132AA13D0130128AA13D0130134D013E9130121D013E913012DE91310140128E9131014013410143614012A10143614013636143C14012D36143C1401393C144314012B3C144314013743144914012A43144914013649147514012649147514013276149C14012876149C1401349C14B51401219C14B514012D02150815012D02150815013908150E15012B08150E1501370E151515012A0E151515013615154115012615154115013241156815012841156815013468158115012168158115012D8115A71501288115A7150134A715CE15012AA715CE150136CE15D415012DCE15D4150139D415DA15012BD415DA150137DA15E115012ADA15E1150136E1150D160126E1150D1601320D16331601280D163316013434164D16012134164D16012D121DAB1D0134AB1DD11D0136D11DD81D0134D81DDE1D0132DE1D441E012FAA1ED01E0126AA1ED01E0132D01EF61E0128D01EF61E0134F61E101F0121F61E101F012D101F361F0128101F361F0134361F5C1F012A361F5C1F01365C1F631F012D5C1F631F0139631F691F012B631F691F0137691F6F1F012A691F6F1F01366F1F9C1F01266F1F9C1F01329C1FC21F01289C1FC21F0134C21FDC1F0121C21FDC1F012D28202F20012D28202F2001392F203520012B2F203520013735203B20012A35203B2001363B20682001263B206820013268208E20012868208E2001348E20A82001218E20A820012DA820CE200128A820CE200134CE20F420012ACE20F4200136F420FA20012DF420FA200139FA200121012BFA200121013701210721012A01210721013607213421012607213421013234215A21012834215A2101345A21732101215A217321012DD92100220126D9210022013200222622012800222622013426223F22012126223F22012D3F22662201283F226622013466228C22012A66228C2201368C229222012D8C229222013992229922012B92229922013799229F22012A99229F2201369F22CC2201269F22CC220132CC22F2220128CC22F2220134F2220B230121F2220B23012D58235E23012D58235E2301395E236423012B5E236423013765236B23012A65236B2301366B23972301266B23972301329823BE2301289823BE230134BE23D7230121BE23D723012DD723FD230128D723FD230134FD232424012AFD232424013624242A24012D24242A2401392A243024012B2A243024013730243724012A30243724013637246324012637246324013263248A24012863248A2401348A24A32401218A24A324012D09252F25012609252F2501322F25552501282F255525013456256F25012156256F25012D6F25952501286F25952501349525BB25012A9525BB250136BB25C225012DBB25C2250139C225C825012BC225C8250137C825CF25012AC825CF250136CF25FB250126CF25FB250132FB2521260128FB252126013421263B26012121263B26012D87268E26012D87268E2601398E269426012B8E269426013794269A26012A94269A2601369A26C72601269A26C7260132C726ED260128C726ED260134ED2607270121ED260727012D07272D27012807272D2701342D275327012A2D275327013653275A27012D53275A2701395A276027012B5A276027013760276627012A6027662701366627932701266627932701329327B92701289327B9270134B927D3270121B927D327012D02001C00014B004B0084032C0100030000000000000000000000000004040002D809FE015702013957025D0201365D02640201346402CA0201365D087008012A5D087008012F5D087008013270088308012A70088308012F7008830801328308A90801288308A908012D8308A9080131C308D6080128C308D608012DC308D6080131D608E9080128D608E908012DD608E9080131E908FC08012AE908FC08012FE908FC080132FC080209012AFC080209012DFC080209013103090F09012603090F09012A03090F09012F8F09A009012A8F09A009012D8F09A0090131A809DB09012AA809DB09012DA809DB090132F509080A012AF509080A012FF509080A0132080A1B0A012A080A1B0A012F080A1B0A01321B0A410A01281B0A410A012D1B0A410A01315B0A6E0A01285B0A6E0A012D5B0A6E0A01316E0A810A01286E0A810A012D6E0A810A0131810A940A012A810A940A012F810A940A0132940A9A0A012A940A9A0A012D940A9A0A01319A0AA70A01269A0AA70A012A9A0AA70A012F270B380B012A270B380B012D270B380B0131400B730B012A400B730B012D400B730B013254106710012A54106710012F54106710013267107A10012A67107A10012F67107A1001327A10A01001287A10A010012D7A10A0100131BA10CD100128BA10CD10012DBA10CD100131CD10E0100128CD10E010012DCD10E0100131E010F310012AE010F310012FE010F3100132F310F910012AF310F910012DF310F9100131F91006110126F9100611012AF9100611012F86119711012A86119711012D8611971101319F11D211012A9F11D211012D9F11D2110132EC11FF11012AEC11FF11012FEC11FF110132FF111212012AFF111212012FFF111212013212123812012812123812012D12123812013152126512012852126512012D52126512013165127812012865127812012D65127812013178128B12012A78128B12012F78128B1201328B129112012A8B129112012D8B129112013191129E12012691129E12012A91129E12012F1D132E13012A1D132E13012D1D132E13013137136A13012A37136A13012D37136A13013283139613012A83139613012F8313961301329713AA13012A9713AA13012F9713AA130132AA13D0130128AA13D013012DAA13D0130131E913FC130128E913FC13012DE913FC130131FC1310140128FC131014012DFC131014013110142314012A10142314012F10142314013223142914012A23142914012D23142914013129143614012629143614012A29143614012FB514C614012AB514C614012DB514C6140131CF140215012ACF140215012DCF14021501321B152E15012A1B152E15012F1B152E1501322E154115012A2E154115012F2E154115013241156815012841156815012D41156815013181159415012881159415012D8115941501319415A71501289415A715012D9415A7150131A715BA15012AA715BA15012FA715BA150132BA15C115012ABA15C115012DBA15C1150131C115CE150126C115CE15012AC115CE15012F4D165E16012A4D165E16012D4D165E16013167169916012A67169916012D6716991601329916B3160121B316B616012CB6160C17012D0C171317012A13171917012819172617012A19172617012D1917261701322C173917012A2C173917012D2C17391701323F17521701283F175217012D3F175217013165177F1701217F178217012C8217D817012DD817DE17012ADE17E5170128E517F217012AE517F217012DE517F2170132F8170518012AF8170518012DF817051801320B181E1801280B181E18012D0B181E18013131184B1801214B184E18012C4E18A418012DA418AA18012AAA18B1180128B118BD18012AB118BD18012DB118BD180132C418D118012AC418D118012DC418D1180132D718EA180128D718EA18012DD718EA180131FD181719012117191A19012C1A197019012D70197619012A76197D1901287D198919012A7D198919012D7D198919013290199C19012A90199C19012D90199C190132A319B6190128A319B619012DA319B6190131AA1EBD1E012AAA1EBD1E012FAA1EBD1E0132BD1ED01E012ABD1ED01E012FBD1ED01E0132D01EF61E0128D01EF61E012DD01EF61E0131101F231F0128101F231F012D101F231F0131231F361F0128231F361F012D231F361F0131361F491F012A361F491F012F361F491F0132491F501F012A491F501F012D491F501F0131501F5C1F0126501F5C1F012A501F5C1F012FDC1FED1F012ADC1FED1F012DDC1FED1F0131F51F2820012AF51F2820012DF51F2820013242205520012A42205520012F42205520013255206820012A55206820012F55206820013268208E20012868208E20012D68208E200131A820BB200128A820BB20012DA820BB200131BB20CE200128BB20CE20012DBB20CE200131CE20E120012ACE20E120012FCE20E1200132E120E720012AE120E720012DE120E7200131E720F4200126E720F420012AE720F420012F74218521012A74218521012D7421852101318D21C021012A8D21C021012D8D21C0210132D921ED21012AD921ED21012FD921ED210132ED210022012AED210022012FED210022013200222622012800222622012D0022262201313F22532201283F225322012D3F225322013153226622012853226622012D53226622013166227922012A66227922012F66227922013279227F22012A79227F22012D79227F2201317F228C2201267F228C22012A7F228C22012F0B231C23012A0B231C23012D0B231C23013125235823012A25235823012D25235823013271238423012A71238423012F71238423013284239723012A84239723012F8423972301329823BE2301289823BE23012D9823BE230131D723EA230128D723EA23012DD723EA230131EA23FD230128EA23FD23012DEA23FD230131FD231124012AFD231124012FFD231124013211241724012A11241724012D11241724013117242424012617242424012A17242424012FA324B424012AA324B424012DA324B4240131BD24F024012ABD24F024012DBD24F024013209251C25012A09251C25012F09251C2501321C252F25012A1C252F25012F1C252F2501322F25552501282F255525012D2F25552501316F25822501286F258225012D6F258225013182259525012882259525012D8225952501319525A825012A9525A825012F9525A8250132A825AF25012AA825AF25012DA825AF250131AF25BB250126AF25BB25012AAF25BB25012F3B264C26012A3B264C26012D3B264C26013154268726012A54268726012D542687260132A126B426012AA126B426012FA126B4260132B426C726012AB426C726012FB426C7260132C726ED260128C726ED26012DC726ED26013107271A27012807271A27012D07271A2701311A272D2701281A272D27012D1A272D2701312D274027012A2D274027012F2D274027013240274627012A40274627012D40274627013147275327012647275327012A47275327012FD327E427012AD327E427012DD327E4270131EC271F28012AEC271F28012DEC271F28013203001C0002140000008403640080010500320000000000320000000001010002A803D801DC01012DD801DC010139DE01E201012DDE01E2010139E401E801012FE401E801013BEB01F1010132EB01F101013EF701FE010132F701FE01013E63036903013263036903013E69036F03013269036F03013E7C03820301327C038203013E82038903013282038903013E8F03950301328F039503013EFA040705013907051405013414052105013921052D050134F9056C06012DF9056C0601396C067906012A6C06790601368506920601288506920601349F06AC0601269F06AC060132B806F8060123B806F806012F37083B08012D37083B0801393D084108012D3D084108013943084808012F43084808013B4A084E0801324A084E08013E57086308013257086308013EF10CFE0C0139FE0C0B0D01340B0D170D0139180D240D0134F00D630E012DF00D630E0139630E700E012A630E700E01367C0E890E01287C0E890E0134960EA20E0126960EA20E0132AF0EEF0E0123AF0EEF0E012F2E103210012D2E103210013934103810012D3410381001393A103F10012F3A103F10013B41104510013241104510013E4D10541001324D105410013E54105A10013254105A10013EC511CA11012DC511CA110139CC11D011012DCC11D0110139D211D611012FD211D611013BD911DF110132D911DF11013EE511EC110132E511EC11013E83138A13013283138A13013EF514F914012DF514F9140139FB140015012DFB140015013902150615012F02150615013B08150E15013208150E15013E15151B15013215151B15013E80168616013280168616013E86168D16013286168D16013E9916A01601329916A016013EA016A6160132A016A616013EAD16B3160132AD16B316013E841E881E012D841E881E01398A1E8E1E012D8A1E8E1E0139901E951E012F901E951E013B971E9B1E0132971E9B1E013EA41EAA1E0132A41EAA1E013EAA1EB01E0132AA1EB01E013E1B202020012D1B202020013922202620012D22202620013928202C20012F28202C20013B2F20352001322F203520013E3B20422001323B204220013ED921E0210132D921E021013E4B234F23012D4B234F23013951235623012D51235623013958235C23012F58235C23013B5E23642301325E236423013E6B23712301326B237123013ED624DC240132D624DC24013EDC24E3240132DC24E324013EF024F6240132F024F624013EF624FC240132F624FC24013E03250925013203250925013E6E26742601326E267426013E74267B26013274267B26013E87268E26013287268E26013E8E26942601328E269426013E9A26A12601329A26A126013E04001C000F1E0000008403640080010500320000000000320000000001010001960CAF03BC03012FBC03C8030131C803D5030132D503E2030132E203EF030134EF030204013102040804012F08043B04012D6E047B04012F7B048804012F8804940401319404A1040132A104AE04012FBB04C704012DC704D4040139E104EE040139EE04210501343A054705012F47055305012F54056005013160056D0501326D057A05012F7A0586050132870593050134A005A305012FA305AD050131AD05B905012FB905C605012FC605F905012D06061306012F13061F06012F1F062C0601312C063906013239064606012F46065206012D5F066C0601346C06790601347906850601348506920601369206B8060134C5060507013205071207013412071E0701361E072B0701322B073807013438074407013445075107013451075E0701365E07770701347807AA07012DC407D107012FD107DD070131DD07EA070132EA07F707012F04081008013410081D0801361D084308013443084A08012D4A085008012F50085608013257085D08012F5D087008013670088308013683089D080134A908B008012DB008B608012FB608BC080132BC08C308012FC308D6080134D608E9080134E908FC080132FC080209013103090909012F0F091609012D16091C09012F1C092209013222092909012F29094209013242094F0901344F095209012F52096209013162096809012F68097C09012D82098F09012D8F09A0090134A809C2090132DB09E209012DE209E809012FE809EE090132EE09F509012FF509080A0136080A1B0A01361B0A340A0134410A470A012D480A4E0A012F4E0A540A0132540A5B0A012F5B0A740A0139740A810A0131810A940A0132940A9A0A01319A0AA70A012FA70AAD0A012DAD0AB40A012FB40ABA0A0132BA0AC10A012FC10ADA0A0132DA0AE70A0134E70AFA0A0131FA0A000B012F000B130B012D1A0B260B012D270B380B0134400B590B0132990BA60B0132A60BB30B0132B30BBF0B012FBF0BCC0B0132CC0BE60B0134FF0B0C0C01310C0C190C012F190C250C012F250C4C0C012D650C720C012F720C7F0C012F7F0C8B0C01318B0C980C0132980CA50C012FA50CBE0C012DCB0CD80C0139D80CE40C0139E50CFE0C0134FE0C0B0D01360B0D170D0134180D240D0132310D3E0D01323E0D4A0D01324A0D570D012F570D640D0132640D710D012F710D7D0D01327D0D8A0D0134970DA40D0131A40DB00D012FB00DBD0D012FBD0DE30D012DFD0D0A0E012F0A0E160E012F160E230E0131230E300E0132300E3D0E012F3D0E560E012D630E700E0134700E7C0E01367C0E960E0136960EAF0E0134BC0EFC0E0132FC0E080F0134080F150F0136150F2F0F01342F0F3B0F01343B0F480F0134480F550F0136550F6E0F01346E0FA10F012DAE0FBB0F012DBB0FC80F012FC80FD40F0131D40FE10F0132E10FEE0F012FFB0F0710013407101410013614102E1001343A104110012D41104710012F47104D1001324D105410012F54106710013667107A1001367A1093100134A010A710012DA710AD10012FAD10B3100132B310BA10012FBA10CD100134CD10E0100134E010F3100132F310F9100131F9100011012F06110D11012D0D111311012F13111911013219112011012F20113911013239114611013446114911012F49115911013159115F11012F5F117311012D79118611012D8611971101349F11B9110132D211D811012DD911DF11012FDF11E5110132E511EC11012FEC11FF110136FF111212013612122B12013438123E12012D3E124512012F45124B1201324B125212012F52126B1201396B127812013178128B1201328B129112013191129E12012F9E12A412012DA412AB12012FAB12B1120132B112B712012FB812D1120132D112DE120134DE12F1120131F112F712012FF7120A13012D11131D13012D1D132E1301343713501301326A137013012D70137713012F77137D1301327D138313012F8313961301369713AA130136AA13C3130134D013D613012DD613DD13012FDD13E3130132E313E913012FE913FC130134FC131014013410142314013223142914013129142F14012F36143C14012D3C144314012F43144914013249144F14012F4F146914013269147514013476147914012F79148914013189148F14012F8F14A214012DA914B514012DB514C6140134CF14E814013202150815012D08150E15012F0E151515013215151B15012F1B152E1501362E154115013641155B15013468156E15012D6E157415012F74157B1501327B158115012F81159B1501399B15A7150131A715BA150132BA15C1150131C115CE15012FCE15D415012DD415DA15012FDA15E1150132E115E715012FE7150116013201160D1601340D162016013120162716012F27163A16012D40164D16012D4D165E16013467168016013258185E18012D5E186418012F64186B1801326B187118012F71187E1801367E188418012D84188A18012F8A189118013291189718012F9718A418013623192A19012D2A193019012F30193619013237193D19012F3D194A1901364A195019012D50195619012F56195D1901325D196319012F631970190136EF19FC190132FC19091A0132091A151A012F161A221A0132221A3C1A0134551A621A0131621A6F1A012F6F1A7B1A012F7B1AA21A012DBB1AC81A012FC81AD51A012FD51AE11A0131E11AEE1A0132EE1AFB1A012FFB1A141B012D211B2E1B01392E1B3B1B01393B1B541B0134541B611B0136611B6E1B01346E1B7A1B0132871B941B0132941BA11B0132A11BAD1B012FAD1BBA1B0132BA1BC71B012FC71BD31B0132D41BE01B0134ED1BFA1B0131FA1B061C012F071C131C012F131C391C012D531C601C012F601C6C1C012F6C1C791C0131791C861C0132861C931C012F931CAC1C012DB91CC61C0134C61CD21C0136D21CEC1C0136EC1C051D0134121D521D0132521D5F1D01345F1D6B1D01366B1D851D0134851D921D0134921D9E1D01349E1DAB1D0136AB1DC41D0134C51DF71D012D041E111E012D111E1E1E012F1E1E2A1E01312A1E371E0132371E441E012F511E5D1E01345D1E6A1E01366A1E841E0134901E971E012D971E9D1E012F9D1EA31E0132A41EAA1E012FAA1EBD1E0136BD1ED01E0136D01EEA1E0134F61EFD1E012DFD1E031F012F031F091F0132091F101F012F101F231F0134231F361F0134361F491F0132491F501F0131501F561F012F5C1F631F012D631F691F012F691F6F1F01326F1F761F012F761F8F1F01328F1F9C1F01349C1F9F1F012F9F1FAF1F0131AF1FB51F012FB61FC91F012DCF1FDC1F012DDC1FED1F0134F51F0F20013228202F20012D2F203520012F35203B2001323B204220012F4220552001365520682001366820812001348E209420012D95209B20012F9B20A1200132A120A820012FA820C1200139C120CE200131CE20E1200132E120E7200131E720F420012FF420FA20012DFA200121012F01210721013207210E21012F0E212721013227213421013434214721013147214D21012F4D216021012D67217321012D7421852101348D21A6210132C021C621012DC621CD21012FCD21D3210132D321D921012FD921ED210136ED210022013600221922013426222C22012D2C223322012F33223922013239223F22012F3F225322013453226622013466227922013279227F2201317F228522012F8C229222012D92229922012F99229F2201329F22A522012FA522BF220132BF22CC220134CC22CF22012FCF22DF220131DF22E522012FE522F822012DFF220B23012D0B231C23013425233E23013258235E23012D5E236423012F65236B2301326B237123012F7123842301368423972301369823B1230134BE23C423012DC423CA23012FCA23D1230132D123D723012FD723F1230139F123FD230131FD231124013211241724013117242424012F24242A24012D2A243024012F30243724013237243D24012F3D245724013257246324013463247624013177247D24012F7D249024012D9624A324012DA324B4240134BD24D6240132F024F624012DF624FC24012FFC240325013203250925012F09251C2501361C252F2501362F254925013456255C25012D5C256225012F62256925013269256F25012F6F25822501348225952501349525A8250132A825AF250131AF25B525012FBB25C225012DC225C825012FC825CF250132CF25D525012FD525EE250132EE25FB250134FB25FE25012FFE250E2601310E261526012F15262826012D2E263B26012D3B264C26013454266E26013287268E26012D8E269426012F94269A2601329A26A126012FA126B4260136B426C7260136C726E1260134ED26F426012DF426FA26012FFA260027013200270727012F07272027013920272D2701312D274027013240274627013147275327012F53275A27012D5A276027012F60276627013266276D27012F6D27862701328627932701349327A6270131A627AC27012FAC27C027012DC627D327012DD327E4270134EC270628013205001C0001C800E8030000640000030000000000000000000000000002020001EE0866008C00013466008C00013766008C00013B8C00BF0001318C00BF0001348C00BF000139CC00F2000131CC00F2000134CC00F2000139F20025010132F20025010136F2002501013B32015801012F32015801013432015801013758018B01013158018B01013458018B0101399801BE01012D9801BE0101319801BE010134BE01F101012FBE01F1010132BE01F1010136FE0124020134FE0124020137FE012402013B24025702013124025702013424025702013964028A02013164028A02013464028A0201398A02BD0201328A02BD0201368A02BD02013BCA02F002012FCA02F0020134CA02F0020137F0022303012DF00223030131F0022303013430034903012D30034903013130034903013449039503012F4903950301324903950301369603FB03012F9603FB0301329603FB030136FB036104012DFB0361040131FB03610401346104C704012F6104C70401326104C70401362D059305012F2D05930501322D05930501369305F905012D9305F90501319305F9050134F9055F06012FF9055F060132F9055F0601365D08830801345D08830801375D088308013B8308B60801318308B60801348308B6080139C308E9080131C308E9080134C308E9080139E9081C090132E9081C090136E9081C09013B29094F09012F29094F09013429094F0901374F09820901314F09820901344F09820901398F09A809012D8F09A80901318F09A8090134A809DB09012FA809DB090132A809DB090136F5091B0A0134F5091B0A0137F5091B0A013B1B0A4E0A01311B0A4E0A01341B0A4E0A01395B0A810A01315B0A810A01345B0A810A0139810AB40A0132810AB40A0136810AB40A013BC10AE70A012FC10AE70A0134C10AE70A0137E70A1A0B012DE70A1A0B0131E70A1A0B0134270B400B012D270B400B0131270B400B0134400B8C0B012F400B8C0B0132400B8C0B01368C0BF20B012F8C0BF20B01328C0BF20B0136F20B580C012DF20B580C0131F20B580C0134580CBE0C012F580CBE0C0132580CBE0C0136240D8A0D012F240D8A0D0132240D8A0D01368A0DF00D012D8A0DF00D01318A0DF00D0134F00D560E012FF00D560E0132F00D560E013654107A10013454107A10013754107A10013B7A10AD1001317A10AD1001347A10AD100139BA10E0100131BA10E0100134BA10E0100139E01013110132E01013110136E0101311013B20114611012F20114611013420114611013746117911013146117911013446117911013986119F11012D86119F11013186119F1101349F11D211012F9F11D21101329F11D2110136EC1112120134EC1112120137EC111212013B1212451201311212451201341212451201395212781201315212781201345212781201397812AB1201327812AB1201367812AB12013BB812DE12012FB812DE120134B812DE120137DE121113012DDE1211130131DE12111301341D133713012D1D13371301311D133713013437138313012F3713831301323713831301368313AA1301348313AA1301378313AA13013BAA13DD130131AA13DD130134AA13DD130139E91310140131E91310140134E9131014013910144314013210144314013610144314013B4F147514012F4F14751401344F14751401377614A81401317614A81401347614A8140139B514CF14012DB514CF140131B514CF140134CF140215012FCF1402150132CF14021501361B15411501341B15411501371B154115013B4115741501314115741501344115741501398115A71501318115A71501348115A7150139A715DA150132A715DA150136A715DA15013BE7150D16012FE7150D160134E7150D1601370D164016012D0D16401601310D16401601344D166616012D4D16661601314D16661601346716B316012F6716B31601326716B3160136121D781D0132121D781D0136121D781D013B781DDE1D0131781DDE1D0134781DDE1D0139DE1D441E0132DE1D441E0136DE1D441E013BAA1ED01E0134AA1ED01E0137AA1ED01E013BD01E031F0131D01E031F0134D01E031F0139101F361F0131101F361F0134101F361F0139361F691F0132361F691F0136361F691F013B761F9C1F012F761F9C1F0134761F9C1F01379C1FCF1F01319C1FCF1F01349C1FCF1F0139DC1FF51F012DDC1FF51F0131DC1FF51F0134F51F2820012FF51F28200132F51F2820013642206820013442206820013742206820013B68209B20013168209B20013468209B200139A820CE200131A820CE200134A820CE200139CE2001210132CE2001210136CE200121013B0E213421012F0E21342101340E213421013734216721012D34216721013134216721013474218D21012D74218D21013174218D2101348D21D921012F8D21D92101328D21D9210136D92100220134D92100220137D9210022013B0022332201310022332201340022332201393F22662201313F22662201343F226622013966229922013266229922013666229922013BA522CC22012FA522CC220134A522CC220137CC22FF220131CC22FF220134CC22FF2201390B232523012D0B23252301310B232523013425235823012F25235823013225235823013671239723013471239723013771239723013B9823CA2301319823CA2301349823CA230139D723FD230131D723FD230134D723FD230139FD2330240132FD2330240136FD233024013B3D246324012F3D24632401343D246324013763249624012D632496240131632496240134A324BD24012DA324BD240131A324BD240134BD240925012FBD2409250132BD240925013609252F25013409252F25013709252F25013B2F25622501312F25622501342F25622501396F25952501316F25952501346F25952501399525C82501329525C82501369525C825013BD525FB25012FD525FB250134D525FB250137FB252E260131FB252E260134FB252E2601393B265426012D3B26542601313B265426013454268726012F542687260132542687260136A126C7260134A126C7260137A126C726013BC726FA260131C726FA260134C726FA26013907272D27013107272D27013407272D2701392D27602701322D27602701362D276027013B6D279327012F6D27932701346D27932701379327C627012D9327C62701319327C6270134D327EC27012DD327EC270131D327EC270134EC273928012FEC2739280132EC273928013606001C0002640000008403640080010000000000000000000000000000000001E601C704E104012FC704E1040132C704E1040136EE042105012DEE0421050131EE04210501345F067906012F5F06790601325F06790601368506B806012D8506B80601318506B8060134C5062B070132C5062B070136C5062B07013B2B07910701312B07910701342B07910701399107F70701329107F70701369107F707013BF70704080132F70704080136F7070408013B0A08170801320A08170801360A081708013B1D08370801311D08370801341D0837080139BE0CD80C012FBE0CD80C0132BE0CD80C0136E50C170D012DE50C170D0131E50C170D0134560E700E012F560E700E0132560E700E01367C0EAF0E012D7C0EAF0E01317C0EAF0E0134BC0E220F0132BC0E220F0136BC0E220F013B220F880F0131220F880F0134220F880F0139880FEE0F0132880FEE0F0136880FEE0F013BEE0FFB0F0132EE0FFB0F0136EE0FFB0F013B01100E10013201100E10013601100E10013B14102E10013114102E10013414102E100139141B2E1B0136141B2E1B013B141B2E1B013E3B1B6E1B01343B1B6E1B01393B1B6E1B013DAC1CC61C0136AC1CC61C013BAC1CC61C013ED21C051D0134D21C051D0139D21C051D013D441E511E0132441E511E0136441E511E013B571E641E0132571E641E0136571E641E013B6A1E841E01316A1E841E01346A1E841E013907001C0004050064000000640000011E001E0000006400C80000000000000001DA0126002D0001342D003300013439004000013440004600013446004C0001344C005300013153005900013159006000012F60006600012F63036903013369036F0301336F037603013176037C0301317C038203013082038903013092069806013698069F0601369F06A5060132A506AC060132AC06B20601311D082A0801382A083008013830083708013837083D0801363D084308013643084A0801324A085008013250085608012F57085D08012F890E8F0E01368F0E960E0136960E9C0E01329C0EA20E0132A30EA90E0131AF0EB60E012DB60EBC0E012D14102110013821102710013827102E1001382E103410013634103A1001363A104110013241104710013247104D10012F4D105410012F83198919013896199C190131A919B0190131B019B6190139B619BC190139BC19C3190138C319C9190138C919CF190136CF19D6190136D619DC190132DC19E3190132DF1CE51C0138E61CEC1C0138F21CF91C0138F91CFF1C0134FF1C051D01340C1D121D012F6A1E711E0139711E771E01387D1E841E0134841E8A1E01348A1E901E0131901E971E0131971E9D1E012F9D1EA31E012CA41EAA1E012C06280C2801380C281228013812281928013619281F2801361F282528013226282C2801322C283228012F32283928012F08013301037800000403460052031900032D005E012300032300000032000420032C010164002C010A000500002C010A00050000C8000A000500000000280003401F2C0105000064000A00050000320014000500000000500003401F2C010500006400050005000032000A000500000000280003B4009001017800C8001E00015A00320028000146000000500003401FFA000500004B00280005000019005A000500000000DC0003DC002C0101960064001E00016E0032002800015A000000500003FA002C0101D20064001E000196003200280001320000005000040000FA000500002C0164000500006400C80005000032002C0105000000009001032C012C0101E60064001E00018C003200280001280000005000040000C8000500002C011400050000C8001E000500006400C80005000000002C01631B6600730002080073007F0001057F008C00030103008C00920001029300990001029900A6000100A600B2000105B200BF0003010300BF00CC000105CC00D900020300D900E5000105E500F20003010300F200FF000105FF000C010203000C0118010105180125010301030025013201010532013F010203003F014B0101054B0158010301030058015E0101025E016501010265017201010072017E0101057E018B01030103008B01980101059801A401020300A501B1010105B101BE0103010300BE01CB010105CB01D701020300D801E4010105E401EB010101E401F101020300EB01F1010101F101F7010101F701FE010101FE010A02030803000A0217020105170224020301030024022A0201022A023102010231023D0201003D024A0201054A025702030103005702640201056402700202030070027D0201057D028A02030103008A02970201059702A302020300A302B0020105B002BD0203010300BD02CA020105CA02D602020300D602E3020105E302F00203010300F002F6020102F602FD020102FD0209030100090316030105160323030301030023033003010530033C030203003C0349030105490356030301030056036203010563036903010963036F03010069036F0301096F037603010776037C0301077C03820301067C038903010082038903010689038F0301048F039503010496039C0301089603A2030100A203A9030102A903AF030102AF03B5030101AF03BC030100BC03C2030102C203C8030102C803CF030102C803D5030100D503DC030102DC03E2030102E203E8030101E203EF030100EF03F5030102F503FB030102FB0302040102FB030804010008040F0401020F041504010215041B04010115042204010022042804010228042E0401022E04350401022E043B0401003B044204010242044804010248044E04010148045504010055045B0401025B046104010261046804010261046E0401006E047404010275047B0401027B04810401017B048804010088048E0401028E049404010294049B0401029404A1040100A104A7040102A804AE040102AE04B4040101AE04BB040100BB04C1040102C104C7040102C704CE040102C704D4040100D404DA040102DA04E1040102E104E7040101E104EE040100EE04F4040102F404FA040102FA0401050102FA040705010001050705010207050D05010514051A0501021405210501001A05210501022105270501052D05340501082D053A0501003A054005010240054705010247054D05010147055305010054055A0501025A056005010260056705010260056D0501006D057305010273057A0501027A05800501017A058605010087058D0501028D059305010293059A0501029305A0050100A005A6050102A605AD050102AD05B3050101AD05B9050100B905C0050102C005C6050102C605CD050102C605D3050100D305D9050102D905E0050102E005E6050101E005EC050100EC05F3050102F305F9050102F90500060102F9050606010006060C0601020C061306010213061906010113061F0601001F062606010226062C0601022C06320601022C063906010039063F0601023F064606010246064C06010146065206010052065906010259065F0601025F06650601025F066C0601006C067206010272067906010279067F06010179068506010085068C0601028C069206010292069806010292069F06010098069F0601029F06A5060105AC06B2060101AC06B8060100B206B8060101B806BF060106BF06C5060106C506CB060108C506D2060100D206D8060102D806DF060102DF06E5060101DF06EB060100EB06F2060102F206F8060102F806FE060102F8060507010005070B0701020B071207010212071807010112071E0701001E072507010225072B0701022B07310701022B073807010038073E0701023E074407010245074B07010145075107010051075807010258075E0701025E07640701025E076B0701006B077107010271077707010278077E07010178078407010084078B0701028B079107010291079707010291079E0701009E07A4070102A407AA070102AA07B1070101AA07B7070100B707BE070102BE07C4070102C407CA070102C407D1070100D107D7070102D707DD070102DD07E4070101DD07EA070100EA07F1070102F107F7070102F707FD070102F70704080100FD070408010204080A08010510081708010210081D08010017081D0801021D08230801052A08300801022A083708010030083708010237083D0801093D084308010943084A0801064308500801004A085008010650085608010457085D0801045D086A080208006A0876080105760883080301030083088908010289089008010290089D0801009D08A9080105A908B60803010300B608C3080105C308D008020300D008DC080105DC08E90803010300E908F6080105F608020902030003090F0901050F091C09030103001C09290901052909350902030036094209010542094F09030103004F095509010255095C0901025C0968090100680975090105750982090301030082098F0901058F099B090203009B09A8090105A809B50903010300B509C2090105C209CE09020300CE09DB090105DB09E2090101DB09E809020300E209E8090101E809EE090101EE09F5090101F509010A03080300010A0E0A01050E0A1B0A030103001B0A210A0102210A280A0102280A340A0100340A410A0105410A4E0A030103004E0A5B0A01055B0A670A020300670A740A0105740A810A03010300810A8E0A01058E0A9A0A0203009A0AA70A0105A70AB40A03010300B40AC10A0105C10ACD0A020300CD0ADA0A0105DA0AE70A03010300E70AED0A0102ED0AF30A0102F40A000B0100000B0D0B01050D0B1A0B030103001A0B260B0105270B330B020300330B400B0105400B4D0B030103004D0B590B0105590B600B0109590B660B0100600B660B01096D0B730B0109730B790B0109730B800B0100790B800B0109800B860B0106860B8C0B01068C0B930B01088C0B990B0100990BA00B0102A00BA60B0102A60BAC0B0101A60BB30B0100B30BB90B0102B90BBF0B0102BF0BC60B0102BF0BCC0B0100CC0BD20B0102D30BD90B0102D90BDF0B0101D90BE60B0100E60BEC0B0102EC0BF20B0102F20BF90B0102F20BFF0B0100FF0B050C0102060C0C0C01020C0C120C01010C0C190C0100190C1F0C01021F0C250C0102250C2C0C0102250C320C0100320C380C0102380C3F0C01023F0C450C01013F0C4C0C01004C0C520C0102520C580C0102580C5F0C0102580C650C0100650C6B0C01026B0C720C0102720C780C0101720C7F0C01007F0C850C0102850C8B0C01028B0C920C01028B0C980C0100980C9E0C01029E0CA50C0102A50CAB0C0101A50CB20C0100B20CB80C0102B80CBE0C0102BE0CC50C0102BE0CCB0C0100CB0CD10C0102D10CD80C0102D80CDE0C0101D80CE40C0100E50CEB0C0102EB0CF10C0102F10CF80C0102F10CFE0C0100F80CFE0C0102FE0C040D01050B0D110D01020B0D170D0100110D170D0102180D1E0D0105240D2B0D0108240D310D0100310D370D0102370D3E0D01023E0D440D01013E0D4A0D01004A0D510D0102510D570D0102570D5E0D0102570D640D0100640D6A0D01026A0D710D0102710D770D0101710D7D0D01007D0D840D0102840D8A0D01028A0D910D01028A0D970D0100970D9D0D01029D0DA40D0102A40DAA0D0101A40DB00D0100B00DB70D0102B70DBD0D0102BD0DC30D0102BD0DCA0D0100CA0DD00D0102D00DD70D0102D70DDD0D0101D70DE30D0100E30DEA0D0102EA0DF00D0102F00DF60D0102F00DFD0D0100FD0D030E0102030E0A0E01020A0E100E01010A0E160E0100160E1D0E01021D0E230E0102230E290E0102230E300E0100300E360E0102360E3D0E01023D0E430E01013D0E490E0100490E500E0102500E560E0102560E5C0E0102560E630E0100630E690E0102690E700E0102700E760E0101700E7C0E01007C0E830E0102830E890E0102890E8F0E0102890E960E01008F0E960E0102960E9C0E0105A30EA90E0101A30EAF0E0100A90EAF0E0101AF0EB60E0106B60EBC0E0106BC0EC20E0108BC0EC90E0100C90ECF0E0102CF0ED50E0102D60EDC0E0101D60EE20E0100E20EE90E0102E90EEF0E0102EF0EF50E0102EF0EFC0E0100FC0E020F0102020F080F0102080F0F0F0101080F150F0100150F1C0F01021C0F220F0102220F280F0102220F2F0F01002F0F350F0102350F3B0F01023B0F420F01013B0F480F0100480F4F0F01024F0F550F0102550F5B0F0102550F620F0100620F680F0102680F6E0F01026E0F750F01016E0F7B0F01007B0F820F0102820F880F0102880F8E0F0102880F950F0100950F9B0F01029B0FA10F0102A10FA80F0101A10FAE0F0100AE0FB40F0102B50FBB0F0102BB0FC10F0102BB0FC80F0100C80FCE0F0102CE0FD40F0102D40FDB0F0101D40FE10F0100E10FE70F0102E80FEE0F0102EE0FF40F0102EE0FFB0F0100F40FFB0F0102FB0F0110010507100E1001020710141001000E101410010214101A10010521102710010221102E10010027102E1001022E103410010934103A1001093A10411001063A104710010041104710010647104D1001044D10541001045410611002080061106D1001056D107A10030103007A10801001028010871001028710931001009410A0100105A010AD1003010300AD10BA100105BA10C610020300C710D3100105D310E01003010300E010ED100105ED10F910020300F91006110105061113110301030013112011010520112C110203002C1139110105391146110301030046114C1101024C115311010253115F1101005F116C1101056C117911030103007911861101058611921102030092119F1101059F11AC1103010300AC11B9110105B911C511020300C511D2110105D211D8110101D211DF11020300D911DF110101DF11E5110101E511EC110101EC11F81103080300F81105120105051212120301030012121812010218121F1201021F122B1201002B1238120105381245120301030045125212010552125E120203005E126B1201056B127812030103007812841201058512911202030091129E1201059E12AB1203010300AB12B7120105B812C412020300C412D1120105D112DE1203010300DE12E4120102E412EA120102EA12F7120100F71204130105041311130301030011131D1301051D132A130203002A1337130105371344130301030044135013010550135713010950135D13010057135D13010964136A1301096A13701301096A137713010070137713010977137D1301067D13831301068313901302080090139D1301059D13AA1303010300AA13B0130102B013B6130102B613C3130100C313D0130105D013DD1303010300DD13E9130105E913F613020300F61303140105031410140301030010141C1401051C142914020300291436140105361443140301030043144F1401054F145C140203005C1469140105691475140301030076147C1401027C148214010282148F1401008F149C1401059C14A81403010300A914B5140105B514C214020300C214CF140105CF14DB1403010300DB14E8140105E814F514020300F5140215010502150815010102150E1502030008150E1501010E151515010115151B1501011B15281503080300281535150105351541150301030041154815010248154E1501024E155B1501005B1568150105681574150301030074158115010581158E150203008E159B1501059B15A71503010300A715B4150105B415C115020300C115CE150105CE15DA1503010300DA15E7150105E715F415020300F4150116010501160D16030103000D161416010214161A1601021A1627160100271633160105341640160301030040164D1601054D165A160203005A1666160105671673160301030073168016010580168616010980168D16010086168D1601099316991601099916A01601099916A6160100A016A6160109A616AD160106AD16B3160106B316C016020300C016CC160105CC16D91603010300D916E0160102E016E6160102E616F3160100F316FF160105FF160C17030103000C17191701051917261702030026173217010532173F17030103003F174C1701054C175917020300591765170105651772170301030072177F1701057F178C170203008C17981701059817A51703010300A517AB170102AB17B2170102B217BF170100BF17CB170105CB17D81703010300D817E5170105E517F217020300F217FE170105FE170B18030103000B18181801051818241802030025183118010531183E18030103003E184B1801054B185718020300581864180105641871180301030071187718010277187E1801027E188A1801008A18971801059718A41803010300A418B1180105B118BD18020300BD18CA180105CA18D71803010300D718E4180105E418F018020300F018FD180105FD180A19030103000A19171901051719231902030023193019010530193D19030103003D194319010243194A1901024A1956190100561963190105631970190301030070197D1901057D1989190203008919961901059619A31903010300A319B0190105B019B6190101B019BC190100B619BC190101BC19C3190109C319C9190109C919CF190107C919D6190100CF19D6190107D619DC190104DC19E3190104E319EF19020300EF19FC190105FC19091A03010300091A0F1A01020F1A151A0102161A221A0100221A2F1A01052F1A3C1A030103003C1A481A0105491A551A020300551A621A0105621A6F1A030103006F1A7B1A01057B1A881A020300881A951A0105951AA21A03010300A21AAE1A0105AE1ABB1A020300BB1AC81A0105C81AD51A03010300D51ADB1A0102DB1AE11A0102E11AEE1A0100EE1AFB1A0105FB1A081B03010300081B141B0105141B211B020300211B2E1B01052E1B3B1B030103003B1B471B0105471B541B020300541B611B0105611B6E1B030103006E1B7A1B01057A1B871B020300871B941B0105941BA11B03010300A11BA71B0102A71BAD1B0102AD1BBA1B0100BA1BC71B0105C71BD31B03010300D41BE01B0105E01BED1B020300ED1BFA1B0105FA1B061C03010300071C131C0105131C201C020300201C2D1C01052D1C391C03010300391C461C0105461C531C020300531C601C0105601C6C1C030103006C1C731C0102731C791C0102791C861C0100861C931C0105931C9F1C030103009F1CAC1C0105AC1CB91C020300B91CC61C0105C61CD21C03010300D21CDF1C0105DF1CEC1C020300EC1CF91C0105F91CFF1C0106F91C051D0100FF1C051D0106051D0C1D01040C1D121D0104121D1F1D0203001F1D2C1D01052C1D381D03010300381D3F1D01023F1D451D0102451D521D0100521D5F1D01055F1D6B1D030103006B1D781D0105781D851D020300851D921D0105921D9E1D030103009E1DAB1D0105AB1DB81D020300B81DC41D0105C51DD11D03010300D11DDE1D0105DE1DEB1D020300EB1DF71D0105F81D041E03010300041E0B1E01020B1E111E0102111E1E1E01001E1E2A1E01052A1E371E03010300371E441E0105441E511E020300511E5D1E01055D1E6A1E030103006A1E771E0105771E841E020300841E901E0105901E9D1E030103009D1EAA1E0105AA1EB71E020800B71EC31E0105C31ED01E03010300D01ED61E0102D71EDD1E0102DD1EEA1E0100EA1EF61E0105F61E031F03010300031F101F0105101F1D1F0203001D1F291F0105291F361F03010300361F431F0105431F501F020300501F5C1F01055C1F691F03010300691F761F0105761F831F020300831F8F1F01058F1F9C1F030103009C1FA21F0102A21FA91F0102A91FB51F0100B61FC21F0105C21FCF1F03010300CF1FDC1F0105DC1FE81F020300E91FF51F0105F51F02200301030002200F2001050F201B200203001B202820010528202F200101282035200203002F203520010135203B2001013B204220010142204E20030803004E205B2001055B2068200301030068206E2001026E207520010275208120010081208E2001058E209B20030103009B20A8200105A820B420020300B420C1200105C120CE2003010300CE20DB200105DB20E720020300E720F4200105F42001210301030001210E2101050E211A210203001A2127210105272134210301030034213A2101023A214121010241214D2101004D215A2101055A216721030103006721732101057421802102030080218D2101058D219A21030103009A21A6210105A721AD210109A721B3210100AD21B3210109BA21C0210109C021C6210109C021CD210100C621CD210109CD21D3210106D321D9210106D921E621020800E621F3210105F32100220301030000220622010206220C2201020C2219220100192226220105262233220301030033223F2201053F224C220203004C2259220105592266220301030066227222010572227F220203007F228C2201058C229922030103009922A5220105A522B222020300B222BF220105BF22CC2203010300CC22D2220102D222D8220102D822E5220100E522F2220105F222FF2203010300FF220B2301050B231823020300182325230105252332230301030032233E2301053E234B230203004B235823010558235E230101582364230203005E236423010165236B2301016B237123010171237E23030803007E238B2301058B2397230301030098239E2301029E23A4230102A423B1230100B123BE230105BE23CA2303010300CA23D7230105D723E423020300E423F1230105F123FD2303010300FD230A2401050A241724020300172424240105242430240301030030243D2401053D244A240203004A2457240105572463240301030063246A2401026A247024010270247D2401007D248A2401058A249624030103009624A3240105A324B024020300B024BD240105BD24C92403010300C924D6240105D624DC240109D624E3240100DC24E3240109E924F0240109F024F6240109F024FC240100F624FC240109FC24032501060325092501060925162502080016252325010523252F25030103002F253625010236253C2501023C2549250100492555250105562562250301030062256F2501056F257C250203007C258825010589259525030103009525A2250105A225AF25020300AF25BB250105BB25C82503010300C825D5250105D525E225020300E225EE250105EE25FB2503010300FB250226010202260826010208261526010015262126010521262E26030103002E263B2601053B264826020300482654260105542661260301030061266E2601056E267B260203007B268726010587268E260101872694260203008E269426010194269A2601019A26A1260101A126AE2603080300AE26BA260105BA26C72603010300C726CD260102CD26D4260102D426E1260100E126ED260105ED26FA2603010300FA26072701050727132702030014272027010520272D27030103002D273A2701053A274627020300472753270105532760270301030060276D2701056D27792702030079278627010586279327030103009327992701029927A0270102A027AC270100AC27B9270105B927C62703010300C627D3270105D327DF27020300DF27EC270105EC27F92703010300F9270628010506280C2801090628122801000C281228010919281F2801091F28252801091F282C28010026282C2801092C28322801063228392801063928522802080A007474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E707070706E6E717073707171706E6E6E7370707070706E6E7170737074747474747171717370707070706E6E717073707171706E6E6E7370707070706E6E7170737074747474747171717471707070706E6E717073707171706E6E6E7370707070706E6E71707370707070706E6E74747474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E707070706E6E717073707171706E6E6E7370707070706E6E7170737074747474747171717370707070706E6E717073707171706E6E6E7370707070706E6E7170737074747474747171717471707070706E6E717073707171706E6E6E7370707070706E6E71707370707070706E6E74747474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E7474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E6E6E6C6B6B6B6E6C73707171706E6E6E716E6E6E6C6B6B6B6E6C73707171706E6E6E716E6E6E6C6B6B6B6E6C73707171706E6E6E716E6E6E6C6B6B6B6E6C73707171706E6E6E716E707070706E6E717073707171706E6E6E7370707070706E6E717073707171706E6E6E73707474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E7474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E7474747470717171717471737373736E707070706E707474747470717171717471737373736E7071716E6E7474747470717171717471737373736E707070706E707474747470717171717471737373736E707171716E013B373B373D393B373A3639353A363A363B373B373D3939353A363A363B373B373D393B373A3639353A363A363B373B373D393B373B373D393B373A3639353A363A363B373B373D3939353A363A363B373B373D393B373A3639353A363A363B373B373D393B373B373D393B373A3639353A363A363B373B373D3939353A363A363B373B373D393B373A3639353A363A363B373B373D393B373B373D393B373A3639353A363A363B373B373D3939353A363A363B373B373D393B373A3639353A363A363B373B373D391C1C1C1D1D1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D1D1B1E1C1E1C1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D1D1B1E1C1E1C1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D1D1B1E1C1E1C1F1D1E1C201D1E1C1E1C1D1B1E1C1E1C1F1D1E1C201D02474949494E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A4E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A4E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A4E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A4E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A4E4C4A4E4C4A4F4C4B4F4C4B4F4C4B4E4C4A4E4C4B504E4C4E4C4B4E4C4A625C5C5D5E5D5C595D5C595E5C5A625C5C5D5E5D5C595D5C595E5C5A625C5C5D5E5D5C595D5C595E5C5A625C5C5D5E5D5C595D5C595E5C5A5D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C595D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C595D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C595D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C595D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C595D5B595D5B595E5C5A5E5C5A5E5C5A5D5B595D5C5A5F5D5B5D5C5A5D5C59034C474C474C464A454A454A454A454A454A454A45393B2C2D5C564E494F49504A514C4C474C474C464A454A45393B2C2D5C564E494F49504A514C4C474C474C464A454A454A454C474C474C464A454A454A454C474C474C464A454A454A454A454A454A454A454C474C474C464A454A454A454C474C474C464A454A454A454C474C474C464A454A454A454A454A454A454A454A454A454A454A454A450461605F5F5E6061626161605F61625C5C5E6161605F615F5E61606161626161605F61625E5E5E5D5E5F5E5D5F5E5E5E5D5E6261605F615E5D5E62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F5F5F615F5E606161626161605F61625C5C5E5D5E5F5F5F615F615F5E606161626161605F61625E5D5D5E5F5E5D5E5E5E5D5E626261605F615E5D5E62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F62615F615D62615F615D62615F615D62615F615D5F5F615F5E606161626161605F61625C5C5E5D5E5F5F5F615F615F5E606161626161605F61625E5D5D5E5F5E5D5E5E5E5D5E626261605F615E5D5E62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F62615F615D5D5E62615F615E5E5F606162615F615F5E61606162625E5F62615F615D5D5E62615F615C605F606162615F615F5E606162625E5F054F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E51504E52504F51504E51504E52504F51504E4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E51504E52504F51504E51504E52504F51504E4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E504E4C504F4C504E4C4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E4F4D4C504F4C504F4C504E4C514F4D504F4C52504F51504E4F4D4C504F4C504F4C504E4C514F4D52504F52504F51504E0641403E41403F41403E41403F403E3C403F3D403E3C403E3C403E3C403F3D41403E41403F41403E41403F403E3C403F3D403E3C403E3C403E3C403F3D3E3C3B3F3D3C3E3C3B3F3D3C403E3C403E3C403F3D075E5E5E5E5E606061615F5F606061615D5D5F5F605C5C5C5D5D5F5F61615D5D5F5F6062625C5C5C5D5D5F5F61615C60605C5C5C5C5D5D5F5F5C5C5C5E5E615C5C5E5E60606163635C5C5D5D5F5F6161085050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505078507878787850787878505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050507850787878787878785050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505078507878787878787850505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050785078787878787878505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050785078787878787878505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050507850787878787878785050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505078507878787878787850`;\nconst midiDrumNoteMap: number[] = [36, 38, 42, 44, 45, 46, 47, 48, 49, 50, 57];\nconst trackInstrumentMap: number[] = [34, 48, 52, 56, 57, 88, 90, 118, -1];\n\nconst title = \"\";\n\nconst textColor = 1;\nconst octaveLineColor = 12;\nconst beatLineColor = 12;\nconst measureLineColor = 11;\n// These will be cycled through if we have more instruments than colors\n// Do not use black (color 15)\nconst allowedInstrumentColors = [2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14];\nconst progressToPlayBackColor = 12;\nconst progressPlayedBackColor = 2;\n\nconst SHOW_RENDER_STATS = true;\n\nconst RENDERABLE_NOTES_TO_PREALLOC = 500;\n\nnamespace userconfig {\n export const ARCADE_SCREEN_WIDTH = 299;\n export const ARCADE_SCREEN_HEIGHT = 224; // 229/320*240 = 224.25\n}\n\ngame.stats = true;\ngame.consoleOverlay.setVisible(true);\nscene.setBackgroundColor(0);\n\nnamespace SongVisualizer {\n export interface RenderStats {\n notesOnScreen: number;\n noteRenderablePoolSize: number;\n notesOnKeyboard: number;\n notesVisibleOnKeyboard: number;\n }\n\n interface RenderableNote {\n left: number;\n top: number;\n width: number;\n height: number;\n color: number;\n trackIdx: number;\n note: number;\n active: boolean;\n }\n\n export class SongVisualizer {\n public noteStretch: number = 1;\n public midiDrumNoteMap: number[];\n public trackInstrumentMap: number[];\n\n protected sequencer: music.sequencer._SimulatorSequencer;\n protected songObj: music.sequencer.Song;\n // always 128 long\n // every key is a list of tracks that are pressing it down\n // every time a track presses it down it removes it from the list and readds to the beginning of the list\n // then the first number is used to render the key color\n protected keyStates: number[] = [];\n // we preallocate a bunch of renderable notes and just reuse them\n // lowers/zeros the amount of allocs every frame\n private _notesToRender: RenderableNote[] = [];\n private _renderNoteIdx: number = 0;\n // for track iteration\n private _lastTrackPos: number[] = []\n\n private _whiteKeyImage: Image = img`\n f f f f\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n f 1 1 1\n `;\n private _whiteKeyActivatedImage: Image = img`\n f f f f\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n f 9 9 9\n `;\n private _blackKeyImage: Image = img`\n f f f\n f f f\n f f f\n f f f\n f f f\n f f f\n f f f\n `;\n private _blackKeyActivatedImage: Image = img`\n f f f\n 9 9 9\n 9 9 9\n 9 9 9\n 9 9 9\n 9 9 9\n 9 9 9\n `;\n private _octaveLineColor: number = 12;\n private _beatLineColor: number = 12;\n private _measureLineColor: number = 11;\n private _allowedInstrumentColors: number[];\n private _trackColors: number[];\n private _progressToPlayBackColor: number = 12;\n private _progressPlayedBackColor: number = 7;\n\n private _blackKeysInOctave: boolean[] = [false, true, false, true, false, false, true, false, true, false, true, false];\n private _keyLefts: number[] = [];\n\n public constructor(protected canvas: Image, protected songBuffer: Buffer) {\n this.sequencer = new music.sequencer._SimulatorSequencer();\n this.songObj = music.createSong(songHex) as music.sequencer.Song;\n // Extra info\n this.midiDrumNoteMap = [];\n this.trackInstrumentMap = [];\n this.allowedInstrumentColors = [9];\n // Track helpers\n for (let i = 0; i < this.songObj.tracks.length; i ++) {\n this._lastTrackPos.push(0);\n }\n // Key rendering\n for (let i = 0; i < 128; i++) {\n this.keyStates.push(0);\n this._keyLefts.push(this.getKeyLeft(i));\n }\n }\n\n public preallocateRenderableNotes(amount: number) {\n while (this._notesToRender.length < amount) {\n this._notesToRender.push({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n color: 0,\n trackIdx: 0, \n note: 0,\n active: false\n })\n }\n }\n\n public play() {\n this.sequencer.play(this.songBuffer, false);\n }\n\n public get octaveLineColor(): number { return this._octaveLineColor; }\n public get beatLineColor(): number { return this._beatLineColor; }\n public get measureLineColor(): number { return this._measureLineColor; }\n public get allowedInstrumentColors(): number[] { return this._allowedInstrumentColors; }\n public get progressToPlayBackColor(): number { return this._progressToPlayBackColor; }\n public get progressPlayedBackColor(): number { return this._progressPlayedBackColor; }\n\n public set octaveLineColor(c: number) { this._octaveLineColor = c; }\n public set beatLineColor(c: number) { this._beatLineColor = c; }\n public set measureLineColor(c: number) { this._measureLineColor = c; }\n public set allowedInstrumentColors(cs: number[]) {\n this._allowedInstrumentColors = cs;\n const midiInstrumentToColorsMap: { [key: number]: number | undefined } = {};\n let colorIdx = 0;\n for (let i = 0; i < this.songObj.tracks.length; i++) {\n const midiInstrument = this.trackInstrumentMap[i];\n // If this MIDI instrument doesn't have a color yet, assign a new color\n if (midiInstrumentToColorsMap[midiInstrument] === undefined) {\n midiInstrumentToColorsMap[midiInstrument] = this.allowedInstrumentColors[colorIdx];\n colorIdx++;\n if (colorIdx == this.allowedInstrumentColors.length) {\n colorIdx = 0;\n }\n }\n }\n this._trackColors = [];\n for (let i = 0; i < this.songObj.tracks.length; i++) {\n const midiInstrument = this.trackInstrumentMap[i];\n this._trackColors.push(midiInstrumentToColorsMap[midiInstrument]);\n }\n }\n public set progressToPlayBackColor(c: number) { this._progressToPlayBackColor = c; }\n public set progressPlayedBackColor(c: number) { this._progressPlayedBackColor = c; }\n\n public get keyTop(): number { return this.canvas.height - this._whiteKeyImage.height; }\n public isBlackKey(k: number): boolean { return this._blackKeysInOctave[k % 12]; }\n public isWhiteKey(k: number): boolean { return !this._blackKeysInOctave[k % 12]; }\n\n protected getKeyLeft(k: number): number {\n let currLeft = -1;\n for (let i = 0; i < 128; i++) {\n if (i == k) {\n return this.isBlackKey(i) ? currLeft - 1 : currLeft;\n }\n currLeft += this.isBlackKey(i) ? 0 : 4;\n }\n return currLeft;\n }\n\n public render(): RenderStats {\n const stats: RenderStats = {\n notesOnScreen: 0,\n noteRenderablePoolSize: 0,\n notesOnKeyboard: 0,\n notesVisibleOnKeyboard: 0,\n };\n\n this.canvas.fill(0);\n\n this.renderVerticalOctaveLines();\n this.renderHorizontalBeatLines();\n this.renderHorizontalMeasureLines();\n\n this._renderNoteIdx = 0;\n this.prepareMelodicTracks();\n this.prepareDrumTracks();\n stats.noteRenderablePoolSize = this._notesToRender.length;\n const notes = this._notesToRender.slice(0, this._renderNoteIdx);\n notes.sort((a, b) => { \n // Sort by note height first, if they are the same, use track index to tie break\n // \"Symphonic depth priority\"\n return (b.height - a.height) || (a.trackIdx - b.trackIdx);\n });\n stats.notesOnScreen = notes.length;\n\n for (let i = 0; i < 128; i++) {\n this.keyStates[i] = -1;\n }\n for (const n of notes) {\n this.canvas.fillRect(n.left, n.top, n.width, n.height, n.color);\n // activate notes on the keyboard here\n if (n.active) {\n if (this.keyStates[n.note] == -1) {\n stats.notesVisibleOnKeyboard ++;\n }\n this.keyStates[n.note] = n.trackIdx;\n stats.notesOnKeyboard ++;\n }\n }\n\n this.renderKeys();\n this.renderPlaybackProgress();\n\n return stats;\n }\n\n protected renderVerticalOctaveLines() {\n let currLeft = -1;\n for (let i = 0; i < 128; i++) {\n const isBlackKey = this._blackKeysInOctave[i % 12];\n currLeft += isBlackKey ? 0 : 4;\n if (i % 12 == 11) {\n this.canvas.drawLine(currLeft, 0, currLeft, this.canvas.height, this.octaveLineColor);\n }\n }\n }\n\n protected renderHorizontalBeatLines() {\n for (let beatY = (this.sequencer.currentTick() % this.songObj.ticksPerBeat) * this.noteStretch;\n beatY < this.canvas.height;\n beatY += this.songObj.ticksPerBeat * this.noteStretch) {\n this.canvas.drawLine(0, beatY, this.canvas.width, beatY, this.beatLineColor);\n }\n }\n\n protected renderHorizontalMeasureLines() {\n const ticksPerMeasure = this.songObj.ticksPerBeat * this.songObj.beatsPerMeasure;\n for (let beatY = (this.sequencer.currentTick() % ticksPerMeasure) * this.noteStretch;\n beatY < this.canvas.height;\n beatY += ticksPerMeasure * this.noteStretch) {\n this.canvas.drawLine(0, beatY, this.canvas.width, beatY, this.measureLineColor);\n }\n }\n\n protected prepareMelodicTracks() {\n const currentTick = this.sequencer.currentTick();\n for (let trackIdx = 0; trackIdx < this.songObj.tracks.length; trackIdx++) {\n const track = this.songObj.tracks[trackIdx] as music.sequencer.MelodicTrack;\n if (!track.isMelodicTrack) {\n continue;\n }\n // Thank you @AqeeAqee\n // https://github.com/AqeeAqee/arcade-karaoke/blob/master/Karaoke.ts#L375\n const tempNote = new music.sequencer.NoteEvent(track.buf, track.noteEventStart + 2);\n let noteDisplayed = false;\n for (let i = this._lastTrackPos[trackIdx]; tempNote.offset < track.offset + track.byteLength; tempNote.offset += tempNote.byteLength, i++) {\n const height = Math.max(Math.ceil(tempNote.endTick - tempNote.startTick) * this.noteStretch - 1, 1);\n const bottom = this.keyTop - ((tempNote.startTick - currentTick) * this.noteStretch);\n const top = bottom - height;\n if (top > this.canvas.height) {\n continue;\n }\n if (bottom < 0) {\n break;\n }\n if (!noteDisplayed) {\n this._lastTrackPos[trackIdx] = i;\n }\n noteDisplayed = true;\n const active = tempNote.startTick <= currentTick && currentTick <= tempNote.endTick;\n for (let j = 0; j < tempNote.polyphony; j++) {\n const note = tempNote.getNote(j, track.instrument.octave) + 23;\n const isBlack = this.isBlackKey(note);\n const width = isBlack ? this._blackKeyImage.width : (this._whiteKeyImage.width - 1);\n const color = this._trackColors[trackIdx];\n const left = this._keyLefts[note] + (isBlack ? 0 : 1);\n if (this._renderNoteIdx < this._notesToRender.length) {\n const reusedNote = this._notesToRender[this._renderNoteIdx];\n reusedNote.left = left;\n reusedNote.top = top;\n reusedNote.width = width;\n reusedNote.height = height;\n reusedNote.color = color;\n reusedNote.trackIdx = trackIdx;\n reusedNote.note = note;\n reusedNote.active = active;\n this._renderNoteIdx++;\n } else {\n this._notesToRender.push({\n left, top, width, height, color, trackIdx, note, active\n });\n }\n }\n }\n }\n }\n\n protected prepareDrumTracks() {\n const currentTick = this.sequencer.currentTick();\n for (let trackIdx = 0; trackIdx < this.songObj.tracks.length; trackIdx++) {\n const track = this.songObj.tracks[trackIdx] as music.sequencer.DrumTrack;\n if (track.isMelodicTrack) {\n continue;\n }\n // Thank you @AqeeAqee\n // https://github.com/AqeeAqee/arcade-karaoke/blob/master/Karaoke.ts#L375\n const tempNote = new music.sequencer.NoteEvent(track.buf, track.noteEventStart + 2);\n let noteDisplayed = false;\n for (let i = this._lastTrackPos[trackIdx]; tempNote.offset < track.offset + track.byteLength; tempNote.offset += tempNote.byteLength, i++) {\n const height = Math.max(Math.ceil(tempNote.endTick - tempNote.startTick) * this.noteStretch - 1, 1);\n const bottom = this.keyTop - ((tempNote.startTick - currentTick) * this.noteStretch);\n const top = bottom - height;\n if (top > this.canvas.height) {\n continue;\n }\n if (bottom < 0) {\n break;\n }\n if (!noteDisplayed) {\n this._lastTrackPos[trackIdx] = i;\n }\n noteDisplayed = true;\n const active = tempNote.startTick <= currentTick && currentTick <= tempNote.endTick;\n for (let j = 0; j < tempNote.polyphony; j++) {\n let note = tempNote.getNote(j);\n if (this.midiDrumNoteMap.length > note) {\n // We have a mapping to correct drum indices to actual MIDI drum notes\n note = this.midiDrumNoteMap[note];\n }\n const isBlack = this.isBlackKey(note);\n const width = isBlack ? this._blackKeyImage.width : (this._whiteKeyImage.width - 1);\n const color = this._trackColors[trackIdx];\n const left = this._keyLefts[note] + (isBlack ? 0 : 1);\n if (this._renderNoteIdx < this._notesToRender.length) {\n const reusedNote = this._notesToRender[this._renderNoteIdx];\n reusedNote.left = left;\n reusedNote.top = top;\n reusedNote.width = width;\n reusedNote.height = height;\n reusedNote.color = color;\n reusedNote.trackIdx = trackIdx;\n reusedNote.note = note;\n reusedNote.active = active;\n this._renderNoteIdx++;\n } else {\n this._notesToRender.push({\n left, top, width, height, color, trackIdx, note, active\n });\n }\n }\n }\n }\n }\n\n protected renderKeys() {\n const colorToReplace = 9;\n for (let i = 0; i < 128; i++) {\n if (this.isWhiteKey(i)) {\n const isActive = this.keyStates[i] != -1;\n if (isActive) {\n const mostRecentTrackToPush = this.keyStates[i];\n const trackColorToUse = this._trackColors[mostRecentTrackToPush];\n // replace with the correct color\n this._whiteKeyActivatedImage.replace(colorToReplace, trackColorToUse);\n this.canvas.drawTransparentImage(this._whiteKeyActivatedImage, this._keyLefts[i], this.keyTop);\n // reset it so next color replace works\n this._whiteKeyActivatedImage.replace(trackColorToUse, colorToReplace);\n } else {\n this.canvas.drawTransparentImage(this._whiteKeyImage, this._keyLefts[i], this.keyTop);\n }\n }\n }\n // Render black keys AFTER so that they are drawn on top\n for (let i = 0; i < 128; i++) {\n if (this.isBlackKey(i)) {\n const isActive = this.keyStates[i] != -1;\n if (isActive) {\n const mostRecentTrackToPush = this.keyStates[i];\n const trackColorToUse = this._trackColors[mostRecentTrackToPush];\n // replace with the correct color\n this._blackKeyActivatedImage.replace(colorToReplace, trackColorToUse);\n this.canvas.drawTransparentImage(this._blackKeyActivatedImage, this._keyLefts[i], this.keyTop);\n // reset it so next color replace works\n this._blackKeyActivatedImage.replace(trackColorToUse, colorToReplace);\n } else {\n this.canvas.drawTransparentImage(this._blackKeyImage, this._keyLefts[i], this.keyTop);\n }\n }\n }\n }\n\n protected renderPlaybackProgress() {\n const progressHeight = 2;\n const progress = this.currentTick / this.maxTick;\n const width = Math.ceil(progress * this.canvas.width);\n this.canvas.fillRect(0, 0, this.canvas.width, progressHeight, this.progressToPlayBackColor);\n this.canvas.fillRect(0, 0, width, progressHeight, this.progressPlayedBackColor);\n }\n\n public get currentTick(): number {\n return this.sequencer.currentTick();\n }\n\n public get maxTick(): number {\n const ticksPerMeasure = this.songObj.ticksPerBeat * this.songObj.beatsPerMeasure;\n return ticksPerMeasure * this.songObj.measures;\n }\n\n public get ticksPerSec(): number {\n return this.songObj.ticksPerBeat * this.songObj.beatsPerMinute / 60;\n }\n\n public get currentSecond(): number {\n return this.currentTick / this.ticksPerSec;\n }\n\n public get maxSecond(): number {\n return this.maxTick / this.ticksPerSec;\n }\n }\n}\n\nconst titleSprite = fancyText.create(title);\nfancyText.setColor(titleSprite, textColor);\ntitleSprite.left = 2;\ntitleSprite.top = 4;\ntitleSprite.z = 3;\n\nconst playbackProgressSprite = fancyText.create(\"\");\nfancyText.setColor(playbackProgressSprite, textColor)\nplaybackProgressSprite.right = scene.screenWidth() - 2;\nplaybackProgressSprite.top = 4;\nplaybackProgressSprite.z = 3;\n\nconst renderStatsSprite = fancyText.create(\"\");\nfancyText.setColor(renderStatsSprite, textColor)\nrenderStatsSprite.left = 2;\nrenderStatsSprite.bottom = 210;\nrenderStatsSprite.z = 3;\nrenderStatsSprite.setFlag(SpriteFlag.Invisible, !SHOW_RENDER_STATS);\n\nconst canvasSprite = sprites.create(image.create(scene.screenWidth(), scene.screenHeight()), SpriteKind.Player);\nconst visualizer = new SongVisualizer.SongVisualizer(canvasSprite.image, songHex);\nvisualizer.preallocateRenderableNotes(RENDERABLE_NOTES_TO_PREALLOC);\n// Give extra info first\nvisualizer.midiDrumNoteMap = midiDrumNoteMap;\nvisualizer.trackInstrumentMap = trackInstrumentMap;\n// Then update the theme\nvisualizer.octaveLineColor = octaveLineColor;\nvisualizer.beatLineColor = beatLineColor;\nvisualizer.measureLineColor = measureLineColor;\nvisualizer.allowedInstrumentColors = allowedInstrumentColors;\nvisualizer.progressPlayedBackColor = progressPlayedBackColor;\nvisualizer.progressToPlayBackColor = progressToPlayBackColor;\n\n// visualizer.noteStretch = 0.5;\nvisualizer.play();\n\nfunction formatTime(totalSecs: number): string {\n const min = Math.floor(totalSecs / 60);\n const sec = totalSecs % 60;\n // const paddedMin = min < 10 ? `0${min}` : `${min}`;\n const paddedSec = sec < 10 ? `0${sec}` : `${sec}`;\n return `${min}:${paddedSec}`;\n}\n\ngame.onUpdate(() => {\n const renderStats = visualizer.render();\n // Update time\n // const time = `${visualizer.currentTick}/${visualizer.maxTick}`;\n // const time = `${Math.roundWithPrecision(visualizer.currentSecond, 3)}/${visualizer.maxSecond}`;\n const time = `${formatTime(Math.round(visualizer.currentSecond))}/${formatTime(visualizer.maxSecond)}`;\n fancyText.setText(playbackProgressSprite, time);\n playbackProgressSprite.right = scene.screenWidth() - 2;\n // Show debug info\n fancyText.setText(\n renderStatsSprite, \n `S: ${renderStats.notesOnScreen} (${renderStats.noteRenderablePoolSize})\\n` + \n `K: ${renderStats.notesVisibleOnKeyboard} (${renderStats.notesOnKeyboard})`\n );\n renderStatsSprite.bottom = 210;\n});\n\n","README.md":" ","assets.json":"","pxt.json":"{\n \"name\": \"Song visualizer\",\n \"description\": \"\",\n \"dependencies\": {\n \"device\": \"*\",\n \"arcade-fancy-text\": \"github:riknoll/arcade-fancy-text#v0.2.1\"\n },\n \"files\": [\n \"main.blocks\",\n \"main.ts\",\n \"README.md\",\n \"assets.json\"\n ],\n \"targetVersions\": {\n \"branch\": \"master\",\n \"tag\": \"v4.1.4\",\n \"commits\": \"https://github.com/microsoft/pxt-arcade/commits/f6a139b3f974ed613ced6df7421f321e09bfe985\",\n \"target\": \"4.1.4\",\n \"pxt\": \"12.3.10\"\n },\n \"preferredEditor\": \"tsprj\"\n}\n"}}],"shares":[],"lastSaveTime":1781844923969}