From 27d24faf396367d9f8fadd86324e584b5403d261 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 28 Apr 2016 23:10:40 -0400 Subject: adds condition to one last audio ref in planck default --- keyboard/planck/keymaps/default/keymap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index fa9c3915a..e120d358a 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -325,7 +325,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) layer_off(_LOWER); layer_off(_ADJUST); layer_off(_MUSIC); - stop_all_notes(); + #ifdef AUDIO_ENABLE + stop_all_notes(); + #endif layer_on(_PLOVER); if (!eeconfig_is_enabled()) { eeconfig_init(); -- cgit v1.3.1 From 66e0323881a5a3da65e14daeec41a1e9cfbda431 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 29 Apr 2016 12:42:55 -0400 Subject: removes extra voices, updates .hex files --- keyboard/planck/keymaps/default/keymap.c | 2 +- keyboard/planck/planck_pcb_r4.hex | 3159 ++++++++++---------- keyboard/planck/planck_pcb_r4_w_bootloader.hex | 3159 ++++++++++---------- keyboard/preonic/keymaps/default/keymap.c | 2 +- keyboard/preonic/preonic_pcb_r1.hex | 3328 +++++++++++----------- keyboard/preonic/preonic_pcb_r1_w_bootloader.hex | 3071 ++++++++++---------- quantum/audio/voices.c | 42 +- 7 files changed, 6370 insertions(+), 6393 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index e120d358a..e7a9ea9e4 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -365,7 +365,7 @@ void play_goodbye_tone() } uint8_t starting_note = 0x0C; -int offset = 7; +int offset = 0; void process_action_user(keyrecord_t *record) { diff --git a/keyboard/planck/planck_pcb_r4.hex b/keyboard/planck/planck_pcb_r4.hex index 889af7f22..bd68d9e90 100644 --- a/keyboard/planck/planck_pcb_r4.hex +++ b/keyboard/planck/planck_pcb_r4.hex @@ -1,73 +1,73 @@ -:100000000C94FE040C9442050C9442050C94420599 -:100010000C9442050C9442050C9442050C94420544 -:100020000C9442050C9442050C94A6180C94781973 -:100030000C94DB270C9442050C9442050C94420569 -:100040000C9442050C9442050C9442050C94420514 -:100050000C9442050C9443280C9442050C944205E0 -:100060000C9442050C9442050C9442050C944205F4 -:100070000C9442050C9442050C9442050C944205E4 -:100080000C94D10E0C9442050C9442050C9442053C -:100090000C9442050C9442050C9442050C944205C4 -:1000A0000C9442050C9442050C9442059D05AD0547 -:1000B000BF05CF05D505E405F005F60504060D06D8 -:1000C0001E062E06340664069013901390139013A8 -:1000D000901390139013901390139013A713A713DA -:1000E000A713A713A713A713A713A713A713A71340 -:1000F00090139013901390139013A713A713A713A3 -:10010000A713A713901390139013A713A713A71364 -:10011000E519071AF51A071AF51A4C1A6F1AF51A83 -:10012000C41AD71ADA1DDA1D171E171E711EAF1E4C -:1001300027212721C81E2721C91FC91F8C20A320C2 -:100140002721122107634236B79BD8A71A39685670 -:1001500018AEBAAB558C1D3CB7CC5763BD6DEDFDE9 -:10016000753EF6177231BF000000803F08000000A6 -:10017000BE922449123EABAAAA2ABECDCCCC4C3E9C -:1001800000000080BEABAAAAAA3E00000000BF008B -:100190000000803F0000000000084178D3BB438787 -:1001A000D1133D190E3CC3BD4282AD2B3E68EC829B -:1001B00076BED98FE1A93E4C80EFFFBE01C4FF7F20 -:1001C0003F00000000002B0014001A00080015007A -:1001D00017001C0018000C00120013002A00290050 -:1001E00004001600070009000A000B000D000E00B5 -:1001F0000F0033003400E1001D001B000600190051 -:1002000005001100100036003700380028000530C6 -:10021000E000E200E30003302C002C00043050002A -:10022000510052004F002B0014001A000900130067 -:100230000A000D000F0018001C0033002A002900DE -:10024000040015001600170007000B00110008003D -:100250000C0012003400E1001D001B000600190014 -:1002600005000E0010003600370038002800053069 -:10027000E000E200E30003302C002C0004305000CA -:10028000510052004F002B0034003600370013009D -:100290001C0009000A00060015000F002A002900B2 -:1002A00004001200080018000C0007000B001700E3 -:1002B000110016003800E100330014000D000E009C -:1002C0001B00050010001A0019001D002800053051 -:1002D000E000E200E30003302C002C00043050006A -:1002E000510052004F0035021E021F02200221025F -:1002F0002202230224022502260227022A004C00A1 -:100300003A003B003C003D003E003F002D022E0223 -:100310002F02300231020100400041004200430040 -:10032000440045000100010001000100010001003E -:100330000100010001000100010001000100AB000B -:10034000AA00A900AE0035001E001F0020002100F9 -:100350002200230024002500260027002A004C004C -:100360003A003B003C003D003E003F002D002E00C7 -:100370002F003000310001004000410042004300E6 -:1003800044004500010001000100010001000100DE -:100390000100010001000100010001000100AB00AB -:1003A000AA00A900AE00000000000000000000004C -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F0000000000000000330000000000430000096 -:100400000000000000001E001E001E001E001E0056 -:100410001E001E001E001E001E001E001E0000000A -:1004200014001A000800150017001C0018000C002A -:10043000120013002F00000004001600070009003E -:100440000A000B000D000E000F00330034000D30C9 -:10045000000000000600190000000000110010005C +:100000000C94DA040C941E050C941E050C941E0529 +:100010000C941E050C941E050C941E050C941E05D4 +:100020000C941E050C941E050C94B7180C94891999 +:100030000C94EC270C941E050C941E050C941E05C4 +:100040000C941E050C941E050C941E050C941E05A4 +:100050000C941E050C9454280C941E050C941E053B +:100060000C941E050C941E050C941E050C941E0584 +:100070000C941E050C941E050C941E050C941E0574 +:100080000C94AD0E0C941E050C941E050C941E05CC +:100090000C941E050C941E050C941E050C941E0554 +:1000A0000C941E050C941E050C941E0579058905FB +:1000B0009B05AB05B105C005CC05D205E005E905FA +:1000C000FA050A0610064006F619181A061B181A31 +:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC +:1000E000281E281E821EC01E38213821D91E382104 +:1000F000DA1FDA1F9D20B4203821232107634236FE +:10010000B79BD8A71A39685618AEBAAB558C1D3CA8 +:10011000B7CC5763BD6DEDFD753EF6177231BF006C +:100120000000803F08000000BE922449123EABAAA6 +:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01 +:10014000AA3E00000000BF000000803F0000000049 +:1001500000084178D3BB4387D1133D190E3CC3BD82 +:100160004282AD2B3E68EC8276BED98FE1A93E4C2F +:1001700080EFFFBE01C4FF7F3F00000000002B00A6 +:1001800014001A000800150017001C0018000C00CD +:10019000120013002A0029000400160007000900BD +:1001A0000A000B000D000E000F0033003400E100C8 +:1001B0001D001B000600190005001100100036008C +:1001C0003700380028000530E000E200E30003308B +:1001D0002C002C0004305000510052004F002B0026 +:1001E00014001A00090013000A000D000F00180087 +:1001F0001C0033002A002900040015001600170017 +:1002000007000B00110008000C0012003400E10090 +:100210001D001B000600190005000E00100036002E +:100220003700380028000530E000E200E30003302A +:100230002C002C0004305000510052004F002B00C5 +:1002400034003600370013001C0009000A000600C5 +:1002500015000F002A0029000400120008001800F1 +:100260000C0007000B001700110016003800E10019 +:10027000330014000D000E001B00050010001A00D2 +:1002800019001D0028000530E000E200E300033003 +:100290002C002C0004305000510052004F00350259 +:1002A0001E021F0220022102220223022402250232 +:1002B000260227022A004C003A003B003C003D0089 +:1002C0003E003F002D022E022F02300231020100BB +:1002D000400041004200430044004500010001008D +:1002E0000100010001000100010001000100010006 +:1002F000010001000100AB00AA00A900AE0035001A +:100300001E001F00200021002200230024002500E1 +:10031000260027002A004C003A003B003C003D002C +:100320003E003F002D002E002F0030003100010064 +:10033000400041004200430044004500010001002C +:1003400001000100010001000100010001000100A5 +:10035000010001000100AB00AA00A900AE000000EE +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000003301A +:1003B00000000000043000000000000000001E00EB +:1003C0001E001E001E001E001E001E001E001E003D +:1003D0001E001E001E00000014001A000800150078 +:1003E00017001C0018000C00120013002F00000062 +:1003F00004001600070009000A000B000D000E00A3 +:100400000F00330034000D3000000000060019001A +:1004100000000000110010000000000000000000BB +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C @@ -117,1512 +117,1529 @@ :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C00000000000000001000050010001000100D5 -:1007D0000100010001000100010001004C000100C6 -:1007E0000100010007300630135012500030013074 -:1007F00002300C30010001000B300A3009300830A3 -:1008000001000100010001000100010001000100E0 -:1008100001000100010001000100010001000100D0 -:100820000100010001002803540068006500200059 -:1008300050006C0061006E0063006B0020004B00F4 -:100840006500790062006F006100720064000000C2 -:100850002C034F007200740068006F006C00690088 -:100860006E0065006100720020004B006500790099 -:1008700062006F00610072006400730000000403F6 -:10088000090409026D00040100A0FA090400000136 -:1008900003010100092111010001223F0007058128 -:1008A0000308000A090401000103010200092111E3 -:1008B000010001224D000705820308000A09040215 -:1008C0000001030000000921110100012236000788 -:1008D00005830308000A090403000103000000095E -:1008E00021110100012239000705840310000112C3 -:1008F00001100100000008EDFE606001000102002F -:100900000105010906A101050719E029E7150025E0 -:1009100001950875018102050819012905950575DC -:1009200001910295017503910105071900297715B9 -:10093000002501957875018102C005010980A1019A -:10094000850216010026B7001A01002AB7007510AB -:1009500095018100C0050C0901A101850316010064 -:10096000269C021A01002A9C02751095018100C084 -:1009700005010902A1010901A100050919012905C3 -:100980001500250195057501810295017503810109 -:100990000501093009311581257F95027508810609 -:1009A00009381581257F950175088106050C0A38DF -:1009B000021581257F950175088106C0C0050109D2 -:1009C00006A101050719E029E7150025019508751D -:1009D0000181029501750881010508190129059514 -:1009E000057501910295017503910105071900290B -:1009F000FF150025FF950675088100C011241FBE54 -:100A0000CFEFDAE0DEBFCDBF04B603FE24C0809195 -:100A1000190490911A04A0911B04B0911C04873012 -:100A2000904BA740B04BB9F41092190410921A04DD -:100A300010921B0410921C0414BE84B7877F84BFDD -:100A400088E10FB6F89480936000109260000FBEAA -:100A5000E0E0F8E3099513E0A0E0B1E0E4E8F3E6B4 -:100A600002C005900D92A431B107D9F714E0A4E1BA -:100A7000B3E001C01D92A931B107E1F70E94EC1566 -:100A80000C94C0310C940000279A2F988FEF9FEFA1 -:100A900090938700809386008AE08093800089E1AC -:100AA000809381000C94452D282F81110BC08091DB -:100AB0008000877F8093800010928D0010928C00C0 -:100AC0002F9808952F9880918000886080938000EF -:100AD000233019F48FEF9FEF0FC083E090E0821B6B -:100AE0009109880F991F2FEF3FEFA90102C056957A -:100AF00047958A95E2F7CA0190938D0080938C0008 -:100B00000895CF93DF93EC010E94DC28BE0180E0C2 -:100B100090E0DF91CF910C9407250F931F93462F00 -:100B200050E04E30510508F0DEC0DC01FA01EA5A0F -:100B3000FF4F12968C910C948431882309F4D3C012 -:100B400000E010E0980140E064E070E08BE292E0A9 -:100B50000E944F1281E090E00FC0882309F4C3C0C7 -:100B600000E010E0980140E066E070E08BEB91E07F -:100B70000E944F1282E090E00E948105B4C0882359 -:100B800009F4B1C000E010E0980140E068E070E0D6 -:100B90008BEE91E00E944F1284E090E0EDCF88232D -:100BA00011F083E005C083E00CC0882349F084E0A5 -:100BB0000E94842540E164E083E00E94910A93C092 -:100BC00084E00E94A525F6CF882331F085EE0E94AF -:100BD0006E1C0E949C2D87C085EE0E94361D83C02E -:100BE000882309F480C00E94E30D7DC0882309F4A6 -:100BF0007AC00E94DC0D00E010E0980140E065E062 -:100C000070E08BE492E027C0882309F46CC085E093 -:100C10000E94A5250E94040E66C0882309F463C0C3 -:100C200000E010E0980140E068E070E08BE191E0C6 -:100C30000E944F1285E00E94842555C0882309F444 -:100C400052C00E94E21200E010E0980140E068E02B -:100C500070E08BE191E00E944F1245C0882309F4B7 -:100C600042C00E94ED12EFCF8823E9F100E010E0CE -:100C7000980140E066E070E08BE891E00E944F123E -:100C800084E00E94A52583E00E94A52580E10E94C2 -:100C9000A52585E00E94A5250E94040E86E00E94FD -:100CA00084250E94C928811102C00E94A5280E94A3 -:100CB000E12890E090931804809317048068809353 -:100CC00017040E94E5280FC0882369F000E010E0B7 -:100CD000980140E066E070E08BE591E00E944F12E1 -:100CE00086E00E94A52580E090E01F910F91089575 -:100CF0000F931F932FEF89EF90E021508040904099 -:100D0000E1F700C0000000E010E0980140E065E07D -:100D100070E08BE492E00E944F121F910F910895B2 -:100D20000F931F9300E010E0980140E063E070E053 -:100D300083E091E00E944F122FEF82E597E021506F -:100D400080409040E1F700C000001F910F9108958E -:100D5000CF92DF92EF92FF920F931F93CF93DF9387 -:100D6000CDB7DEB7CC58D1090FB6F894DEBF0FBEB1 -:100D7000CDBF2091D10325FFC5C08C01FC0192811C -:100D800080910201992309F460C096E4E0E9F2E061 -:100D9000DE01A95BBF4F01900D929A95E1F7F80132 -:100DA0009081E0910001F0910101E90FF11DEE0F3A -:100DB000FF1F27E430E02C0F3D1FE20FF31F60817F -:100DC0007181680F711D882777FD8095982F0E948B -:100DD000E02E20E030E040E451E40E94452E6B011B -:100DE0007C01F801218184E090E0821B9109BC0123 -:100DF000882777FD8095982F0E94E02E9B01AC01FB -:100E0000C701B6010E94DD2D9B01AC0160E070E0DE -:100E100080E090E40E94F72F20E030E04CE551E4C0 -:100E20000E94942F4FE050E0C457DF4F0FB6F89464 -:100E3000DEBF0FBECDBFDF91CF911F910F91FF900D -:100E4000EF90DF90CF900C94EF1196E4E0E9F2E0A0 -:100E5000DE01119601900D929A95E1F7F8019081CB -:100E6000E0910001F0910101E90FF11DEE0FFF1F6C -:100E700021E030E02C0F3D1FE20FF31F60817181F4 -:100E8000680F711D882777FD8095982F0E94E02EAE -:100E900020E030E040E451E40E94452E6B017C01EB -:100EA000F801218184E090E0821B9109BC01882730 -:100EB00077FD8095982F0E94E02E9B01AC01C70121 -:100EC000B6010E94DD2D9B01AC0160E070E080E086 -:100ED00090E40E94F72F20E030E04CE551E40E94BE -:100EE000942FC457DF4F0FB6F894DEBF0FBECDBFAF -:100EF000DF91CF911F910F91FF90EF90DF90CF90F6 -:100F00000C94370EC457DF4F0FB6F894DEBF0FBEF8 -:100F1000CDBFDF91CF911F910F91FF90EF90DF90A8 -:100F2000CF90089508950E9444056E9A769A0C9485 -:100F300078060C9492070C94A8060895880F991FC0 -:100F4000FC01EA5BFF4F859194910895880F991FEA -:100F5000FC01EA53FE4F8591949108950F931F93DE -:100F6000CF93DF93EC01811520E49207A0F5C11522 -:100F700080E3D80708F0E1C0C83ED105D8F4C03EF0 -:100F8000D10508F0EEC1C83AD10578F4C53AD105CB -:100F900008F074C0C130D10509F46DC008F4DEC199 -:100FA000C430D10508F0DDC1D9C1CB3BD10508F46F -:100FB00070C0D4C1C11590E2D90708F0B9C0C115FD -:100FC00021E0D20708F0CDC1C03FD10508F4C6C169 -:100FD0008E01106506C2C13080E5D80709F4BDC096 -:100FE00068F5C13120E4D20709F4AEC050F4C03135 -:100FF00090E4D90708F0A5C0CF70DD278E01146DED -:10100000F0C1C33120E4D20709F4A4C008F49FC0A2 -:10101000C115D04509F0A2C10E944B210E94040EC7 -:101020000E9490069FEF24E38CE091502040804086 -:10103000E1F700C000000E946828D3C1C11520E676 -:10104000D20730F4C11581E5D80708F48CC02DC152 -:10105000C11590E7D90708F481C1C11520E8D2076E -:1010600008F478C1C11580E9D80708F077C1DF70AE -:101070008E01106AB6C101E010E0B3C1C53AD105D6 -:1010800009F471C1C63AD10509F070C102E810E453 -:10109000A8C1C83AD10509F46CC1C93AD10509F40F -:1010A0006BC1CA3AD10509F46AC1CB3AD10509F43A -:1010B00069C1CC3AD10509F468C1CD3AD10509F42A -:1010C00067C1C03BD10509F466C1CE3AD10509F428 -:1010D00065C1CF3AD10509F464C1C13BD10509F41A -:1010E00063C1C23BD10509F462C1C33BD10509F418 -:1010F00061C1C43BD10509F460C1C53BD10509F408 -:101100005FC1C63BD10509F45EC1C73BD10509F4F7 -:101110005DC1C83BD10509F45CC1C93BD10509F4E7 -:101120005BC1CA3BD10509F45AC100E014E459C1BE -:10113000CE019F700E94A60755C1DD278E01106C5D -:1011400050C100E011ED4DC100E010ED4AC100E0DA -:1011500012ED47C100E013ED44C18091ED038160C1 -:101160008093ED033EC10E94C928811102C00E94F4 -:10117000A5280E94E12890E090931804809317041A -:10118000C23090E5D90721F480911704816086C0B0 -:10119000C43020E5D20721F48091170482607EC01C -:1011A000C63080E5D80721F480911704846076C0AA -:1011B000C83090E5D90719F48091170427C0CA30C8 -:1011C00020E5D20721F480911704806167C0CC30FC -:1011D00080E5D80721F48091170480625FC0CE308B -:1011E00090E5D90721F480911704806457C0C0317D -:1011F00020E5D20721F48091170480684FC0C231E6 -:1012000080E5D80729F4809117048460886046C07F -:10121000C33090E5D90721F4809117048E7F3EC03A -:10122000C53020E5D20721F4809117048D7F36C0A8 -:10123000C73080E5D80721F4809117048B7F2EC03A -:10124000C93090E5D90719F48091170426C0CB3036 -:1012500020E5D20721F4809117048F7E1FC0CD3086 -:1012600080E5D80721F4809117048F7D17C0CF3017 -:1012700090E5D90721F4809117048F7B0FC0C1310D -:1012800020E5D20721F4809117048F7707C0C3317E -:10129000D04531F4809117048B7F877F80931704AA -:1012A000809117040E94E5289CC08D2F99278F708C -:1012B000992781309105D9F49E012370332702C00C -:1012C000880F991F2A95E2F79C688E0144E0000F71 -:1012D000111F4A95E1F700271370802B912B53E0E3 -:1012E000CC0FDD1F5A95E1F7C076DD272FC0823085 -:1012F000910531F4DC2FCC278E01016F106A71C08B -:101300008330910569F4CE018370992701E010E0E4 -:1013100002C0000F111F8A95E2F7C8019C680FC038 -:10132000049709F05EC0CE018370992701E010E0B8 -:1013300002C0000F111F8A95E2F7C8019A6823E0E6 -:10134000CC0FDD1F2A95E1F7C07ED7708C010C2BE6 -:101350001D2B47C0DF708E01106243C000E010E01B -:1013600040C08E013EC001E810E43BC003E810E439 -:1013700038C002EE14E435C009EE14E432C00AEEBF -:1013800014E42FC005EB14E42CC006EB14E429C0D0 -:1013900007EB14E426C00CEC14E423C00DEC14E4B9 -:1013A00020C003E815E41DC00AE815E41AC002E9EC -:1013B00015E417C004E915E414C001E216E411C0F5 -:1013C00003E216E40EC004E216E40BC005E216E4E4 -:1013D00008C006E216E405C007E216E402C00AE20D -:1013E00016E4C801DF91CF911F910F9108959CE001 -:1013F000799FF001112490E3899FE00DF11D1124E4 -:10140000E60FF11DEE0FFF1FEA53FE4F85919491F9 -:10141000803E9105E0F4803C910558F581339105BB -:1014200009F46FC048F48932910509F463C08A3227 -:10143000910509F46DC072C089339105E9F08238D5 -:101440009105D1F08533910509F44DC067C0833E05 -:10145000910581F138F4803E9105B9F0823E910505 -:10146000D9F05CC0863E910561F1873E9105A1F1FE -:1014700055C00E949E0708952091170420FD02C0C8 -:1014800021FF4CC080EE90E049C08091170480FF9E -:10149000F9CF89E390E042C08091170482FF0EC02B -:1014A0008091170484FF03C080E090E037C083EE92 -:1014B00090E034C08091170482FFF2CF82EE90E07A -:1014C0002DC08091170483FF0BC08091170484FD09 -:1014D000EBCF87EE90E022C08091170483FFF5CF19 -:1014E00086EE90E01BC08091170485FF07C089E25B -:1014F00090E014C08091170485FFF9CF85E390E058 -:101500000DC08091170486FF07C08AE290E006C0F4 -:101510008091170486FFF9CF81E390E00E94AE0727 -:101520000895CF92DF92EF92FF920F931F9301E005 -:1015300010E020E030E06801790104C0CC0CDD1C33 -:10154000EE1CFF1C8A95D2F704C0000F111F221F4A -:10155000331F6A95D2F70C291D292E293F29C090E7 -:10156000D103D090D203E090D303F090D403C022F3 -:10157000D122E222F322842FC016D106E206F3061E -:1015800041F41F910F91FF90EF90DF90CF900C945A -:1015900084251F910F91FF90EF90DF90CF900C94D6 -:1015A000A52508950C94D10A5F926F927F928F9235 -:1015B0009F92AF92BF92CF92DF92EF92FF920F93E2 -:1015C0001F93CF93DF93CDB7DEB728970FB6F8946C -:1015D000DEBF0FBECDBFCE0101966C014E0199E07A -:1015E000890E911C20E030E040E050E060E070E0C7 -:1015F00000E010E0E12CF12C6C2C5D2C88E0782EC2 -:10160000AA24A394B12CE6EDF2E0A62DB52D872DEA -:1016100001900D928A95E1F7F601819191916F0108 -:10162000FC01E07FFF27E032F10559F48F70992724 -:10163000F50102C0EE0FFF1F8A95E2F7EE2AFF2A9E -:1016400037C0E033F10559F48F709927F50102C0D6 -:10165000EE0FFF1F8A95E2F70E2B1F2B29C0E034F7 -:10166000F10559F48F709927F50102C0EE0FFF1FA5 -:101670008A95E2F76E2B7F2B1BC0E035F10559F4FC -:101680008F709927F50102C0EE0FFF1F8A95E2F7D0 -:101690004E2B5F2B0DC0E036F10551F48F7099276A -:1016A000F50102C0EE0FFF1F8A95E2F72E2B3F2BAC -:1016B000C814D90409F0A7CF84B19E2D9095892331 -:1016C00084B985B1E82AE5B887B1902F9095892330 -:1016D00087B988B1082B08B98AB1962F90958923CC -:1016E0008AB98BB1682B6BB98DB1942F90958923F2 -:1016F0008DB98EB1482B4EB980B3922F9095892326 -:1017000080BB81B3282B21BB28960FB6F894DEBF8F -:101710000FBECDBFDF91CF911F910F91FF90EF9042 -:10172000DF90CF90BF90AF909F908F907F906F9001 -:101730005F9008955F926F927F928F929F92AF9287 -:10174000BF92CF92DF92EF92FF920F931F93CF93AE -:10175000DF93CDB7DEB768970FB6F894DEBF0FBE44 -:10176000CDBF85B7806885BF85B7806885BF0E947B -:10177000D40ACE0101966C014E0199E1890E911CAB -:1017800020E030E040E050E060E070E000E010E099 -:10179000E12CF12C6C2C5D2C88E1782EAA24A394EA -:1017A000B12CEEEDF2E0A62DB52D872D01900D9216 -:1017B0008A95E1F7F601819191916F01FC01E07F3B -:1017C000FF27E032F10559F48F709927F50102C027 -:1017D000EE0FFF1F8A95E2F7EE2AFF2A37C0E033AB -:1017E000F10559F48F709927F50102C0EE0FFF1F24 -:1017F0008A95E2F70E2B1F2B29C0E034F10559F42E -:101800008F709927F50102C0EE0FFF1F8A95E2F74E -:101810006E2B7F2B1BC0E035F10559F48F70992793 -:10182000F50102C0EE0FFF1F8A95E2F74E2B5F2BEA -:101830000DC0E036F10551F48F709927F50102C013 -:10184000EE0FFF1F8A95E2F72E2B3F2BC814D90409 -:1018500009F0A7CF84B19E2D9095892384B985B1D5 -:10186000E82AE5B887B1902F9095892387B988B188 -:10187000082B08B98AB1962F909589238AB98BB124 -:10188000682B6BB98DB1942F909589238DB98EB14A -:10189000482B4EB980B3922F9095892380BB81B39A -:1018A000282B21BB10921D0310921C0310921503CC -:1018B0001092140310921F0310921E03109217032C -:1018C0001092160310922103109220031092190314 -:1018D00010921803109223031092220310921B03FC -:1018E00010921A0368960FB6F894DEBF0FBECDBFF4 -:1018F000DF91CF911F910F91FF90EF90DF90CF90EC -:10190000BF90AF909F908F907F906F905F900C945E -:1019100093077F928F929F92AF92BF92CF92DF9266 -:10192000EF92FF920F931F93CF93DF93CDB7DEB764 -:10193000A0970FB6F894DEBF0FBECDBF6E0149E190 -:10194000C40ED11C84E1E82E83E0F82E98E0792EB5 -:10195000BC2CAD2C01E010E028E1822E35E0932E66 -:10196000E6EDF2E0AB2DBA2D872D01900D928A9510 -:10197000E1F7F601819191916F019C01207F33275E -:101980002032310591F424B18F709927A80102C04B -:10199000440F551F8A95E2F7CA01922F982B94B9EC -:1019A00095B18095892385B953C02033310591F4D1 -:1019B00027B18F709927F80102C0EE0FFF1F8A959B -:1019C000E2F7CF01922F982B97B998B18095892390 -:1019D00088B93EC02034310591F42AB18F7099271F -:1019E000A80102C0440F551F8A95E2F7CA01922F41 -:1019F000982B9AB99BB1809589238BB929C0203542 -:101A0000310591F42DB18F709927F80102C0EE0FC6 -:101A1000FF1F8A95E2F7CF01922F982B9DB99EB1B7 -:101A2000809589238EB914C02036310589F420B3FE -:101A30008F709927A80102C0440F551F8A95E2F7BD -:101A4000CA01922F982B90BB91B38095892381BBBB -:101A500050EA5A95F1F7BE016F5F7F4F20E030E00A -:101A600040E050E0EEEDF2E0DE011196882D0190AD -:101A70000D928A95E1F7FB0181919191BF01FC01E3 -:101A8000E07FFF27E032F10511F4E3B113C0E0334A -:101A9000F10511F4E6B10EC0E034F10511F4E9B13D -:101AA00009C0E035F10511F4ECB104C0E036F105F0 -:101AB000B9F4EFB1F0E08F70992702C0F595E79582 -:101AC0008A95E2F7E0FD08C0C801042E02C0880F25 -:101AD000991F0A94E2F702C080E090E0282B392B8E -:101AE0004F5F5F4F4C30510509F0BCCFF70180814B -:101AF00091818217930721F03183208390927302A2 -:101B00000E94D40AF2E0EF0EF11C4CE1E41643E02F -:101B1000F40609F025CF80917302882361F181508A -:101B200080937302882339F08FE99FE00197F1F7E2 -:101B300000C0000020C08091140390911503909381 -:101B40001D0380931C0380911603909117039093BB -:101B50001F0380931E0380911803909119039093A3 -:101B600021038093200380911A0390911B0390938B -:101B70002303809322030E94990781E0A0960FB669 -:101B8000F894DEBF0FBECDBFDF91CF911F910F91B3 -:101B9000FF90EF90DF90CF90BF90AF909F908F908D -:101BA0007F900895E82FF0E0EE0FFF1FE45EFC4FFA -:101BB00080819181089508958091020481608093CD -:101BC00002040C94F728809102048E7F8093020413 -:101BD0000C94F7280E94C928811102C00E94A528F0 -:101BE0000E94F328809302043E9A809171008D7FB9 -:101BF0008093710082E0809390008AE1809391004D -:101C000081E080932603089580912603811102C00C -:101C10000E94EA0D10927603109275038091710074 -:101C20008D7F80937100809190008F7780939000DA -:101C3000109238031092370310926F0310927003C2 -:101C4000109271031092720310926E0310926D0342 -:101C5000EDE4F3E0ADE3B3E0119211921192119231 -:101C60001D921D9283E0ED36F807B1F70895CF92EB -:101C7000DF92EF92FF920F931F93CF93DF93209108 -:101C80003703222309F484C06B017C018091260371 -:101C9000811102C00E94EA0D0DE613E0C7E0D0E01A -:101CA000A7019601F80192918291729162918F0140 -:101CB0000E94412E811131C0FE01EE0FFF1FEE0F79 -:101CC000FF1FE35BFC4F1082118212821382DE0140 -:101CD000AA0FBB1FA35CBC4F11961C921E92C7306B -:101CE000D105E9F021964481558166817781408351 -:101CF000518362837383148215821682178212962F -:101D00008D919C91139711969C938E9313961C9290 -:101D10001E92129734961296E2CF219708F6809180 -:101D2000750390917603019797FD05C09093760314 -:101D30008093750304C0109276031092750380910E -:101D400075039091760320917303309174032817E3 -:101D5000390724F01092740310927303892BC1F495 -:101D6000809171008D7F80937100809190008F77BA -:101D70008093900010926F03109270031092710381 -:101D80001092720310926E0310926D03109237033B -:101D9000DF91CF911F910F91FF90EF90DF90CF9047 -:101DA00008951F920F920FB60F9211244F925F92D7 -:101DB0006F927F928F929F92AF92BF92CF92DF925B -:101DC000EF92FF922F933F934F935F936F937F9385 -:101DD0008F939F93AF93BF93CF93DF93EF93FF9333 -:101DE00080913703882309F49BC1C0917503D0917A -:101DF00076031C161D060CF093C1409027035090EB -:101E000028036090290370902A0320E030E0A901A4 -:101E1000C301B2010E94902F18160CF065C0C130AA -:101E2000D10509F452C08091730390917403BE01EF -:101E30000E9470317C0190937403809373038090AF -:101E4000390390903A03A0903B03B0903C0320E00C -:101E500030E040E85FE3C501B4010E94DD2D6093EE -:101E6000390370933A0380933B0390933C03F7014B -:101E7000EE0FFF1FEE0FFF1FE35BFC4FA30192016C -:101E800060817181828193810E94452E20E030E043 -:101E900040E05EE30E94942F9B01AC01C501B401B8 -:101EA0000E94902F18168CF4C7010196BE010E9463 -:101EB00070319093740380937303109239031092DE -:101EC0003A0310923B0310923C03E0917303F091AC -:101ED0007403EE0FFF1FEE0FFF1FE35BFC4F6081EB -:101EE000718182819381D0C0C0906F03D0907003C4 -:101EF000E0907103F090720320E030E0A901C70187 -:101F0000B6010E94412E2197882309F4A2C0FE0148 -:101F1000EE0FFF1FEE0FFF1FE35BFC4F80809180F1 -:101F2000A280B380A5019401C701B6010E94412E91 -:101F300087FF31C0A501940160E070E08CED93EC67 -:101F40000E94452E20E030E040E451E40E94452EFE -:101F500020E030E040E05FE30E94942F9B01AC0161 -:101F600060E070E080E090E40E94F72F9B01AC01FC -:101F7000C501B4010E94942F9B01AC01C701B601B9 -:101F80000E94412E87FF07C0A701960160E070E024 -:101F90008CED93E439C0A5019401C701B6010E94FC -:101FA000902F18160CF055C0A501940160E070E068 -:101FB0008CED93E40E94452E20E030E040E451E4B3 -:101FC0000E94452E20E030E040E05FE30E94942F25 -:101FD0009B01AC0160E070E080E090E40E94F72F8C -:101FE0009B01AC01C501B4010E94942F9B01AC017F -:101FF000C701B6010E94902F18165CF5A701960143 -:1020000060E070E08CED93EC0E94452E20E030E023 -:1020100040E451E40E94452E20E030E040E05FE3E0 -:102020000E94942F9B01AC0160E070E080E090E49E -:102030000E94F72F9B01AC01C701B6010E94942FAB -:1020400060936F0370937003809371039093720396 -:1020500013C0FE01EE0FFF1FEE0FFF1FE35BFC4FEF -:1020600080819181A281B38180936F0390937003EB -:10207000A0937103B093720360916F03709170032A -:102080008091710390917203209124033091250374 -:102090002F3F4FEF340731F02F5F3F4F3093250331 -:1020A000209324030E94F8126B017C0120E034E2AB -:1020B00044EF51E40E94412E87FF08C086EFC82EEE -:1020C00088E2D82E84EFE82E81E4F82E20E030E07C -:1020D00040E051E4C701B6010E94942F9B01AC017E -:1020E00060E074E284E79BE40E94452E6B017C0172 -:1020F0000E94AD2E70939700609396002091740219 -:10210000309175024091760250917702C701B60175 -:102110000E94942F0E94AD2E7093990060939800B6 -:1021200080913803882309F433C1C0903303D090E1 -:102130003403E0903503F090360320E030E0A9014D -:10214000C701B6010E94902F1816D4F58091240380 -:10215000909125038F3F2FEF920729F001969093DE -:10216000250380932403C701B6010E94F81220E0E2 -:1021700030E040E051E40E94942F9B01AC0160E00C -:1021800074E284E79BE40E94452E6B017C010E946F -:10219000AD2E709397006093960020917402309159 -:1021A00075024091760250917702C701B6010E94F4 -:1021B000942F0E94AD2E709399006093980008C0F0 -:1021C0001092970010929600109299001092980029 -:1021D00060912D0370912E036F5F7F4F70932E03DC -:1021E00060932D03209196003091970080E090E05D -:1021F000232BF1F0C0919600D09197000E94DE2E23 -:102200006B017C01BE0180E090E00E94DE2E9B010C -:10221000AC0160912F037091300380913103909154 -:1022200032030E94452E20E03FEF4FE757E410C0F5 -:102230000E94DE2E6B017C0120E030EE4FEF54E473 -:1022400060912F037091300380913103909132039C -:102250000E94942F9B01AC01C701B6010E94902FF0 -:1022600087FD96C080912B038F5F80932B0390E0B6 -:102270002091FE033091FF0382179307A0F0809115 -:102280000904882319F010922B030DC0809171006E -:102290008D7F80937100809190008F778093900064 -:1022A000109238037DC080912C03C0912B038111C3 -:1022B00028C0C0900304D0900404E0900504F0907E -:1022C000060420E030E0A901C701B6010E94902F6A -:1022D0001816BCF481E080932C0310923303109203 -:1022E00034031092350310923603C0922F03D0921C -:1022F0003003E0923103F0923203C150C0932B03BC -:1023000043C010922C031092250310922403E091F5 -:102310000004F091010448E0C49FE00DF11D112478 -:1023200080819181A281B3818093330390933403A0 -:10233000A0933503B093360320E030E040E85EE33D -:1023400064817581868197810E94942F6B017C0145 -:1023500020E030E048EC52E460917802709179021C -:1023600080917A0290917B020E94452E9B01AC01E4 -:10237000C701B6010E94942F60932F03709330031E -:10238000809331039093320310922E0310922D0309 -:102390008091020480FD04C010923803109237032C -:1023A000FF91EF91DF91CF91BF91AF919F918F916D -:1023B0007F916F915F914F913F912F91FF90EF909F -:1023C000DF90CF90BF90AF909F908F907F906F9055 -:1023D0005F904F900F900FBE0F901F901895CF9267 -:1023E000DF92EF92FF92CF93DF936B017C01EA01C2 -:1023F00080912603811102C00E94EA0D809102049F -:1024000080FF46C0809175039091760308970CF089 -:102410003FC0809171008D7F80937100809138035F -:1024200081110E94040E81E08093370310922503EE -:102430001092240320E030E0A901C701B6010E94F8 -:10244000902F1816DCF48091750390917603FC01AF -:10245000EE0FFF1FEE0FFF1FE35BFC4FC082D18228 -:10246000E282F382FC01EE0FFF1FE35CFC4FD1839D -:10247000C0830196909376038093750380917100D9 -:1024800082608093710080919000806880939000BA -:10249000DF91CF91FF90EF90DF90CF9008958F92D2 -:1024A0009F92AF92BF92CF92DF92EF92FF920F93E3 -:1024B0001F93CF93DF93EC017B01D42E4801590188 -:1024C00080912603811102C00E94EA0D80910204CE -:1024D00080FF6BC0809171008D7F8093710080912F -:1024E000370381110E94040E81E080933803D0935A -:1024F0000104C0930004F092FF03E092FE03D09227 -:1025000009048092030490920404A0920504B092FE -:1025100006041092390310923A0310923B03109272 -:102520003C0310922B0388819981AA81BB818093FF -:10253000330390933403A0933503B093360320E024 -:1025400030E040E85EE36C817D818E819F810E9456 -:10255000942F6B017C0120E030E048EC52E4609164 -:1025600078027091790280917A0290917B020E94A8 -:10257000452E9B01AC01C701B6010E94942F6093C8 -:102580002F037093300380933103909332031092A2 -:102590002E0310922D038091710082608093710050 -:1025A00080919000806880939000DF91CF911F917F -:1025B0000F91FF90EF90DF90CF90BF90AF909F90E2 -:1025C0008F9008958091770390E0019665E070E028 -:1025D0000E9470318093770308958091770390E093 -:1025E000019765E070E00E94703180937703089551 -:1025F0008F929F92AF92BF92CF92DF92EF92FF9213 -:10260000CF93DF936B017C01C0912403D09125030C -:10261000BE0180E090E00E94DE2E4B015C01A7012C -:10262000960160E070E08CE594E40E94452E9B01E9 -:10263000AC01C501B4010E94942F0E94B22E4091BA -:102640007703423009F45CC028F4442351F0413050 -:10265000E9F0FBC0433009F481C0443009F4B4C050 -:10266000F4C080E090E0A0E0BFE380937402909318 -:102670007502A0937602B09377021092270310920E -:1026800028031092290310922A03DFC01092270317 -:10269000109228031092290310922A0364317105C5 -:1026A00040F46A307105E0F520E030E040E85EE398 -:1026B0003BC0693C710508F0C0C080E090E00E941A -:1026C000DE2E20E030E040EA51E40E94DC2D20E0E4 -:1026D00030E044E353E40E94452E9B01AC010E948C -:1026E000942F20E030E040E05EE30E94942F9B01B5 -:1026F000AC0160E070E080E09EE30E94DC2D5BC0F6 -:1027000010922703109228031092290310922A0393 -:102710006432710578F4FB01EC59FF4F0C9484315D -:1027200020E030E040E05FE3C701B6010E94942F53 -:102730006B017C0180E090E0A0E0BEE38093740236 -:1027400090937502A0937602B09377027EC0A701A2 -:102750009601C701B6010E94DD2DEACF1092270332 -:10276000109228031092290310922A032AE0269F30 -:10277000A001279F500D1124CA0168EB7BE00E9445 -:102780005C31BC016C5D754077FF03C0719561954C -:102790007109882777FD8095982F0E94E02E2EE3FF -:1027A00033EC4EE259E30E94942F20E030E040ECFD -:1027B0005EE30E94DD2D6093740270937502809336 -:1027C00076029093770241C010922703109228035B -:1027D0001092290310922A03CE0183709927892B26 -:1027E000E1F0BE016170772780E090E00E94DE2E6C -:1027F00020E030E040E05EE30E94942F20E030E0F3 -:1028000040E45FE30E94DD2D6093740270937502D3 -:1028100080937602909377020CC080E090E0A0E075 -:10282000BFE38093740290937502A0937602B093F5 -:102830007702C770DD27CD2B41F4109274021092FD -:1028400075021092760210927702C701B601DF91ED -:10285000CF91FF90EF90DF90CF90BF90AF909F907F -:102860008F900895809188030895CF93DF9300D0CF -:102870001F92CDB7DEB79C0180910E04843019F50C -:1028800093E099833B832A839093E9008FEF9091A3 -:10289000E800815095FD06C095ED9A95F1F700008E -:1028A0008111F5CF8091E80085FF0DC040E050E038 -:1028B00063E070E0CE0101960E9496168091E800D8 -:1028C0008E778093E8000F900F900F90DF91CF915B -:1028D0000895CF93DF9300D01F92CDB7DEB720913C -:1028E0000E04243021F522E029839B838A8383E030 -:1028F0008093E9008FEF9091E800815095FD06C02C -:1029000095ED9A95F1F700008111F5CF8091E800DF -:1029100085FF0DC040E050E063E070E0CE0101961D -:102920000E9496168091E8008E778093E8000F90C1 -:102930000F900F90DF91CF91089520910E042430D5 -:10294000F1F422E02093E9002FEF3091E8002150CC -:1029500035FD06C035ED3A95F1F700002111F5CFB0 -:102960002091E80025FF0BC040E050E065E070E0FA -:102970000E9496168091E8008E778093E800089573 -:10298000CF93DF93EC0190910E04943009F046C090 -:10299000809186028823D9F0809187028823B9F03C -:1029A0009093E9008FEF9091E800815095FD06C06B -:1029B00095E19A95F1F700008111F5CF8091E8003B -:1029C00085FF2CC040E050E060E170E017C081E07E -:1029D0008093E9008FEF9091E800815095FD06C04B -:1029E00095ED9A95F1F700008111F5CF8091E800FF -:1029F00085FF14C040E050E068E070E0CE010E9426 -:102A000096168091E8008E778093E80080E1FE01C1 -:102A1000A8E7B3E001900D928A95E1F7DF91CF919D -:102A2000089580910D04811109C00E942B180E9405 -:102A300088188091E20084608093E20008951092EB -:102A40000D040895089508950C94D02742E061EC98 -:102A500081E00E94A51742E061EC82E00E94A51788 -:102A600042E061EC83E00E94A51742E161EC84E062 -:102A70000C94A51780911004833009F455C030F4EC -:102A8000813071F0823009F48EC008958A3009F4E3 -:102A90007AC08B3009F460C0893009F09CC020C036 -:102AA00080910F04813A09F096C08091E800877FF9 -:102AB0008093E8008091130490911404892B21F4F1 -:102AC00060E188E793E003C060E080E090E070E0C0 -:102AD0000E94E1168091E8008B778093E8000895CA -:102AE00080910F04813209F076C080911304909197 -:102AF0001404009719F0039709F06DC08091E80065 -:102B0000877F8093E8008091E80082FD05C0809176 -:102B10000E048111F8CF5FC08091F100809388038B -:102B20008091E8008B7753C080910F04813A09F0BF -:102B300052C08091130490911404892B09F04BC06A -:102B40008091E800877F8093E8008091E80080FF13 -:102B5000FCCF8091860236C080910F048132D9F576 -:102B60008091130490911404892BA9F58091E800B9 -:102B7000877F8093E8000E94DA1780911104809388 -:102B800086020C944B2180910F04813221F58091B3 -:102B9000E800877F8093E8000E94DA178091120492 -:102BA00080938903089580910F04813AA1F4809164 -:102BB000E800877F8093E8008091E80080FFFCCFE9 -:102BC000809189038093F1008091E8008E77809353 -:102BD000E8000C94DA17089584B7877F84BF88E1F2 -:102BE0000FB6F89480936000109260000FBE90E0E2 -:102BF00080E80FB6F89480936100909361000FBE57 -:102C00000E947D1B0E942B180E9488188091E20070 -:102C100084608093E20078940E940E1B0E947F1BC8 -:102C20008CE792E00E94291B80910E04853069F4A4 -:102C30000E948A2780910C048823B1F30E94B82750 -:102C4000882391F30E948016EFCF0E94871BECCF60 -:102C5000292F332723303105C9F064F421303105A1 -:102C600081F02230310509F043C08DE690E022E882 -:102C700038E042C021323105F1F02232310541F114 -:102C800037C082E190E02FEE38E036C099278130DE -:102C9000910541F08230910541F0892B49F5EEE72D -:102CA000F8E005C0E0E5F8E002C0E6E2F8E0849173 -:102CB00090E09F0121C06430D8F4E62FF0E0EE0FE1 -:102CC000FF1FEE5FFC4F2081318189E090E014C04E -:102CD000643070F470E0FB01EE0FFF1FE650FD4F13 -:102CE00020813181FB01EA50FD4F808190E004C0DA -:102CF00080E090E020E030E0FA0131832083089505 -:102D000080E189BD82E189BD09B400FEFDCF8091DB -:102D1000D8008F7D8093D8008091E00082608093FE -:102D2000E0008091E00081FDFCCF0895CF92DF921A -:102D3000EF92FF920F931F93CF93DF93EC018B01E0 -:102D40006A010E94F917811133C0C114D10439F00E -:102D5000F60180819181081B190BC80FD91FE12C46 -:102D6000F12C0115110519F18091E80085FD16C0BF -:102D70008091E8008E778093E800C114D10449F077 -:102D8000F60180819181E80EF91EF182E08285E0F2 -:102D90000FC00E94F917882321F30AC089918093FC -:102DA000F10001501109FFEFEF1AFF0ADACF80E0BE -:102DB000DF91CF911F910F91FF90EF90DF90CF9017 -:102DC000089520911504309116042617370748F00E -:102DD0006115710539F42091E8002E772093E80001 -:102DE00001C0B90140E061157105A9F120910E04FF -:102DF000222309F443C0253009F442C02091E800A1 -:102E000023FD40C02091E80022FD32C02091E8005F -:102E100020FFE9CF4091F3002091F20030E0342B05 -:102E2000FC01CF016115710559F02830310540F4DE -:102E300081918093F100615071092F5F3F4FF1CF75 -:102E400041E02830310509F040E02091E8002E777C -:102E50002093E800C8CF4111C9CF0AC080910E0469 -:102E6000882361F0853061F08091E80083FD0AC01D -:102E70008091E80082FFF2CF80E0089582E008951B -:102E800083E0089581E0089520911504309116049F -:102E90002617370748F06115710539F42091E800CD -:102EA0002E772093E80001C0B901FC0120E06115F4 -:102EB000710591F180910E04882309F440C085309A -:102EC00009F43FC08091E80083FD3DC08091E80097 -:102ED00082FD2FC08091E80080FFE9CF2091F300B0 -:102EE0008091F20090E0922B6115710559F08830C5 -:102EF000910540F424912093F100319661507109BD -:102F00000196F2CF21E0089709F020E08091E800D7 -:102F10008E778093E800CBCF2111CCCF0AC080916F -:102F20000E04882361F0853061F08091E80083FD14 -:102F30000AC08091E80082FFF2CF80E0089582E02D -:102F4000089583E0089581E00895982F973058F50B -:102F50009093E900981739F07091EC002091ED0002 -:102F60005091F00003C0242F762F50E021FF19C0AC -:102F70003091EB003E7F3093EB003091ED003D7FD0 -:102F80003093ED003091EB0031603093EB007093A3 -:102F9000EC002093ED005093F0002091EE0027FF0D -:102FA00007C09F5FD3CF8F708093E90081E00895C1 -:102FB00080E0089580910F0487FF11C08091E800A0 -:102FC00082FD05C080910E048111F8CF11C080915F -:102FD000E8008B770BC080910E04882349F0809124 -:102FE000E80080FFF8CF8091E8008E778093E800BA -:102FF00008952091E4003091E50095E64091EC00C1 -:10300000842F817040FF22C08091E80080FD1CC0A9 -:1030100080910E04882391F0853091F08091EB002F -:1030200085FD10C04091E4005091E5004217530720 -:1030300029F39A01915011F784E0089582E00895F0 -:1030400083E0089581E0089580E008954091E800CC -:1030500042FFDECF08950E9499180E94A118E0EE69 -:10306000F0E0808181608083E8EDF0E080818F77FF -:10307000808319BCA7EDB0E08C918E7F8C9380810A -:103080008F7E808310920D0408950F931F93CF932A -:10309000DF930E9499180E94A118C8EDD0E08881A2 -:1030A0008F77888388818068888388818F7D8883F3 -:1030B00019BC10920E0410920A0410920C04109283 -:1030C0000B0400EE10E0F80180818B7F8083888103 -:1030D0008160888342E060E080E00E94A517E1EE15 -:1030E000F0E080818E7F8083E2EEF0E0808181607D -:1030F0008083808188608083F80180818E7F8083D7 -:10310000888180618883DF91CF911F910F9108950D -:10311000E8EDF0E080818F7E8083E7EDF0E0808154 -:103120008160808384E082BF81E080930D040C94F1 -:103130004518E8EDF0E080818E7F80831092E200F8 -:1031400008951092DA001092E10008951F920F92F4 -:103150000FB60F9211242F933F934F935F936F936A -:103160007F938F939F93AF93BF93EF93FF93809140 -:10317000E10082FF0BC08091E20082FF07C08091D6 -:10318000E1008B7F8093E1000E940D1B8091DA00AB -:1031900080FF1FC08091D80080FF1BC08091DA00A3 -:1031A0008E7F8093DA008091D90080FF0DC080E18E -:1031B00089BD82E189BD09B400FEFDCF81E0809325 -:1031C0000E040E94111505C019BC10920E040E9435 -:1031D0001F158091E10080FF19C08091E20080FFFF -:1031E00015C08091E2008E7F8093E2008091E20022 -:1031F00080618093E2008091D80080628093D80043 -:1032000019BC85E080930E040E9423158091E10093 -:1032100084FF30C08091E20084FF2CC080E189BD32 -:1032200082E189BD09B400FEFDCF8091D8008F7D79 -:103230008093D8008091E1008F7E8093E10080919F -:10324000E2008F7E8093E2008091E20081608093B3 -:10325000E20080910A04882311F084E007C0809185 -:10326000E30087FD02C081E001C083E080930E048B -:103270000E9424158091E10083FF29C08091E20023 -:1032800083FF25C08091E100877F8093E10082E089 -:1032900080930E0410920A048091E1008E7F809347 -:1032A000E1008091E2008E7F8093E2008091E20055 -:1032B00080618093E20042E060E080E00E94A51718 -:1032C0008091F00088608093F0000E942215FF91A9 -:1032D000EF91BF91AF919F918F917F916F915F918E -:1032E0004F913F912F910F900FBE0F901F90189507 -:1032F0001F920F920FB60F9211242F933F934F936B -:103300005F936F937F938F939F93AF93BF93CF936D -:10331000DF93EF93FF93C091E900CF708091EC00B1 -:10332000D82FD17080FDD0E81092E9008091F00094 -:10333000877F8093F00078940E94BC191092E90076 -:103340008091F00088608093F000CD2BCF70C09307 -:10335000E900FF91EF91DF91CF91BF91AF919F91E4 -:103360008F917F916F915F914F913F912F910F902E -:103370000FBE0F901F9018951F93CF93DF93CDB77B -:10338000DEB7AA970FB6F894DEBF0FBECDBFEFE051 -:10339000F4E088E08E0F9091F10091938E13FBCFB3 -:1033A0000E943A158091E80083FF1FC180910F04AD -:1033B00090911004492F50E04A30510508F015C192 -:1033C000FA01E857FF4F0C948431803881F082383D -:1033D00009F00BC1809113048F708093E9008091F4 -:1033E000EB0085FB882780F91092E90006C08091E8 -:1033F0000B0490910C04911182609091E800977FEA -:103400009093E8008093F1001092F100C8C0282F3B -:103410002D7F09F0EAC0882319F0823061F0E5C001 -:1034200080911104813009F0E0C0933009F080E010 -:1034300080930C042BC080911104811127C08091CE -:1034400013048F7009F4D1C08093E9002091EB0040 -:1034500020FF1CC0933021F48091EB00806214C0E7 -:103460009091EB0090619093EB0021E030E0A90196 -:1034700002C0440F551F8A95E2F74093EA0010926C -:10348000EA008091EB0088608093EB001092E900E5 -:103490008091E800877F86C08111A7C01091110438 -:1034A0001F778091E3008078812B8093E3008091E7 -:1034B000E800877F8093E8000E94DA178091E80097 -:1034C00080FFFCCF8091E30080688093E3001111BE -:1034D00002C082E001C083E080930E0486C0805861 -:1034E000823008F082C080911104909112048C3DCA -:1034F00053E0950779F583E08A838AE289834FB7A1 -:10350000F894DE01139620E03EE051E2E32FF0E074 -:1035100050935700E49120FF03C0E295EF703F5FA6 -:10352000EF708E2F90E0EA3010F0C79601C0C09681 -:103530008D939D932F5F243149F74FBF8091E80011 -:10354000877F8093E8006AE270E0CE0101960E94D6 -:10355000E11614C0AE014F5F5F4F609113040E94EB -:103560002816BC01009709F440C09091E800977FAD -:103570009093E80089819A810E9444178091E80025 -:103580008B778093E80031C0803879F58091E8002E -:10359000877F8093E80080910A048093F1008091F6 -:1035A000E8008E778093E8000E94DA171EC0811130 -:1035B0001CC0909111049230C0F48091E800877F84 -:1035C0008093E80090930A040E94DA1780910A041D -:1035D000811106C08091E30087FD02C081E001C037 -:1035E00084E080930E040E9426158091E80083FFFA -:1035F0000AC08091E800877F8093E8008091EB000B -:1036000080628093EB00AA960FB6F894DEBF0FBEDF -:10361000CDBFDF91CF911F9108950895CF938091F1 -:103620000E048823A1F0C091E900CF709091EC00C6 -:10363000892F817090FD80E8C82B1092E90080915D -:10364000E80083FD0E94BC19CF70C093E900CF91C0 -:10365000089590938F0380938E030895E0918E03D5 -:10366000F0918F03309721F00190F081E02D0994C3 -:1036700080E00895E0918E03F0918F03309721F060 -:103680000280F381E02D09940895E0918E03F0917A -:103690008F03309721F00480F581E02D099408957F -:1036A00020918C0330918D038217930771F09093D2 -:1036B0008D0380938C03E0918E03F0918F033097FC -:1036C00021F00680F781E02D0994089520918A0366 -:1036D00030918B038217930771F090938B03809343 -:1036E0008A03E0918E03F0918F03309721F00084DC -:1036F000F185E02D0994089508950C947C1B0E9497 -:1037000004280E949A0B0E948A280C94452D4F92FF -:103710005F927F928F929F92AF92BF92CF92DF92F1 -:10372000EF92FF920F931F93CF93DF93CDB7DEB746 -:103730002A970FB6F894DEBF0FBECDBF0E94890C4A -:1037400091E9C92E93E0D92E00E010E0AA24A394B9 -:10375000B12C702E802F0E94D20D4C01F6014190A9 -:1037600051906F014826592641145104B1F40F5F5E -:103770001F4F0430110569F78FEF89838A831B82FD -:103780000E940D288160782F9D838C8349815A8106 -:103790006B818D810E94401C3AC08091ED0381FDB8 -:1037A0000E94DB0D20E030E07501022E02C0EE0C1D -:1037B000FF1C0A94E2F7C70184219521892B09F1A6 -:1037C0002E837F828E209F2091E0892809F490E04B -:1037D00098870E940D288160782F9A8789874E816B -:1037E0005F8168858A850E94401C000F111FF801C7 -:1037F000EF56FC4F80819181E826F926F182E08224 -:1038000006C02F5F3F4F2C30310571F6B0CF0E94BC -:10381000762A109190030E942E1B1817D9F00E944F -:103820002E1B809390032A960FB6F894DEBF0FBE2E -:10383000CDBFDF91CF911F910F91FF90EF90DF905F -:10384000CF90BF90AF909F908F907F905F904F9060 -:103850000C94D20A2A960FB6F894DEBF0FBECDBFE5 -:10386000DF91CF911F910F91FF90EF90DF90CF905C -:10387000BF90AF909F908F907F905F904F900895F2 -:10388000CF93DF93CDB7DEB72B970FB6F894DEBF9B -:103890000FBECDBF4F83588769877A878B87DE013C -:1038A000119686E0FD0111928A95E9F785E0FE0107 -:1038B000379601900D928A95E1F749815A816B8183 -:1038C0007C818D819E810E94E5232B960FB6F89412 -:1038D000DEBF0FBECDBFDF91CF910895CF93882378 -:1038E00009F4C2C0C82F823859F40E942E1B81FDF2 -:1038F000BBC089E30E948E260E945B2789E30CC02F -:10390000833879F40E942E1B80FDAEC083E50E94AF -:103910008E260E945B2783E50E94D026CF910C94CF -:103920005B27843859F40E942E1B82FD9DC087E4DA -:103930000E948E260E945B2787E4EECF8CEF8C0FCF -:10394000813A48F48C2F0E94AD2C81118DC08C2FB0 -:103950000E948E26E3CF80E28C0F883048F4C77037 -:1039600081E001C0880FCA95EAF70E941427D6CFDC -:103970008BE58C0F833078F4C53A29F0C63A31F0E4 -:1039800083E890E005C081E890E002C082E890E022 -:10399000CF910C94501B88E58C0F833108F064C0E4 -:1039A000C83A39F1C93A41F1CA3A49F1CB3A51F131 -:1039B000CC3A59F1CD3A61F1C03B69F1CE3A71F19F -:1039C000CF3A79F1C13B81F1C23B89F1C33B91F11F -:1039D000C43B99F1C53BA1F1C63BA9F1C73BB1F18D -:1039E000C83BB9F1C93BC1F1CA3BC9F180E090E0E5 -:1039F00038C082EE90E035C089EE90E032C08AEEA9 -:103A000090E02FC085EB90E02CC086EB90E029C0C1 -:103A100087EB90E026C08CEC90E023C08DEC90E02A -:103A200020C083E891E01DC08AE891E01AC082E9D5 -:103A300091E017C084E991E014C081E292E011C0E6 -:103A400083E292E00EC084E292E00BC085E292E055 -:103A500008C086E292E005C087E292E002C08AE2F6 -:103A600092E0CF910C94661BCF910895882309F4BE -:103A70004BC0823859F40E942E1B81FF45C089E358 -:103A80000E948E260E945B2789E30CC0833871F464 -:103A90000E942E1B80FF38C083E50E948E260E9464 -:103AA0005B2783E50E94D0260C945B27843859F469 -:103AB0000E942E1B82FF28C087E40E948E260E944F -:103AC0005B2787E4EFCF9CEF980F913A58F390E291 -:103AD000980F983050F4877091E001C0990F8A9543 -:103AE000EAF7892F0E941A27DFCF9BE5980F9330C2 -:103AF00020F480E090E00C94501B885A833120F42D -:103B000080E090E00C94661B0895882321F00E94C9 -:103B100014270C945B270895882321F00E941A270C -:103B20000C945B270895BF92CF92DF92EF92FF92A1 -:103B30000F931F93CF93DF9300D000D000D0CDB769 -:103B4000DEB725E0FC01DE01119601900D922A9569 -:103B5000E1F7FC01D08011810281258122952F702F -:103B600043815481452B09F472C31F3F21F4FFEFB9 -:103B7000DF1609F46CC37C012E830E949B07D98257 -:103B80001A8369817A81802F0E948A26182FB92E84 -:103B90000E943F260E9406252E81002319F00E94D4 -:103BA00031272E81EB2DE295EF70F0E0EE56FF4FBE -:103BB0000C9484318B2D807F9B2D9F70F92E882350 -:103BC00019F0F29480EFF822002389F0FF2009F425 -:103BD0007CC280E2810F883020F48F2D0E94142750 -:103BE00003C08F2D0E9424270E945B276EC2812F65 -:103BF0000E94361DFF2009F42AC3105E8F2D183055 -:103C000018F40E941A2702C00E942A2726960FB68F -:103C1000F894DEBF0FBECDBFDF91CF911F910F9102 -:103C2000FF90EF90DF90CF90BF900C945B278B2D8F -:103C3000807F9B2D9F70803211F4892F03C0892FC4 -:103C40008295807F112319F0113011F12BC00023D0 -:103C5000A9F0222389F1213079F526960FB6F89440 -:103C6000DEBF0FBECDBFDF91CF911F910F91FF90AF -:103C7000EF90DF90CF90BF900C944427222319F04F -:103C8000213009F4E4C28E830E9447278E819BC1B4 -:103C9000002321F0263008F0DAC20EC0253008F0EB -:103CA000D6C291C10023C9F0222331F0F7019581DA -:103CB00090FF0BC29F70958326960FB6F894DEBFD7 -:103CC0000FBECDBFDF91CF911F910F91FF90EF906D -:103CD000DF90CF90BF900C94851D222309F473C10F -:103CE00009C22B2D26952695237030E0211531052C -:103CF00021F021303105D1F0AAC2002321F0812F1B -:103D00009B2D937002C080E090E026960FB6F89449 -:103D1000DEBF0FBECDBFDF91CF911F910F91FF90FE -:103D2000EF90DF90CF90BF900C94501B002321F0B8 -:103D3000812F9B2D937002C080E090E026960FB6F5 -:103D4000F894DEBF0FBECDBFDF91CF911F910F91D1 -:103D5000FF90EF90DF90CF90BF900C94661B812F67 -:103D6000002319F00E947E2902C00E94E6292696AF -:103D70000FB6F894DEBF0FBECDBFDF91CF911F917C -:103D80000F91FF90EF90DF90CF90BF900C946B2A33 -:103D90008B2D837009F07BC0011159C2812F829550 -:103DA00086958770880F880F912F9F70C92ED12C10 -:103DB000E12CF12C082E04C0CC0CDD1CEE1CFF1CE9 -:103DC0000A94D2F714FF12C04FE050E060E070E0B8 -:103DD00004C0440F551F661F771F8A95D2F7CB0189 -:103DE000BA01609570958095909503C060E070E091 -:103DF000CB012B2D269526952370422F50E0423083 -:103E00005105D9F04330510569F16C297D298E297E -:103E10009F294130510551F126960FB6F894DEBF27 -:103E20000FBECDBFDF91CF911F910F91FF90EF900B -:103E3000DF90CF90BF900C942D256C297D298E2981 -:103E40009F2926960FB6F894DEBF0FBECDBFDF9137 -:103E5000CF911F910F91FF90EF90DF90CF90BF9087 -:103E60000C9449250E942D25C701B60126960FB650 -:103E7000F894DEBF0FBECDBFDF91CF911F910F91A0 -:103E8000FF90EF90DF90CF90BF900C94112500230E -:103E900019F08B2D817001C08695882309F4D7C154 -:103EA000812F829586958770880F880F912F9F703C -:103EB000C92ED12CE12CF12C082E04C0CC0CDD1C19 -:103EC000EE1CFF1C0A94D2F714FF12C04FE050E022 -:103ED00060E070E004C0440F551F661F771F8A958D -:103EE000D2F7CB01BA01609570958095909503C08B -:103EF00060E070E0CB012B2D269526952370422F94 -:103F000050E042305105D9F04330510569F16C2938 -:103F10007D298E299F294130510551F126960FB6F2 -:103F2000F894DEBF0FBECDBFDF91CF911F910F91EF -:103F3000FF90EF90DF90CF90BF900C9407266C29F4 -:103F40007D298E299F2926960FB6F894DEBF0FBED5 -:103F5000CDBFDF91CF911F910F91FF90EF90DF9038 -:103F6000CF90BF900C9423260E940726C701B6016C -:103F700026960FB6F894DEBF0FBECDBFDF91CF916E -:103F80001F910F91FF90EF90DF90CF90BF900C9416 -:103F9000EB25103F49F118F4103E48F491C0123F50 -:103FA00009F453C0E8F1133F09F464C089C01F70DD -:103FB0008B2D8F71002321F00E948425812F7CCED0 -:103FC0000E94A525812F26960FB6F894DEBF0FBE5E -:103FD000CDBFDF91CF911F910F91FF90EF90DF90B8 -:103FE000CF90BF900C948C1D0023B1F0253008F0C9 -:103FF0002EC18B2D8F7126960FB6F894DEBF0FBEA3 -:10400000CDBFDF91CF911F910F91FF90EF90DF9087 -:10401000CF90BF900C94CA25263008F018C1E9CF84 -:104020000023A9F08B2D8F7126960FB6F894DEBF72 -:104030000FBECDBFDF91CF911F910F91FF90EF90F9 -:10404000DF90CF90BF900C948425002359F38B2DE3 -:104050008F7126960FB6F894DEBF0FBECDBFDF91ED -:10406000CF911F910F91FF90EF90DF90CF90BF9075 -:104070000C94A525002399F08B2D8F7126960FB6F1 -:10408000F894DEBF0FBECDBFDF91CF911F910F918E -:10409000FF90EF90DF90CF90BF900C946F25269605 +:100770000000000000000000000000000000010078 +:100780000050010001000100010001000100010012 +:10079000010001004C00010001000100073006309B +:1007A000135012500030013002300C3001000100B3 +:1007B0000B300A300930083001000100010001004F +:1007C0000100010001000100010001000100010021 +:1007D00001000100010001000100010001002803E7 +:1007E000540068006500200050006C0061006E003D +:1007F00063006B0020004B006500790062006F0011 +:1008000061007200640000002C034F00720074004D +:1008100068006F006C0069006E0065006100720086 +:1008200020004B006500790062006F0061007200DB +:100830006400730000000403090409026D00040150 +:1008400000A0FA09040000010301010009211101BF +:100850000001223F000705810308000A0904010086 +:100860000103010200092111010001224D000705C9 +:10087000820308000A0904020001030000000921A4 +:10088000110100012236000705830308000A09044C +:1008900003000103000000092111010001223900B9 +:1008A000070584031000011201100100000008ED8B +:1008B000FE606001000102000105010906A10105B9 +:1008C0000719E029E7150025019508750181020542 +:1008D0000819012905950575019102950175039186 +:1008E0000105071900297715002501957875018103 +:1008F00002C005010980A101850216010026B7008A +:100900001A01002AB700751095018100C0050C0975 +:1009100001A1018503160100269C021A01002A9CF0 +:1009200002751095018100C005010902A1010901AC +:10093000A100050919012905150025019505750175 +:100940008102950175038101050109300931158185 +:10095000257F95027508810609381581257F950147 +:1009600075088106050C0A38021581257F950175E9 +:10097000088106C0C005010906A101050719E02983 +:10098000E71500250195087501810295017508811B +:100990000105081901290595057501910295017553 +:1009A0000391010507190029FF150025FF9506751C +:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B +:1009C00004B603FE24C08091690490916A04A0914A +:1009D0006B04B0916C048730904BA740B04BB9F4D6 +:1009E0001092690410926A0410926B0410926C04C5 +:1009F00014BE84B7877F84BF88E10FB6F8948093D4 +:100A00006000109260000FBEE0E0F8E3099513E08B +:100A1000A0E0B1E0E2E4F4E602C005900D92A23657 +:100A2000B107D9F714E0A2E6B3E001C01D92A936E0 +:100A3000B107E1F70E94FD150C941F320C940000E1 +:100A4000279A2F988FEF9FEF9093870080938600CF +:100A50008AE08093800089E1809381000C94562D78 +:100A6000282F81110BC080918000877F80938000A8 +:100A700010928D0010928C002F9808952F988091DD +:100A80008000886080938000233019F48FEF9FEFFF +:100A90000FC083E090E0821B9109880F991F2FEF10 +:100AA0003FEFA90102C0569547958A95E2F7CA0122 +:100AB00090938D0080938C000895CF93DF93EC0189 +:100AC0000E94ED28BE0180E090E0DF91CF910C9470 +:100AD00018250F931F93462F50E04E30510508F014 +:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499 +:100AF000E331882309F4D3C000E010E0980140E01E +:100B000064E070E089E292E00E942B1281E090E0C4 +:100B10000FC0882309F4C3C000E010E0980140E052 +:100B200066E070E089EB91E00E942B1282E090E099 +:100B30000E945D05B4C0882309F4B1C000E010E054 +:100B4000980140E068E070E089EE91E00E942B128D +:100B500084E090E0EDCF882311F083E005C083E0CE +:100B60000CC0882349F084E00E94952540E164E0B0 +:100B700083E00E946D0A93C084E00E94B625F6CF00 +:100B8000882331F085EE0E947F1C0E94AD2D87C026 +:100B900085EE0E94471D83C0882309F480C00E940F +:100BA000BF0D7DC0882309F47AC00E94B80D00E013 +:100BB00010E0980140E065E070E089E492E027C031 +:100BC000882309F46CC085E00E94B6250E94E00DE0 +:100BD00066C0882309F463C000E010E0980140E09B +:100BE00068E070E089E191E00E942B1285E00E94AC +:100BF000952555C0882309F452C00E94BE1200E01A +:100C000010E0980140E068E070E089E191E00E9426 +:100C10002B1245C0882309F442C00E94C912EFCFAD +:100C20008823E9F100E010E0980140E066E070E020 +:100C300089E891E00E942B1284E00E94B62583E0AF +:100C40000E94B62580E10E94B62585E00E94B62567 +:100C50000E94E00D86E00E9495250E94DA2881110D +:100C600002C00E94B6280E94F22890E09093680487 +:100C7000809367048068809367040E94F6280FC001 +:100C8000882369F000E010E0980140E066E070E041 +:100C900089E591E00E942B1286E00E94B62580E053 +:100CA00090E01F910F9108950F931F932FEF89EFFD +:100CB00090E0215080409040E1F700C0000000E04B +:100CC00010E0980140E065E070E089E492E00E9465 +:100CD0002B121F910F9108950F931F9300E010E0C6 +:100CE000980140E063E070E081E091E00E942B1207 +:100CF0002FEF82E597E0215080409040E1F700C05F +:100D000000001F910F910895CF92DF92EF92FF9212 +:100D10000F931F93CF93DF93CDB7DEB7CC58D10994 +:100D20000FB6F894DEBF0FBECDBF2091210425FF82 +:100D3000C5C08C01FC01928180910001992309F4C6 +:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF +:100D50000D929A95E1F7F8019081E0916203F0918C +:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6 +:100D70003D1FE20FF31F60817181680F711D88278D +:100D800077FD8095982F0E94F12E20E030E040E41E +:100D900051E40E94562E6B017C01F801218184E010 +:100DA00090E0821B9109BC01882777FD8095982FE0 +:100DB0000E94F12E9B01AC01C701B6010E94EE2DED +:100DC0009B01AC0160E070E080E090E40E94643040 +:100DD00020E030E04CE551E40E9401304FE050E06B +:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103 +:100DF000CF911F910F91FF90EF90DF90CF900C94C7 +:100E0000CB1196E4EEE8F2E0DE01119601900D922E +:100E10009A95E1F7F8019081E0916203F091630304 +:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9 +:100E3000E20FF31F60817181680F711D882777FDB4 +:100E40008095982F0E94F12E20E030E040E451E49C +:100E50000E94562E6B017C01F801218184E090E014 +:100E6000821B9109BC01882777FD8095982F0E94ED +:100E7000F12E9B01AC01C701B6010E94EE2D9B0132 +:100E8000AC0160E070E080E090E40E94643020E01B +:100E900030E04CE551E40E940130C457DF4F0FB6FB +:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0 +:100EB000FF90EF90DF90CF900C94130EC457DF4F4C +:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B +:100ED0000F91FF90EF90DF90CF90089508950E94BA +:100EE00020056E9A769A0C9454060C946E070C9416 +:100EF00084060895880F991FFC01E250F040859107 +:100F000094910895880F991FFC01E258FE4F859136 +:100F1000949108950F931F93CF93DF93EC01811564 +:100F200020E49207A0F5C11580E3D80708F0E1C0DE +:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C +:100F4000D10578F4C53AD10508F074C0C130D10597 +:100F500009F46DC008F4DEC1C430D10508F0DDC16C +:100F6000D9C1CB3BD10508F470C0D4C1C11590E202 +:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA +:100F8000C03FD10508F4C6C18E01106506C2C1304C +:100F900080E5D80709F4BDC068F5C13120E4D20767 +:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0 +:100FB000CF70DD278E01146DF0C1C33120E4D2075C +:100FC00009F4A4C008F49FC0C115D04509F0A2C11E +:100FD0000E945C210E94E00D0E946C069FEF24E3BA +:100FE0008CE0915020408040E1F700C000000E945A +:100FF0007928D3C1C11520E6D20730F4C11581E5A7 +:10100000D80708F48CC02DC1C11590E7D90708F4A2 +:1010100081C1C11520E8D20708F478C1C11580E963 +:10102000D80708F077C1DF708E01106AB6C101E001 +:1010300010E0B3C1C53AD10509F471C1C63AD10572 +:1010400009F070C102E810E4A8C1C83AD10509F45A +:101050006CC1C93AD10509F46BC1CA3AD10509F48A +:101060006AC1CB3AD10509F469C1CC3AD10509F47A +:1010700068C1CD3AD10509F467C1C03BD10509F477 +:1010800066C1CE3AD10509F465C1CF3AD10509F45C +:1010900064C1C13BD10509F463C1C23BD10509F468 +:1010A00062C1C33BD10509F461C1C43BD10509F458 +:1010B00060C1C53BD10509F45FC1C63BD10509F448 +:1010C0005EC1C73BD10509F45DC1C83BD10509F438 +:1010D0005CC1C93BD10509F45BC1CA3BD10509F428 +:1010E0005AC100E014E459C1CE019F700E948207EA +:1010F00055C1DD278E01106C50C100E011ED4DC1CE +:1011000000E010ED4AC100E012ED47C100E013ED30 +:1011100044C180913D04816080933D043EC10E94A2 +:10112000DA28811102C00E94B6280E94F22890E0BD +:101130009093680480936704C23090E5D90721F446 +:1011400080916704816086C0C43020E5D20721F415 +:101150008091670482607EC0C63080E5D80721F4A4 +:1011600080916704846076C0C83090E5D90719F48F +:101170008091670427C0CA3020E5D20721F480910E +:101180006704806167C0CC3080E5D80721F4809186 +:10119000670480625FC0CE3090E5D90721F480916A +:1011A0006704806457C0C03120E5D20721F48091E4 +:1011B000670480684FC0C23180E5D80729F4809168 +:1011C00067048460886046C0C33090E5D90721F485 +:1011D000809167048E7F3EC0C53020E5D20721F4A0 +:1011E000809167048D7F36C0C73080E5D80721F431 +:1011F000809167048B7F2EC0C93090E5D90719F420 +:101200008091670426C0CB3020E5D20721F480917D +:1012100067048F7E1FC0CD3080E5D80721F4809110 +:1012200067048F7D17C0CF3090E5D90721F48091F6 +:1012300067048F7B0FC0C13120E5D20721F4809174 +:1012400067048F7707C0C331D04531F480916704BC +:101250008B7F877F80936704809167040E94F628C4 +:101260009CC08D2F99278F70992781309105D9F4D3 +:101270009E012370332702C0880F991F2A95E2F739 +:101280009C688E0144E0000F111F4A95E1F700278A +:101290001370802B912B53E0CC0FDD1F5A95E1F793 +:1012A000C076DD272FC08230910531F4DC2FCC27AA +:1012B0008E01016F106A71C08330910569F4CE010F +:1012C0008370992701E010E002C0000F111F8A957A +:1012D000E2F7C8019C680FC0049709F05EC0CE0118 +:1012E0008370992701E010E002C0000F111F8A955A +:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9 +:10130000C07ED7708C010C2B1D2B47C0DF708E0167 +:10131000106243C000E010E040C08E013EC001E812 +:1013200010E43BC003E810E438C002EE14E435C01A +:1013300009EE14E432C00AEE14E42FC005EB14E405 +:101340002CC006EB14E429C007EB14E426C00CEC17 +:1013500014E423C00DEC14E420C003E815E41DC020 +:101360000AE815E41AC002E915E417C004E915E417 +:1013700014C001E216E411C003E216E40EC004E258 +:1013800016E40BC005E216E408C006E216E405C048 +:1013900007E216E402C00AE216E4C801DF91CF9129 +:1013A0001F910F9108959CE0799FF001112490E323 +:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7 +:1013C000E258FE4F85919491803E9105E0F4803C77 +:1013D000910558F58133910509F46FC048F48932BD +:1013E000910509F463C08A32910509F46DC072C099 +:1013F00089339105E9F082389105D1F08533910563 +:1014000009F44DC067C0833E910581F138F4803EF8 +:101410009105B9F0823E9105D9F05CC0863E9105F8 +:1014200061F1873E9105A1F155C00E947A070895A8 +:101430002091670420FD02C021FF4CC080EE90E0A7 +:1014400049C08091670480FFF9CF89E390E042C0F2 +:101450008091670482FF0EC08091670484FF03C0FF +:1014600080E090E037C083EE90E034C08091670464 +:1014700082FFF2CF82EE90E02DC08091670483FF5F +:101480000BC08091670484FDEBCF87EE90E022C013 +:101490008091670483FFF5CF86EE90E01BC08091BA +:1014A000670485FF07C089E290E014C0809167045B +:1014B00085FFF9CF85E390E00DC08091670486FF3A +:1014C00007C08AE290E006C08091670486FFF9CFEA +:1014D00081E390E00E948A070895CF92DF92EF9215 +:1014E000FF920F931F9301E010E020E030E06801CD +:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0 +:1015000004C0000F111F221F331F6A95D2F70C2948 +:101510001D292E293F29C0902104D0902204E0905B +:101520002304F0902404C022D122E222F322842F4B +:10153000C016D106E206F30641F41F910F91FF9009 +:10154000EF90DF90CF900C9495251F910F91FF9015 +:10155000EF90DF90CF900C94B62508950C94AD0ACF +:101560005F926F927F928F929F92AF92BF92CF9233 +:10157000DF92EF92FF920F931F93CF93DF93CDB73C +:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1 +:1015900001966C014E0199E0890E911C20E030E02B +:1015A00040E050E060E070E000E010E0E12CF12C61 +:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49 +:1015C000F2E0A62DB52D872D01900D928A95E1F7B9 +:1015D000F601819191916F01FC01E07FFF27E032DC +:1015E000F10559F48F709927F50102C0EE0FFF1F26 +:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465 +:101600008F709927F50102C0EE0FFF1F8A95E2F750 +:101610000E2B1F2B29C0E034F10559F48F70992748 +:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC +:101630001BC0E035F10559F48F709927F50102C000 +:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1 +:10165000F10551F48F709927F50102C0EE0FFF1FBD +:101660008A95E2F72E2B3F2BC814D90409F0A7CF97 +:1016700084B19E2D9095892384B985B1E82AE5B877 +:1016800087B1902F9095892387B988B1082B08B925 +:101690008AB1962F909589238AB98BB1682B6BB943 +:1016A0008DB1942F909589238DB98EB1482B4EB969 +:1016B00080B3922F9095892380BB81B3282B21BBC7 +:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145 +:1016D0001F910F91FF90EF90DF90CF90BF90AF9050 +:1016E0009F908F907F906F905F9008955F926F9220 +:1016F0007F928F929F92AF92BF92CF92DF92EF92A2 +:10170000FF920F931F93CF93DF93CDB7DEB7689708 +:101710000FB6F894DEBF0FBECDBF85B7806885BF1A +:1017200085B7806885BF0E94B00ACE0101966C0122 +:101730004E0199E1890E911C20E030E040E050E03C +:1017400060E070E000E010E0E12CF12C6C2C5D2CEE +:1017500088E1782EAA24A394B12CECEDF2E0A62D1A +:10176000B52D872D01900D928A95E1F7F6018191B3 +:1017700091916F01FC01E07FFF27E032F10559F400 +:101780008F709927F50102C0EE0FFF1F8A95E2F7CF +:10179000EE2AFF2A37C0E033F10559F48F709927FC +:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB +:1017B00029C0E034F10559F48F709927F50102C072 +:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3 +:1017D000F10559F48F709927F50102C0EE0FFF1F34 +:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0 +:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F +:101800002E2B3F2BC814D90409F0A7CF84B19E2DED +:101810009095892384B985B1E82AE5B887B1902FDE +:101820009095892387B988B1082B08B98AB1962F7A +:10183000909589238AB98BB1682B6BB98DB1942FA0 +:10184000909589238DB98EB1482B4EB980B3922FD4 +:101850009095892380BB81B3282B21BB10926D0307 +:1018600010926C03109265031092640310926F0340 +:1018700010926E0310926703109266031092710328 +:101880001092700310926903109268031092730310 +:101890001092720310926B0310926A0368960FB64F +:1018A000F894DEBF0FBECDBFDF91CF911F910F9196 +:1018B000FF90EF90DF90CF90BF90AF909F908F9070 +:1018C0007F906F905F900C946F077F928F929F92A2 +:1018D000AF92BF92CF92DF92EF92FF920F931F933E +:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6 +:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7 +:1019000083E0F82E98E0792EBC2CAD2C01E010E09D +:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6 +:10192000872D01900D928A95E1F7F60181919191B1 +:101930006F019C01207F33272032310591F424B1BF +:101940008F709927A80102C0440F551F8A95E2F7AE +:10195000CA01922F982B94B995B18095892385B9A6 +:1019600053C02033310591F427B18F709927F801C6 +:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E +:1019800097B998B18095892388B93EC02034310534 +:1019900091F42AB18F709927A80102C0440F551FF6 +:1019A0008A95E2F7CA01922F982B9AB99BB180953C +:1019B00089238BB929C02035310591F42DB18F7061 +:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9 +:1019D000922F982B9DB99EB1809589238EB914C002 +:1019E0002036310589F420B38F709927A80102C0F1 +:1019F000440F551F8A95E2F7CA01922F982B90BB8E +:101A000091B38095892381BB50EA5A95F1F7BE01C5 +:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F +:101A2000DE011196882D01900D928A95E1F7FB0158 +:101A300081919191BF01FC01E07FFF27E032F10528 +:101A400011F4E3B113C0E033F10511F4E6B10EC0B7 +:101A5000E034F10511F4E9B109C0E035F10511F404 +:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED +:101A7000992702C0F595E7958A95E2F7E0FD08C041 +:101A8000C801042E02C0880F991F0A94E2F702C011 +:101A900080E090E0282B392B4F5F5F4F4C30510591 +:101AA00009F0BCCFF701808191818217930721F063 +:101AB00031832083909271020E94B00AF2E0EF0E0F +:101AC000F11C4CE6E41643E0F40609F025CF8091C2 +:101AD0007102882361F1815080937102882339F06B +:101AE0008FE99FE00197F1F700C0000020C08091CE +:101AF00064039091650390936D0380936C038091D0 +:101B000066039091670390936F0380936E038091B7 +:101B1000680390916903909371038093700380919F +:101B20006A0390916B0390937303809372030E94F6 +:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B +:101B4000DF91CF911F910F91FF90EF90DF90CF9099 +:101B5000BF90AF909F908F907F900895E82FF0E016 +:101B6000EE0FFF1FE459FC4F808191810895089585 +:101B7000809152048160809352040C9408298091D2 +:101B800052048E7F809352040C9408290E94DA2814 +:101B9000811102C00E94B6280E9404298093520439 +:101BA0003E9A809171008D7F8093710082E08093D6 +:101BB00090008AE18093910081E0809376030895FC +:101BC00080917603811102C00E94C60D1092C60357 +:101BD0001092C503809171008D7F80937100809178 +:101BE00090008F7780939000109288031092870363 +:101BF0001092BF031092C0031092C1031092C2034F +:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E +:101C100011921192119211921D921D9283E0ED3B4F +:101C2000F807B1F70895CF92DF92EF92FF920F93EA +:101C30001F93CF93DF9320918703222309F484C05D +:101C40006B017C0180917603811102C00E94C60D58 +:101C50000DEB13E0C7E0D0E0A7019601F8019291E7 +:101C60008291729162918F010E94522E811131C036 +:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219 +:101C8000118212821382DE01AA0FBB1FA357BC4F21 +:101C900011961C921E92C730D105E9F0219644811D +:101CA0005581668177814083518362837383148277 +:101CB00015821682178212968D919C911397119618 +:101CC0009C938E9313961C921E92129734961296A2 +:101CD000E2CF219708F68091C5039091C603019742 +:101CE00097FD05C09093C6038093C50304C010926E +:101CF000C6031092C5038091C5039091C60320913D +:101D0000C3033091C4032817390724F01092C40389 +:101D10001092C303892BC1F4809171008D7F809351 +:101D20007100809190008F77809390001092BF0394 +:101D30001092C0031092C1031092C2031092BE030E +:101D40001092BD0310928703DF91CF911F910F91E5 +:101D5000FF90EF90DF90CF9008951F920F920FB6F3 +:101D60000F9211244F925F926F927F928F929F9267 +:101D7000AF92BF92CF92DF92EF92FF922F933F9359 +:101D80004F935F936F937F938F939F93AF93BF9383 +:101D9000CF93DF93EF93FF9380918703882309F418 +:101DA0009BC1C091C503D091C6031C161D060CF043 +:101DB00093C14090770350907803609079037090BE +:101DC0007A0320E030E0A901C301B2010E94FD2F97 +:101DD00018160CF065C0C130D10509F452C08091CD +:101DE000C3039091C403BE010E94CF317C01909344 +:101DF000C4038093C3038090890390908A03A090CA +:101E00008B03B0908C0320E030E040E85FE3C50135 +:101E1000B4010E94EE2D6093890370938A0380932E +:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44 +:101E3000E356FC4FA30192016081718182819381FD +:101E40000E94562E20E030E040E05EE30E94013028 +:101E50009B01AC01C501B4010E94FD2F18168CF442 +:101E6000C7010196BE010E94CF319093C4038093B5 +:101E7000C3031092890310928A0310928B0310926D +:101E80008C03E091C303F091C403EE0FFF1FEE0F2C +:101E9000FF1FE356FC4F6081718182819381D0C026 +:101EA000C090BF03D090C003E090C103F090C20384 +:101EB00020E030E0A901C701B6010E94522E21970F +:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3 +:101ED000E356FC4F80809180A280B380A5019401DD +:101EE000C701B6010E94522E87FF31C0A50194019F +:101EF00060E070E08CED93EC0E94562E20E030E024 +:101F000040E451E40E94562E20E030E040E05FE3E0 +:101F10000E9401309B01AC0160E070E080E090E441 +:101F20000E9464309B01AC01C501B4010E940130E4 +:101F30009B01AC01C701B6010E94522E87FF07C06A +:101F4000A701960160E070E08CED93E439C0A50133 +:101F50009401C701B6010E94FD2F18160CF055C060 +:101F6000A501940160E070E08CED93E40E94562E90 +:101F700020E030E040E451E40E94562E20E030E0C2 +:101F800040E05FE30E9401309B01AC0160E070E043 +:101F900080E090E40E9464309B01AC01C501B40173 +:101FA0000E9401309B01AC01C701B6010E94FD2FC8 +:101FB00018165CF5A701960160E070E08CED93ECDB +:101FC0000E94562E20E030E040E451E40E94562E5C +:101FD00020E030E040E05FE30E9401309B01AC0173 +:101FE00060E070E080E090E40E9464309B01AC010E +:101FF000C701B6010E9401306093BF037093C00314 +:102000008093C1039093C20313C0FE01EE0FFF1F24 +:10201000EE0FFF1FE356FC4F80819181A281B381B7 +:102020008093BF039093C003A093C103B093C203F6 +:102030006091BF037091C0038091C1039091C2036E +:1020400020917403309175032F3F4FEF340731F027 +:102050002F5F3F4F30937503209374030E94D41277 +:102060006B017C0120E034E244EF51E40E94522EE7 +:1020700087FF08C086EFC82E88E2D82E84EFE82EAE +:1020800081E4F82E20E030E040E051E4C701B601E1 +:102090000E9401309B01AC0160E074E284E79BE4A4 +:1020A0000E94562E6B017C010E94BE2E70939700F9 +:1020B00060939600209172023091730240917402F5 +:1020C00050917502C701B6010E9401300E94BE2ED8 +:1020D000709399006093980080918803882309F495 +:1020E00033C1C0908303D0908403E0908503F090C7 +:1020F000860320E030E0A901C701B6010E94FD2F50 +:102100001816D4F580917403909175038F3F2FEFCB +:10211000920729F001969093750380937403C70189 +:10212000B6010E94D41220E030E040E051E40E9469 +:1021300001309B01AC0160E074E284E79BE40E9403 +:10214000562E6B017C010E94BE2E70939700609307 +:102150009600209172023091730240917402509166 +:102160007502C701B6010E9401300E94BE2E709315 +:1021700099006093980008C0109297001092960002 +:10218000109299001092980060917D0370917E03E7 +:102190006F5F7F4F70937E0360937D032091960065 +:1021A0003091970080E090E0232BF1F0C0919600F1 +:1021B000D09197000E94EF2E6B017C01BE0180E060 +:1021C00090E00E94EF2E9B01AC0160917F03709123 +:1021D000800380918103909182030E94562E20E01B +:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8 +:1021F00020E030EE4FEF54E460917F037091800354 +:1022000080918103909182030E9401309B01AC0177 +:10221000C701B6010E94FD2F87FD96C080917B0308 +:102220008F5F80937B0390E020914E0430914F04A8 +:1022300082179307A0F080915904882319F0109217 +:102240007B030DC0809171008D7F80937100809120 +:1022500090008F7780939000109288037DC08091CA +:102260007C03C0917B03811128C0C0905304D0909F +:102270005404E0905504F090560420E030E0A901A9 +:10228000C701B6010E94FD2F1816BCF481E08093AF +:102290007C031092830310928403109285031092A2 +:1022A0008603C0927F03D0928003E0928103F09274 +:1022B0008203C150C0937B0343C010927C031092F1 +:1022C000750310927403E0915004F091510448E0BA +:1022D000C49FE00DF11D112480819181A281B38101 +:1022E0008093830390938403A0938503B093860324 +:1022F00020E030E040E85EE364817581868197816B +:102300000E9401306B017C0120E030E048EC52E497 +:1023100060917602709177028091780290917902B3 +:102320000E94562E9B01AC01C701B6010E940130EC +:1023300060937F0370938003809381039093820363 +:1023400010927E0310927D038091520480FD04C0A0 +:102350001092880310928703FF91EF91DF91CF9144 +:10236000BF91AF919F918F917F916F915F914F91AD +:102370003F912F91FF90EF90DF90CF90BF90AF9063 +:102380009F908F907F906F905F904F900F900FBEB7 +:102390000F901F901895CF92DF92EF92FF92CF93FC +:1023A000DF936B017C01EA0180917603811102C009 +:1023B0000E94C60D8091520480FF46C08091C503E3 +:1023C0009091C60308970CF03FC0809171008D7FFB +:1023D000809371008091880381110E94E00D81E05B +:1023E00080938703109275031092740320E030E00D +:1023F000A901C701B6010E94FD2F1816DCF48091D7 +:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7 +:10241000E356FC4FC082D182E282F382FC01EE0FD0 +:10242000FF1FE357FC4FD183C08301969093C603EF +:102430008093C503809171008260809371008091C8 +:102440009000806880939000DF91CF91FF90EF9093 +:10245000DF90CF9008958F929F92AF92BF92CF92CC +:10246000DF92EF92FF920F931F93CF93DF93EC01D4 +:102470007B01D42E4801590180917603811102C05D +:102480000E94C60D8091520480FF6BC08091710044 +:102490008D7F809371008091870381110E94E00DF0 +:1024A00081E080938803D0935104C0935004F0924C +:1024B0004F04E0924E04D0925904809253049092BB +:1024C0005404A0925504B0925604109289031092BD +:1024D0008A0310928B0310928C0310927B038881E5 +:1024E0009981AA81BB818093830390938403A093F5 +:1024F0008503B093860320E030E040E85EE36C8122 +:102500007D818E819F810E9401306B017C0120E0E2 +:1025100030E048EC52E4609176027091770280914D +:102520007802909179020E94562E9B01AC01C7015E +:10253000B6010E94013060937F0370938003809303 +:1025400081039093820310927E0310927D03809109 +:102550007100826080937100809190008068809308 +:102560009000DF91CF911F910F91FF90EF90DF903E +:10257000CF90BF90AF909F908F9008958091C703A8 +:1025800090E0019666E070E00E94CF318093C7032F +:1025900008958091C70390E0019766E070E00E9483 +:1025A000CF318093C70308958F929F92AF92BF92CD +:1025B000CF92DF92EF92FF920F931F93CF93DF930F +:1025C0006B017C01C0917403D0917503BE0180E062 +:1025D00090E00E94EF2E4B015C01A701960160E0A4 +:1025E00070E08CE594E40E94562E9B01AC01C5017D +:1025F000B4010E9401300E94C32E2091C7032330F2 +:1026000009F473C028F4222351F02130E9F02CC1E1 +:10261000243009F4A0C0253009F4E0C025C180E0D1 +:1026200090E0A0E0BFE38093720290937302A093C6 +:102630007402B0937502109277031092780310928F +:10264000790310927A0310C11092770310927803E5 +:102650001092790310927A036431710540F46A3064 +:10266000710560F520E030E040E85EE32BC0693C96 +:10267000710508F0AAC080E090E00E94EF2E20E0F3 +:1026800030E040EA51E40E94ED2D20E030E044E3E8 +:1026900053E40E94562E9B01AC010E94013020E0C1 +:1026A00030E040E05EE30E9401309B01AC0160E05D +:1026B00070E080E09EE30E94ED2D44C020E030E019 +:1026C00040E05FE3C701B6010E9401306B017C016D +:1026D00080E090E0A0E0BEE38093720290937302EA +:1026E000A0937402B0937502BFC01092770310924A +:1026F00078031092790310927A034AE0469F900182 +:10270000479F300D1124C90168EB7BE00E94BB316B +:10271000BC016C5D754077FF03C0719561957109CF +:10272000882777FD8095982F0E94F12E2EE333ECB9 +:102730004EE259E30E94013020E030E040EC5EE3DD +:102740000E94EE2D60937202709373028093740264 +:102750009093750289C010927703109278031092BB +:10276000790310927A03CE0183709927892BE1F0C7 +:10277000BE016170772780E090E00E94EF2E20E09C +:1027800030E040E05EE30E94013020E030E040E4D1 +:102790005FE30E94EE2D6093720270937302809348 +:1027A0007402909375020CC080E090E0A0E0BFE35B +:1027B0008093720290937302A0937402B093750297 +:1027C000C770DD27CD2B09F04FC010927202109216 +:1027D0007302109274021092750246C01092770331 +:1027E000109278031092790310927A0300E010E0BF +:1027F00020E03FE30093720210937302209374026F +:10280000309375026739710578F180E090E00E949D +:10281000EF2E20E030E047E153E40E94ED2D20E070 +:1028200030E04AE754E40E94562E20E030E048E4CD +:1028300052E40E94013020E030E040EA51E40E947E +:10284000332F0E94BE2E660F771F660F771FFB0186 +:10285000EC50FD4F2081318142815381C701B60187 +:102860000E9401306B017C01C701B601DF91CF915D +:102870001F910F91FF90EF90DF90CF90BF90AF909E +:102880009F908F9008958091D8030895CF93DF9300 +:1028900000D01F92CDB7DEB79C0180915E048430DA +:1028A00019F593E099833B832A839093E9008FEF96 +:1028B0009091E800815095FD06C095ED9A95F1F74D +:1028C00000008111F5CF8091E80085FF0DC040E048 +:1028D00050E063E070E0CE0101960E94A71680915F +:1028E000E8008E778093E8000F900F900F90DF91B3 +:1028F000CF910895CF93DF9300D01F92CDB7DEB76D +:1029000020915E04243021F522E029839B838A8371 +:1029100083E08093E9008FEF9091E800815095FD6E +:1029200006C095ED9A95F1F700008111F5CF8091E1 +:10293000E80085FF0DC040E050E063E070E0CE01AC +:1029400001960E94A7168091E8008E778093E80098 +:102950000F900F900F90DF91CF91089520915E041A +:102960002430F1F422E02093E9002FEF3091E800C9 +:10297000215035FD06C035ED3A95F1F700002111E3 +:10298000F5CF2091E80025FF0BC040E050E065E066 +:1029900070E00E94A7168091E8008E778093E8008F +:1029A0000895CF93DF93EC0190915E04943009F089 +:1029B00046C0809184028823D9F0809185028823C3 +:1029C000B9F09093E9008FEF9091E800815095FD68 +:1029D00006C095E19A95F1F700008111F5CF80913D +:1029E000E80085FF2CC040E050E060E170E017C0D7 +:1029F00081E08093E9008FEF9091E800815095FD90 +:102A000006C095ED9A95F1F700008111F5CF809100 +:102A1000E80085FF14C040E050E068E070E0CE01BF +:102A20000E94A7168091E8008E778093E80080E1ED +:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9 +:102A4000CF91089580915D04811109C00E943C18C6 +:102A50000E9499188091E20084608093E2000895BA +:102A600010925D040895089508950C94E12742E0C2 +:102A700061EC81E00E94B61742E061EC82E00E94C6 +:102A8000B61742E061EC83E00E94B61742E161ECC8 +:102A900084E00C94B61780916004833009F455C02B +:102AA00030F4813071F0823009F48EC008958A309C +:102AB00009F47AC08B3009F460C0893009F09CC0F9 +:102AC00020C080915F04813A09F096C08091E800AF +:102AD000877F8093E8008091630490916404892B40 +:102AE00021F460E188EC93E003C060E080E090E0D6 +:102AF00070E00E94F2168091E8008B778093E800E6 +:102B0000089580915F04813209F076C0809163045A +:102B100090916404009719F0039709F06DC08091BB +:102B2000E800877F8093E8008091E80082FD05C07F +:102B300080915E048111F8CF5FC08091F100809395 +:102B4000D8038091E8008B7753C080915F04813A6D +:102B500009F052C08091630490916404892B09F0BC +:102B60004BC08091E800877F8093E8008091E80067 +:102B700080FFFCCF8091840236C080915F04813257 +:102B8000D9F58091630490916404892BA9F5809113 +:102B9000E800877F8093E8000E94EB178091610432 +:102BA000809384020C945C2180915F04813221F532 +:102BB0008091E800877F8093E8000E94EB17809166 +:102BC00062048093D903089580915F04813AA1F44F +:102BD0008091E800877F8093E8008091E80080FF83 +:102BE000FCCF8091D9038093F1008091E8008E772B +:102BF0008093E8000C94EB17089584B7877F84BF17 +:102C000088E10FB6F89480936000109260000FBEC8 +:102C100090E080E80FB6F894809361009093610093 +:102C20000FBE0E948E1B0E943C180E949918809132 +:102C3000E20084608093E20078940E941F1B0E944F +:102C4000901B8AE792E00E943A1B80915E048530D7 +:102C500069F40E949B2780915C048823B1F30E9451 +:102C6000C927882391F30E949116EFCF0E94981BE9 +:102C7000ECCF292F332723303105C9F064F42130FC +:102C8000310581F02230310509F043C08DE690E036 +:102C90002AE338E042C021323105F1F02232310519 +:102CA00041F137C082E190E027EA38E036C0992749 +:102CB0008130910541F08230910541F0892B49F531 +:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A +:102CD000849190E09F0121C06430D8F4E62FF0E0A9 +:102CE000EE0FFF1FE05BFC4F2081318189E090E017 +:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E +:102D0000FC4F20813181FB01EC5BFC4F808190E026 +:102D100004C080E090E020E030E0FA0131832083BD +:102D2000089580E189BD82E189BD09B400FEFDCF2F +:102D30008091D8008F7D8093D8008091E0008260E0 +:102D40008093E0008091E00081FDFCCF0895CF9258 +:102D5000DF92EF92FF920F931F93CF93DF93EC01DB +:102D60008B016A010E940A18811133C0C114D10479 +:102D700039F0F60180819181081B190BC80FD91F0A +:102D8000E12CF12C0115110519F18091E80085FD68 +:102D900016C08091E8008E778093E800C114D104BA +:102DA00049F0F60180819181E80EF91EF182E082FE +:102DB00085E00FC00E940A18882321F30AC0899178 +:102DC0008093F10001501109FFEFEF1AFF0ADACFEB +:102DD00080E0DF91CF911F910F91FF90EF90DF90F6 +:102DE000CF90089520916504309166042617370727 +:102DF00048F06115710539F42091E8002E77209391 +:102E0000E80001C0B90140E061157105A9F1209108 +:102E10005E04222309F443C0253009F442C0209106 +:102E2000E80023FD40C02091E80022FD32C020913F +:102E3000E80020FFE9CF4091F3002091F20030E05C +:102E4000342BFC01CF016115710559F02830310593 +:102E500040F481918093F100615071092F5F3F4FE1 +:102E6000F1CF41E02830310509F040E02091E80041 +:102E70002E772093E800C8CF4111C9CF0AC08091B6 +:102E80005E04882361F0853061F08091E80083FD65 +:102E90000AC08091E80082FFF2CF80E0089582E0CE +:102EA000089583E0089581E00895209165043091AC +:102EB00066042617370748F06115710539F420912B +:102EC000E8002E772093E80001C0B901FC0120E062 +:102ED0006115710591F180915E04882309F440C069 +:102EE000853009F43FC08091E80083FD3DC08091AA +:102EF000E80082FD2FC08091E80080FFE9CF20919B +:102F0000F3008091F20090E0922B6115710559F069 +:102F10008830910540F424912093F100319661505E +:102F200071090196F2CF21E0089709F020E0809125 +:102F3000E8008E778093E800CBCF2111CCCF0AC078 +:102F400080915E04882361F0853061F08091E80013 +:102F500083FD0AC08091E80082FFF2CF80E00895EF +:102F600082E0089583E0089581E00895982F9730D6 +:102F700058F59093E900981739F07091EC00209182 +:102F8000ED005091F00003C0242F762F50E021FF78 +:102F900019C03091EB003E7F3093EB003091ED0093 +:102FA0003D7F3093ED003091EB0031603093EB00CA +:102FB0007093EC002093ED005093F0002091EE0010 +:102FC00027FF07C09F5FD3CF8F708093E90081E018 +:102FD000089580E0089580915F0487FF11C080917B +:102FE000E80082FD05C080915E048111F8CF11C018 +:102FF0008091E8008B770BC080915E04882349F0B4 +:103000008091E80080FFF8CF8091E8008E77809370 +:10301000E80008952091E4003091E50095E64091A4 +:10302000EC00842F817040FF22C08091E80080FD79 +:103030001CC080915E04882391F0853091F08091CE +:10304000EB0085FD10C04091E4005091E50042176F +:10305000530729F39A01915011F784E0089582E013 +:10306000089583E0089581E0089580E008954091F7 +:10307000E80042FFDECF08950E94AA180E94B2180D +:10308000E0EEF0E0808181608083E8EDF0E0808117 +:103090008F77808319BCA7EDB0E08C918E7F8C93E5 +:1030A00080818F7E808310925D0408950F931F931B +:1030B000CF93DF930E94AA180E94B218C8EDD0E007 +:1030C00088818F77888388818068888388818F7DD5 +:1030D000888319BC10925E0410925A0410925C040A +:1030E00010925B0400EE10E0F80180818B7F8083FA +:1030F00088818160888342E060E080E00E94B617AA +:10310000E1EEF0E080818E7F8083E2EEF0E080816E +:1031100081608083808188608083F80180818E7FD8 +:103120008083888180618883DF91CF911F910F9187 +:103130000895E8EDF0E080818F7E8083E7EDF0E098 +:1031400080818160808384E082BF81E080935D0420 +:103150000C945618E8EDF0E080818E7F8083109209 +:10316000E20008951092DA001092E10008951F9293 +:103170000F920FB60F9211242F933F934F935F93AB +:103180006F937F938F939F93AF93BF93EF93FF932F +:103190008091E10082FF0BC08091E20082FF07C0B6 +:1031A0008091E1008B7F8093E1000E941E1B809143 +:1031B000DA0080FF1FC08091D80080FF1BC0809183 +:1031C000DA008E7F8093DA008091D90080FF0DC0F5 +:1031D00080E189BD82E189BD09B400FEFDCF81E0B7 +:1031E00080935E040E94221505C019BC10925E04F3 +:1031F0000E9430158091E10080FF19C08091E200AB +:1032000080FF15C08091E2008E7F8093E200809164 +:10321000E20080618093E2008091D8008062809318 +:10322000D80019BC85E080935E040E94341580911B +:10323000E10084FF30C08091E20084FF2CC080E177 +:1032400089BD82E189BD09B400FEFDCF8091D8001F +:103250008F7D8093D8008091E1008F7E8093E10084 +:103260008091E2008F7E8093E2008091E200816095 +:103270008093E20080915A04882311F084E007C013 +:103280008091E30087FD02C081E001C083E080936C +:103290005E040E9435158091E10083FF29C0809172 +:1032A000E20083FF25C08091E100877F8093E100E9 +:1032B00082E080935E0410925A048091E1008E7F38 +:1032C0008093E1008091E2008E7F8093E200809104 +:1032D000E20080618093E20042E060E080E00E94D2 +:1032E000B6178091F00088608093F0000E9433153B +:1032F000FF91EF91BF91AF919F918F917F916F91CE +:103300005F914F913F912F910F900FBE0F901F90A3 +:1033100018951F920F920FB60F9211242F933F937F +:103320004F935F936F937F938F939F93AF93BF93CD +:10333000CF93DF93EF93FF93C091E900CF7080911B +:10334000EC00D82FD17080FDD0E81092E900809178 +:10335000F000877F8093F00078940E94CD1910923E +:10336000E9008091F00088608093F000CD2BCF7051 +:10337000C093E900FF91EF91DF91CF91BF91AF91A1 +:103380009F918F917F916F915F914F913F912F917D +:103390000F900FBE0F901F9018951F93CF93DF9340 +:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C +:1033B000EFE5F4E088E08E0F9091F10091938E1389 +:1033C000FBCF0E944B158091E80083FF1FC18091C5 +:1033D0005F0490916004492F50E04A30510508F095 +:1033E00015C1FA01EC59FF4F0C94E331803881F09C +:1033F000823809F00BC1809163048F708093E900DB +:103400008091EB0085FB882780F91092E90006C0C7 +:1034100080915B0490915C04911182609091E8002E +:10342000977F9093E8008093F1001092F100C8C05C +:10343000282F2D7F09F0EAC0882319F0823061F02F +:10344000E5C080916104813009F0E0C0933009F05B +:1034500080E080935C042BC080916104811127C0BF +:10346000809163048F7009F4D1C08093E9002091AA +:10347000EB0020FF1CC0933021F48091EB008062B0 +:1034800014C09091EB0090619093EB0021E030E04C +:10349000A90102C0440F551F8A95E2F74093EA0044 +:1034A0001092EA008091EB0088608093EB0010920C +:1034B000E9008091E800877F86C08111A7C0109144 +:1034C00061041F778091E3008078812B8093E30073 +:1034D0008091E800877F8093E8000E94EB1780913D +:1034E000E80080FFFCCF8091E30080688093E300D8 +:1034F000111102C082E001C083E080935E0486C0A7 +:103500008058823008F082C08091610490916204FA +:103510008C3D53E0950779F583E08A838AE28983BD +:103520004FB7F894DE01139620E03EE051E2E32F1E +:10353000F0E050935700E49120FF03C0E295EF7054 +:103540003F5FEF708E2F90E0EA3010F0C79601C019 +:10355000C0968D939D932F5F243149F74FBF809183 +:10356000E800877F8093E8006AE270E0CE01019670 +:103570000E94F21614C0AE014F5F5F4F609163046A +:103580000E943916BC01009709F440C09091E800F0 +:10359000977F9093E80089819A810E9455178091C6 +:1035A000E8008B778093E80031C0803879F580910E +:1035B000E800877F8093E80080915A048093F100AF +:1035C0008091E8008E778093E8000E94EB171EC080 +:1035D00081111CC0909161049230C0F48091E80088 +:1035E000877F8093E80090935A040E94EB178091A4 +:1035F0005A04811106C08091E30087FD02C081E07A +:1036000001C084E080935E040E9437158091E80039 +:1036100083FF0AC08091E800877F8093E800809153 +:10362000EB0080628093EB00AA960FB6F894DEBFA1 +:103630000FBECDBFDF91CF911F9108950895CF9315 +:1036400080915E048823A1F0C091E900CF70909131 +:10365000EC00892F817090FD80E8C82B1092E90062 +:103660008091E80083FD0E94CD19CF70C093E900DE +:10367000CF9108959093DF038093DE030895E09146 +:10368000DE03F091DF03309721F00190F081E02D0F +:10369000099480E00895E091DE03F091DF03309714 +:1036A00021F00280F381E02D09940895E091DE037A +:1036B000F091DF03309721F00480F581E02D09942B +:1036C00008952091DC033091DD038217930771F098 +:1036D0009093DD038093DC03E091DE03F091DF0340 +:1036E000309721F00680F781E02D0994089520910C +:1036F000DA033091DB038217930771F09093DB03B9 +:103700008093DA03E091DE03F091DF03309721F03C +:103710000084F185E02D0994089508950C948D1B83 +:103720000E9415280E94760B0E949B280C94562D0F +:103730004F925F927F928F929F92AF92BF92CF9261 +:10374000DF92EF92FF920F931F93CF93DF93CDB74A +:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A +:10376000650C91EEC92E93E0D92E00E010E0AA245A +:10377000A394B12C702E802F0E94AE0D4C01F60147 +:10378000419051906F014826592641145104B1F4DB +:103790000F5F1F4F0430110569F78FEF89838A830C +:1037A0001B820E941E288160782F9D838C83498113 +:1037B0005A816B818D810E94511C3AC080913D04D9 +:1037C00081FD0E94B70D20E030E07501022E02C09D +:1037D000EE0CFF1C0A94E2F7C70184219521892B86 +:1037E00009F12E837F828E209F2091E0892809F4A1 +:1037F00090E098870E941E288160782F9A87898799 +:103800004E815F8168858A850E94511C000F111FBF +:10381000F801EF51FC4F80819181E826F926F18271 +:10382000E08206C02F5F3F4F2C30310571F6B0CFDC +:103830000E94872A1091E0030E943F1B1817D9F0BD +:103840000E943F1B8093E0032A960FB6F894DEBFD8 +:103850000FBECDBFDF91CF911F910F91FF90EF90E1 +:10386000DF90CF90BF90AF909F908F907F905F90B0 +:103870004F900C94AE0A2A960FB6F894DEBF0FBE96 +:10388000CDBFDF91CF911F910F91FF90EF90DF900F +:10389000CF90BF90AF909F908F907F905F904F9010 +:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B +:1038B000DEBF0FBECDBF4F83588769877A878B875E +:1038C000DE01119686E0FD0111928A95E9F785E007 +:1038D000FE01379601900D928A95E1F749815A8150 +:1038E0006B817C818D819E810E94F6232B960FB681 +:1038F000F894DEBF0FBECDBFDF91CF910895CF9377 +:10390000882309F4C2C0C82F823859F40E943F1B93 +:1039100081FDBBC089E30E949F260E946C2789E33A +:103920000CC0833879F40E943F1B80FDAEC083E554 +:103930000E949F260E946C2783E50E94E126CF917A +:103940000C946C27843859F40E943F1B82FD9DC063 +:1039500087E40E949F260E946C2787E4EECF8CEFBD +:103960008C0F813A48F48C2F0E94BE2C81118DC09F +:103970008C2F0E949F26E3CF80E28C0F883048F482 +:10398000C77081E001C0880FCA95EAF70E94252719 +:10399000D6CF8BE58C0F833078F4C53A29F0C63A40 +:1039A00031F083E890E005C081E890E002C082E851 +:1039B00090E0CF910C94611B88E58C0F833108F067 +:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F +:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F +:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F +:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D +:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092 +:103A100090E038C082EE90E035C089EE90E032C090 +:103A20008AEE90E02FC085EB90E02CC086EB90E012 +:103A300029C087EB90E026C08CEC90E023C08DEC91 +:103A400090E020C083E891E01DC08AE891E01AC0B0 +:103A500082E991E017C084E991E014C081E292E02C +:103A600011C083E292E00EC084E292E00BC085E2D6 +:103A700092E008C086E292E005C087E292E002C0D0 +:103A80008AE292E0CF910C94771BCF91089588231E +:103A900009F44BC0823859F40E943F1B81FF45C096 +:103AA00089E30E949F260E946C2789E30CC083381B +:103AB00071F40E943F1B80FF38C083E50E949F265F +:103AC0000E946C2783E50E94E1260C946C278438C1 +:103AD00059F40E943F1B82FF28C087E40E949F2662 +:103AE0000E946C2787E4EFCF9CEF980F913A58F330 +:103AF00090E2980F983050F4877091E001C0990FD0 +:103B00008A95EAF7892F0E942B27DFCF9BE5980F34 +:103B1000933020F480E090E00C94611B885A83314C +:103B200020F480E090E00C94771B0895882321F026 +:103B30000E9425270C946C270895882321F00E9469 +:103B40002B270C946C270895BF92CF92DF92EF92AF +:103B5000FF920F931F93CF93DF9300D000D000D03C +:103B6000CDB7DEB725E0FC01DE01119601900D9284 +:103B70002A95E1F7FC01D0801181028125812295EF +:103B80002F7043815481452B09F472C31F3F21F4E8 +:103B9000FFEFDF1609F46CC37C012E830E947707C8 +:103BA000D9821A8369817A81802F0E949B26182FDF +:103BB000B92E0E9450260E9417252E81002319F04D +:103BC0000E9442272E81EB2DE295EF70F0E0E25942 +:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E +:103BE000882319F0F29480EFF822002389F0FF2057 +:103BF00009F47CC280E2810F883020F48F2D0E946E +:103C0000252703C08F2D0E9435270E946C276EC286 +:103C1000812F0E94471DFF2009F42AC3105E8F2DBB +:103C2000183018F40E942B2702C00E943B272696CA +:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD +:103C40000F91FF90EF90DF90CF90BF900C946C2776 +:103C50008B2D807F9B2D9F70803211F4892F03C0A4 +:103C6000892F8295807F112319F0113011F12BC01B +:103C70000023A9F0222389F1213079F526960FB689 +:103C8000F894DEBF0FBECDBFDF91CF911F910F9192 +:103C9000FF90EF90DF90CF90BF900C945527222398 +:103CA00019F0213009F4E4C28E830E9458278E81D6 +:103CB0009BC1002321F0263008F0DAC20EC0253067 +:103CC00008F0D6C291C10023C9F0222331F0F701D8 +:103CD000958190FF0BC29F70958326960FB6F8943E +:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F +:103CF000EF90DF90CF90BF900C94961D222309F493 +:103D000073C109C22B2D26952695237030E021150D +:103D1000310521F021303105D1F0AAC2002321F074 +:103D2000812F9B2D937002C080E090E026960FB605 +:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1 +:103D4000FF90EF90DF90CF90BF900C94611B002309 +:103D500021F0812F9B2D937002C080E090E0269689 +:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C +:103D70000F91FF90EF90DF90CF90BF900C94771B46 +:103D8000812F002319F00E948F2902C00E94F72979 +:103D900026960FB6F894DEBF0FBECDBFDF91CF9150 +:103DA0001F910F91FF90EF90DF90CF90BF900C94F8 +:103DB0007C2A8B2D837009F07BC0011159C2812FA1 +:103DC000829586958770880F880F912F9F70C92ED6 +:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7 +:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD +:103DF00070E004C0440F551F661F771F8A95D2F7E5 +:103E0000CB01BA01609570958095909503C060E0F4 +:103E100070E0CB012B2D269526952370422F50E084 +:103E200042305105D9F04330510569F16C297D29A3 +:103E30008E299F294130510551F126960FB6F894ED +:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD +:103E5000EF90DF90CF90BF900C943E256C297D2988 +:103E60008E299F2926960FB6F894DEBF0FBECDBFD0 +:103E7000DF91CF911F910F91FF90EF90DF90CF9046 +:103E8000BF900C945A250E943E25C701B601269684 +:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B +:103EA0000F91FF90EF90DF90CF90BF900C94222560 +:103EB000002319F08B2D817001C08695882309F4A9 +:103EC000D7C1812F829586958770880F880F912F93 +:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3 +:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039 +:103EF00050E060E070E004C0440F551F661F771F5C +:103F00008A95D2F7CB01BA0160957095809590950E +:103F100003C060E070E0CB012B2D26952695237021 +:103F2000422F50E042305105D9F04330510569F13C +:103F30006C297D298E299F294130510551F1269602 +:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA +:103F50000F91FF90EF90DF90CF90BF900C941826B8 +:103F60006C297D298E299F2926960FB6F894DEBFED +:103F70000FBECDBFDF91CF911F910F91FF90EF90BA +:103F8000DF90CF90BF900C9434260E941826C70172 +:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7 +:103FA000CF911F910F91FF90EF90DF90CF90BF9036 +:103FB0000C94FC25103F49F118F4103E48F491C0D0 +:103FC000123F09F453C0E8F1133F09F464C089C0FB +:103FD0001F708B2D8F71002321F00E949525812F5A +:103FE0007CCE0E94B625812F26960FB6F894DEBFB0 +:103FF0000FBECDBFDF91CF911F910F91FF90EF903A +:10400000DF90CF90BF900C949D1D0023B1F0253020 +:1040100008F02EC18B2D8F7126960FB6F894DEBF57 +:104020000FBECDBFDF91CF911F910F91FF90EF9009 +:10403000DF90CF90BF900C94DB25263008F018C19C +:10404000E9CF0023A9F08B2D8F7126960FB6F89437 +:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB +:10406000EF90DF90CF90BF900C949525002359F3EB +:104070008B2D8F7126960FB6F894DEBF0FBECDBF85 +:10408000DF91CF911F910F91FF90EF90DF90CF9034 +:10409000BF900C94B625002399F08B2D8F71269636 :1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149 -:1040B0000F91FF90EF90DF90CF90BF900C9465250B -:1040C0000023A9F0222309F4ADCF812F26960FB645 -:1040D000F894DEBF0FBECDBFDF91CF911F910F913E -:1040E000FF90EF90DF90CF90BF900C946E1C222336 -:1040F00009F4ADCF812F26960FB6F894DEBF0FBE20 -:10410000CDBFDF91CF911F910F91FF90EF90DF9086 -:10411000CF90BF900C94361D4B2D4F70612FC7016F -:104120000E948D0526960FB6F894DEBF0FBECDBF58 -:10413000DF91CF911F910F91FF90EF90DF90CF9083 -:10414000BF900C948924011182C09B2D9F70492F30 -:1041500050E04230510509F443C0C4F44115510503 -:1041600071F14130510509F072C026960FB6F894EE -:10417000DEBF0FBECDBFDF91CF911F910F91FF909A -:10418000EF90DF90CF90BF900C946D2D4330510590 -:10419000C1F14430510509F05AC0812F26960FB65F -:1041A000F894DEBF0FBECDBFDF91CF911F910F916D -:1041B000FF90EF90DF90CF90BF900C94BF2D26968C +:1040B0000F91FF90EF90DF90CF90BF900C948025F0 +:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D +:1040D0001F910F91FF90EF90DF90CF90BF900C94C5 +:1040E00076250023A9F0222309F4ADCF812F26964F +:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9 +:104100000F91FF90EF90DF90CF90BF900C947F1CA9 +:10411000222309F4ADCF812F26960FB6F894DEBF87 +:104120000FBECDBFDF91CF911F910F91FF90EF9008 +:10413000DF90CF90BF900C94471D4B2D4F70612F97 +:10414000C7010E94690526960FB6F894DEBF0FBE20 +:10415000CDBFDF91CF911F910F91FF90EF90DF9036 +:10416000CF90BF900C949A24011182C09B2D9F7018 +:10417000492F50E04230510509F443C0C4F44115C1 +:10418000510571F14130510509F072C026960FB604 +:10419000F894DEBF0FBECDBFDF91CF911F910F917D +:1041A000FF90EF90DF90CF90BF900C947E2D433026 +:1041B0005105C1F14430510509F05AC0812F2696AE :1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128 -:1041D0000F91FF90EF90DF90CF90BF900C94562DF1 +:1041D0000F91FF90EF90DF90CF90BF900C94D02D77 :1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC :1041F0001F910F91FF90EF90DF90CF90BF900C94A4 -:10420000892D26960FB6F894DEBF0FBECDBFDF9185 +:10420000672D26960FB6F894DEBF0FBECDBFDF91A7 :10421000CF911F910F91FF90EF90DF90CF90BF90C3 -:104220000C949C2D4B2D4F70612FC70126960FB615 -:10423000F894DEBF0FBECDBFDF91CF911F910F91DC -:10424000FF90EF90DF90CF90BF900C949D07269643 +:104220000C949A2D26960FB6F894DEBF0FBECDBF24 +:10423000DF91CF911F910F91FF90EF90DF90CF9082 +:10424000BF900C94AD2D4B2D4F70612FC70126965A :104250000FB6F894DEBF0FBECDBFDF91CF911F9197 -:104260000F91FF90EF90DF90CF90BF9008950E9444 -:1042700031270E9441270E9406270E945B270E9447 -:104280001C2B0E946B2A80E090E00E94501B80E073 -:1042900090E00C94661B0E9421270C9437210E9409 -:1042A0007F26292F22952F7030E02C3031054CF4D9 -:1042B0002A3031056CF4225031092230310588F45E -:1042C00007C02C30310549F02F30310531F009C0DD -:1042D000803E48F0803F29F406C093FB882780F990 -:1042E000089580E0089581E00895CF93DF9300D092 -:1042F00000D01F92CDB7DEB70F900F900F900F90A8 -:104300000F90DF91CF910895CF93DF9300D000D02D -:1043100000D0CDB7DEB726960FB6F894DEBF0FBE3D -:10432000CDBFDF91CF9108951F93CF93DF93C091BD -:10433000990316E080919A03C81799F0D0E01C9F6A -:10434000F0011D9FF00D1124E556FC4F4081518175 -:1043500062817381848195810E9484212196C77036 -:10436000E9CFDF91CF911F9108954091CB035091F8 -:10437000CC036091CD037091CE038091CF039091D7 -:10438000D0030C9484218091D00382958F7009F022 -:1043900054C08091CD03882309F44FC080919903C4 -:1043A000A0919A036091CB037091CC034091CE030E -:1043B0005091CF03B6E08A1709F43FC090E0411551 -:1043C0005105C1F17F3F11F46F3FA1F1B89FF0019A -:1043D000B99FF00D1124E556FC4F218172132AC0BC -:1043E0002081621327C02281211124C023813481BE -:1043F0002417350710F421503109241B350B283CB4 -:104400003105C0F42091D0032F7020612093D00398 -:1044100026E0289FF001299FF00D1124E056FC4F63 -:1044200080818F70806180838BEC93E00E94931D6C -:104430000C94942101968770BECF0895CF92DF929D -:10444000EF92FF920F931F93CF93DF93CDB7DEB719 -:1044500062970FB6F894DEBF0FBECDBF8C0185E02A -:10446000F801DE011D9601900D928A95E1F7D801C1 -:104470004C9111965C91119712966C91129713962C -:10448000CD90DC9014973091CB037091CC03809148 -:10449000CE039091CF03009709F46BC17F3F19F4CD -:1044A0003F3F09F466C1E090CD03EE2009F4C0C09F -:1044B0002091D003C816D90628F0F601E81BF90BA5 -:1044C000CF0104C0809590958C0D9D1DFF24F39421 -:1044D000883C910578F0F12C207F09F0C6C07C2D36 -:1044E000D98AC88A89890E9475218BEC93E00E9441 -:1044F000931DB1C0822F807F09F046C0751314C090 -:10450000341312C0611110C02F7020612093D003AA -:104510000E94B5218BEC93E00E94931D8091D00303 -:10452000D80115968C932EC0CD2819F15F3F11F458 -:104530004F3FF9F0F62E61111CC080919903209134 -:104540009A0336E0821709F45AC090E0389FF001D0 -:10455000399FF00D1124E556FC4F7181571306C0A9 -:104560007081471303C07281711103C00196877077 -:10457000E9CFF62E662309F418C18091D00381603B -:104580008093D003F12C11C1751308C0341306C0F9 -:10459000611104C08091D003D801C3C04D875E87EC -:1045A0008D859E856A8B0E944F216A898823E1F15F -:1045B0006623D1F12091D003822F82958F7090E0F5 -:1045C000029774F08091CB039091CC0398878F83EE -:1045D0001986DB86CA862C87CE0107960E94931D1A -:1045E00086E0F801ABECB3E001900D928A95E1F71B -:1045F0000E94C3210E94B521FF24F394D6C04D87A9 -:104600005E878D859E850E947F26292F22952F709B -:1046100030E0223031050CF0BCC09F7009F0B6C00C -:10462000805E883008F4C1C0C8010E94931DE4CFA9 -:10463000C816D90608F453C0F601E81BF90BCF01E0 -:10464000883C910508F450C0F12C7C2DD98AC88A89 -:1046500089890E947521EBECF3E086E0DF011D9271 -:104660008A95E9F70E94B521A0C0751314C03413D0 -:1046700012C0611110C08091D003F8018583C80178 -:104680000E94931D86E0EBECF3E0DF011D928A951A -:10469000E9F7FE2C8AC04D875E878D859E856A8BE3 -:1046A0000E944F216A89882309F4BECF662309F44A -:1046B000BBCF2091D003822F82958F7090E002971C -:1046C0000CF48ECF8091CB039091CC039A83898395 -:1046D0001B82DD82CC822E83CE0101967FCF809516 -:1046E00090958C0D9D1DACCFF62E662309F49CCFC2 -:1046F00075132EC034132CC02091D00320FD1FC091 -:10470000822F82958F70D9F0D80115962C9315972A -:104710008F3049F08F5F982F9295907F822F8F7006 -:10472000892B15968C93C8010E94931D86E0F80191 -:10473000ABECB3E001900D928A95E1F793CF86E060 -:10474000F801ABECB3E001900D928A95E1F72DC032 -:104750004D875E878D859E850E944F21811140CFB8 -:104760008091D00381608093D003C8010E94931D83 -:104770001CC0662309F458CF4D875E878D859E85C2 -:104780000E944F21882309F44FCF2ACF811148CFAF -:104790000CC0243031050CF047CF9F7009F440CF96 -:1047A000F8019581907F09F03BCF8F2D62960FB66F -:1047B000F894DEBF0FBECDBFDF91CF911F910F9157 -:1047C000FF90EF90DF90CF9008951F93CF93DF93EA -:1047D000CDB7DEB72C970FB6F894DEBF0FBECDBFB6 -:1047E0004F83588769877A878B879C87CE01079686 -:1047F0000E941E22882369F08F8198852A853B8537 -:10480000232BF1F19F3F09F063C08F3F09F060C097 -:1048100037C086E0FE013796DE01119601900D92B9 -:104820008A95E1F76F817885EA85FB85309741F1BC -:104830007F3F11F46F3F21F120919A0330E0C901CD -:104840000196877099274091990350E08417950746 -:1048500009F447C069837A83FD83EC8396E0929FD5 -:10486000D001939FB00D1124A556BC4FFE01319687 -:1048700001900D929A95E1F780939A030E949421FA -:1048800016E08091990390919A038917C1F1189FBE -:10489000C001112485569C4F0E941E22882379F165 -:1048A000E09199031E9FF0011124E556FC4F4081D1 -:1048B000518162817381848195810E9484218091DC -:1048C000990390E001968770992780939903D9CF37 -:1048D0004F81588569857A858B859C850E948421C6 -:1048E000CFCF0E944B2110929A0310929903EBECC8 -:1048F000F3E086E0DF011D928A95E9F7C1CF2C969F -:104900000FB6F894DEBF0FBECDBFDF91CF911F91E0 -:104910000895EF92FF920F931F93CF93DF938C0133 -:10492000009709F46CC0F12CEE24E394E801219681 -:10493000F8018491843740F4843008F051C081300C -:1049400081F0823019F15BC0853709F444C0A8F1C9 -:104950009CE7980F903708F052C08F770E94361D61 -:1049600041C00E5F1F4FFE01C49180E28C0F883062 -:1049700048F4C7708E2D01C0880FCA95EAF70E94CF -:10498000342714C08C2F0E946E1C2DC00E5F1F4F49 -:10499000FE01C49180E28C0F883058F4C7708E2DD0 -:1049A00001C0880FCA95EAF70E943A270E945B2748 -:1049B0001AC08C2F0E94361D16C00E5F1F4FFE01BD -:1049C000C491CC2381F08FE99FE00197F1F700C0FB -:1049D0000000C150F6CF0E5F1F4FFE01F49003C0E0 -:1049E0000E946E1C8E018F2D882309F49FCFEFE962 -:1049F000FFE03197F1F700C000008150F5CFDF9163 -:104A0000CF911F910F91FF90EF90089508956093BB -:104A1000D5037093D6038093D7039093D8030C9457 -:104A200037210F931F930091D5031091D603209146 -:104A3000D7033091D803DC01CB01802B912BA22B23 -:104A4000B32B8093D5039093D603A093D703B09351 -:104A5000D8031F910F910C9437210F931F9300914E -:104A6000D5031091D6032091D7033091D803DC01F0 -:104A7000CB0180239123A223B3238093D50390936A -:104A8000D603A093D703B093D8031F910F910C9432 -:104A900037210F931F930091D5031091D6032091D6 -:104AA000D7033091D803DC01CB0180279127A227BF -:104AB000B3278093D5039093D603A093D703B093E5 -:104AC000D8031F910F910C9437211092D1031092AB -:104AD000D2031092D3031092D4030C94372141E0F7 -:104AE00050E060E070E004C0440F551F661F771F60 -:104AF0008A95D2F74093D1035093D2036093D303A6 -:104B00007093D4030C94372141E050E060E070E0F2 -:104B100004C0440F551F661F771F8A95D2F78091F6 -:104B2000D1039091D203A091D303B091D403482B29 -:104B3000592B6A2B7B2B4093D1035093D203609364 -:104B4000D3037093D4030C94372141E050E060E02C -:104B500070E004C0440F551F661F771F8A95D2F777 -:104B600040955095609570958091D1039091D203B6 -:104B7000A091D303B091D403482359236A237B2304 -:104B80004093D1035093D2036093D3037093D40323 -:104B90000C94372141E050E060E070E004C0440F25 -:104BA000551F661F771F8A95D2F78091D103909188 -:104BB000D203A091D303B091D403482759276A2781 -:104BC0007B274093D1035093D2036093D303709318 -:104BD000D4030C9437210F931F930091D1031091AC -:104BE000D2032091D3033091D403DC01CB01802B7D -:104BF000912BA22BB32B8093D1039093D203A0933C -:104C0000D303B093D4031F910F910C9437210F93CA -:104C10001F930091D1031091D2032091D3033091BF -:104C2000D403DC01CB0180239123A223B3238093FF -:104C3000D1039093D203A093D303B093D4031F91D5 -:104C40000F910C9437210F931F930091D103109172 -:104C5000D2032091D3033091D403DC01CB01802710 -:104C60009127A227B3278093D1039093D203A093D7 -:104C7000D303B093D4031F910F910C94372108955F -:104C8000CF92DF92EF92FF920F931F93CF93DF9318 -:104C90008C01C090D503D090D603E090D703F0905C -:104CA000D8038091D1039091D203A091D303B09106 -:104CB000D403C82AD92AEA2AFB2ACFE1D0E0D701B7 -:104CC000C6010C2E04C0B695A795979587950A94B2 -:104CD000D2F780FF06C0B8018C2F0E94F709019718 -:104CE00021F4219760F780E001C08C2FDF91CF91F4 -:104CF0001F910F91FF90EF90DF90CF900895CF9389 -:104D0000DF93EC010E944026BE010E94F709DF916B -:104D1000CF910895CB010E947F260895909186023D -:104D2000992321F090918702911109C02091880266 -:104D300030918902F90132969FEF40E01FC0982F11 -:104D40009695969596959F3050F5E0918802F09152 -:104D50008902E90FF11D877021E030E0A90102C04E -:104D6000440F551F8A95E2F7CA019181892B8183EF -:104D700008959F3F39F04F5F4E3041F051915813E5 -:104D8000F8CF0DC05111F7CF942FF5CF9F3F39F0D9 -:104D9000F901E90FF11D97FDFA95828308950895B1 -:104DA00090918602992321F090918702911109C078 -:104DB0002091880230918902F9013296205F3F4F9D -:104DC0001FC0982F9695969596959F30F0F4E09198 -:104DD0008802F0918902E90FF11D877021E030E02F -:104DE000A90102C0440F551F8A95E2F7CA018095B8 -:104DF00091818923818308953196E217F30729F081 -:104E000090819813F9CF1082F7CF089581E090E058 -:104E1000E0918802F0918902E80FF91F1082019653 -:104E200080319105A9F708959091EC03892B809327 -:104E3000EC03089580959091EC0389238093EC0313 -:104E400008951092EC0308959091EB03892B8093C1 -:104E5000EB03089580959091EB0389238093EB03F6 -:104E600008951092EB0308959091EA03892B8093A3 -:104E7000EA03089580959091EA0389238093EA03D9 -:104E800008951092EA0308958093D903089510922B -:104E9000D90308958091880290918902FC0131968E -:104EA0009C01205F3F4F80E0919191118F5FE2174D -:104EB000F307D1F70895E0918802F091890280917B -:104EC000EC038083E0918802F091890290818091C7 -:104ED000EB03892B8083E0918802F0918902908115 -:104EE0008091EA03892B80838091D903882361F024 -:104EF000E0918802F09189029081892B80830E9441 -:104F00004A2781111092D9038091880290918902D9 -:104F10000C943A1B80910E04843039F11092EE0308 -:104F200020E488E190E00FB6F894A89580936000A3 -:104F30000FBE2093600080E00E94540580E00E9434 -:104F4000D20A83B7817F846083BF83B7816083BFC8 -:104F50007894889583B78E7F83BF88E10FB6F894E5 -:104F600080936000109260000FBE08950895089528 -:104F7000CF9380E00E9454050E94B6270E94890CBE -:104F80000E94B727C0E08C2F0E94D20D892B29F4F4 -:104F9000CF5FC430C1F780E001C081E0CF910895B8 -:104FA0000E944B2180E00E9454050E94452D0E94E2 -:104FB0002E1B0C94D20A1F920F920FB60F9211243F -:104FC0008F939F93AF93BF938091EE03811113C092 -:104FD0008091EF039091F003A091F103B091F2035F -:104FE0004196A11DB11D8093EF039093F003A09310 -:104FF000F103B093F203BF91AF919F918F910F9006 -:105000000FBE0F901F90189582E084BD93E095BD70 -:105010009AEF97BD80936E0008952FB7F894809112 -:10502000EF039091F003A091F103B091F2032FBF31 -:105030000895CF92DF92EF92FF920F931F932FB7B5 -:10504000F8944091EF035091F0036091F103709157 -:10505000F2032FBF6A017B01EE24FF248C0120E0C4 -:1050600030E0C016D106E206F30610F441505109B3 -:105070009A01281B390BC9011F910F91FF90EF90E6 -:10508000DF90CF9008951F920F920FB60F921124C8 -:105090008F939F93AF93BF938091EF039091F00311 -:1050A000A091F103B091F2030196A11DB11D80936F -:1050B000EF039093F003A093F103B093F203BF9139 -:1050C000AF919F918F910F900FBE0F901F901895E9 -:1050D0000E942B18F8942FEF87EA91E62150804028 -:1050E0009040E1F700C0000087E090EBDC01809386 -:1050F000190490931A04A0931B04B0931C049CE021 -:1051000088E10FB6F894A895809360000FBE909345 -:105110006000FFCF0E94C928811102C00E94A5280B -:105120000E94D4288093ED030E94E1288093170405 -:1051300087FB882780F9809387020E94D828682FF0 -:1051400070E080E090E00C9407256DEE7EEF80E04B -:1051500090E00E94AA3160E082E090E00E949831E5 -:1051600060E083E090E00E94983160E084E090E0AD -:105170000E94983160E085E090E00E94983160E004 -:1051800086E090E00E9498316FEF87E090E00C9409 -:10519000983180E090E00E94923121E08D3E9E4F58 -:1051A00009F020E0822F089582E090E00C948A318B -:1051B00083E090E00C948A31682F83E090E00C94B7 -:1051C000983184E090E00C948A31682F84E090E07C -:1051D0000C94983186E090E00C948A31682F86E038 -:1051E00090E00C94983187E090E00C948A31682F1D -:1051F00087E090E00C9498318091F50380FF0BC01C -:1052000060918D0285E0689FB001112475956795C6 -:10521000759567952BC081FF09C060918D0285E06F -:10522000689FB00111247595679520C082FF07C063 -:1052300060918D0285E0689FB001112417C09091A4 -:10524000F6039923D1F060918C02961788F720918C -:105250008D0285E0289F90011124929FA001939FC9 -:10526000500D112470E0CA010E9470316038710540 -:1052700040F46115710539F002C065E070E0862FD9 -:1052800008958FE7089581E008958091F50380FFE8 -:1052900008C060918B0270E075956795759567956C -:1052A00021C081FF06C060918B0270E07595679503 -:1052B00019C082FF04C060918B0270E010C0909111 -:1052C000F6039923C1F060918A029617A0F78091A6 -:1052D0008B02899FC001112470E00E9470316038F8 -:1052E000710528F46115710521F0862F08958FE767 -:1052F000089581E0089561E070E0F4CF803F21F4EB -:105300000E94FC28819504C0813F29F40E94FC285A -:105310008093F9030895823F21F40E94FC2881952F -:1053200004C0833F29F40E94FC288093F803089569 -:10533000893F19F40E94452905C08A3F31F40E9433 -:10534000452981958093FA0308958B3F21F40E94AB -:105350004529819504C08C3F29F40E9445298093FA -:10536000FB030895843F21F48091F703816017C007 -:10537000853F21F48091F703826011C0863F21F4BC -:105380008091F70384600BC0873F21F48091F7037D -:10539000886005C0883F31F48091F7038061809375 -:1053A000F70308958D3F21F48091F50381600BC0D0 -:1053B0008E3F21F48091F503826005C08F3F29F470 -:1053C0008091F50384608093F5030895803F39F45C -:1053D0008091F90387FF6CC01092F90369C0813F87 -:1053E00029F48091F9031816BCF362C09091F80378 -:1053F000823F29F497FF5CC01092F80359C0833FA5 -:1054000019F41916CCF354C0893F41F48091FA0382 -:1054100018160CF04DC01092FA034AC08A3F29F4C6 -:105420008091FA0387FF44C0F6CF8B3F39F4809117 -:10543000FB0387FF3DC01092FB033AC08C3F29F469 -:105440008091FB031816BCF333C0843F21F4809194 -:10545000F7038E7F17C0853F21F48091F7038D7F7E -:1054600011C0863F21F48091F7038B7F0BC0873FEB -:1054700021F48091F703877F05C0883F31F4809144 -:10548000F7038F7E8093F70313C08D3F21F4809143 -:10549000F5038E7F0BC08E3F21F48091F5038D7F45 -:1054A00005C08F3F29F48091F5038B7F8093F5032E -:1054B0008091F80381110EC08091F90381110AC017 -:1054C0008091FA03811106C08091FB03811102C013 -:1054D0001092F603089587EF93E00E94451B0E9407 -:1054E0000D289093F4038093F30308951F93CF93B3 -:1054F000DF938091F3039091F4030E941928AC018B -:105500009091F603992321F020918E0230E006C09D -:1055100020918F028AE0289F90011124421753079F -:1055200008F486C08091F803C091F903D091FA0382 -:105530001091FB03811107C0C11176C0D11174C055 -:10554000111172C075C09F3F19F09F5F9093F603D1 -:10555000181624F40E94FC288093F8038091F80325 -:1055600087FF05C00E94FC2881958093F8031C16D4 -:1055700024F40E94FC288093F9038091F90387FFAB -:1055800005C00E94FC2881958093F9036091F8037F -:10559000662339F1C091F903CC2319F1772767FD10 -:1055A0007095872F972F0E94E02E23E333E343E388 -:1055B0005FE30E94942F0E94AD2E6093F8036C2F3E -:1055C000772767FD7095872F972F0E94E02E23E3A2 -:1055D00033E343E35FE30E94942F0E94AD2E609378 -:1055E000F9031D1624F40E9445298093FA03809143 -:1055F000FA0387FF05C00E94452981958093FA032D -:10560000111624F40E9445298093FB038091FB032B -:1056100087FF05C00E94452981958093FB03DF9198 -:10562000CF911F910C946B2A9F3F09F08ECF96CF9C -:10563000DF91CF911F910895E7EFF3E085E0DF015F -:105640001D928A95E9F71092F6031092F5030895DA -:10565000833081F128F4813059F08230D1F00895FF -:10566000853009F449C0B8F1863009F456C0089570 -:1056700080918F02262F30E0280F311D2F3F3105FA -:1056800024F4680F60938F0208958FEF80938F0248 -:10569000089580918E02262F30E0280F311D2F3F74 -:1056A000310524F4680F60938E0208958FEF809384 -:1056B0008E02089580918D02262F30E0280F311D33 -:1056C0002F3F310524F4680F60938D0208958FEF0A -:1056D00080938D02089580918C02262F30E0280F50 -:1056E000311D2F3F310524F4680F60938C0208951B -:1056F0008FEF80938C02089580918B02262F30E0EB -:10570000280F311D2F3F310524F4680F60938B0261 -:1057100008958FEF80938B02089580918A02262F3F +:104260000F91FF90EF90DF90CF90BF900C94790763 +:1042700026960FB6F894DEBF0FBECDBFDF91CF916B +:104280001F910F91FF90EF90DF90CF90BF90089516 +:104290000E9442270E9452270E9417270E946C27E3 +:1042A0000E942D2B0E947C2A80E090E00E94611BDE +:1042B00080E090E00C94771B0E9432270C944821F8 +:1042C0000E949026292F22952F7030E02C30310546 +:1042D0004CF42A3031056CF422503109223031057A +:1042E00088F407C02C30310549F02F30310531F00A +:1042F00009C0803E48F0803F29F406C093FB882720 +:1043000080F9089580E0089581E00895CF93DF93C8 +:1043100000D000D01F92CDB7DEB70F900F900F9056 +:104320000F900F90DF91CF910895CF93DF9300D03E +:1043300000D000D0CDB7DEB726960FB6F894DEBF1A +:104340000FBECDBFDF91CF9108951F93CF93DF9321 +:10435000C091E90316E08091EA03C81799F0D0E014 +:104360001C9FF0011D9FF00D1124E551FC4F408171 +:10437000518162817381848195810E94952121966A +:10438000C770E9CFDF91CF911F91089540911B0431 +:1043900050911C0460911D0470911E0480911F04B3 +:1043A000909120040C9495218091200482958F7027 +:1043B00009F054C080911D04882309F44FC08091F6 +:1043C000E903A091EA0360911B0470911C044091E1 +:1043D0001E0450911F04B6E08A1709F43FC090E014 +:1043E00041155105C1F17F3F11F46F3FA1F1B89F15 +:1043F000F001B99FF00D1124E551FC4F218172139A +:104400002AC02081621327C02281211124C0238168 +:1044100034812417350710F421503109241B350B42 +:10442000283C3105C0F4209120042F702061209396 +:10443000200426E0289FF001299FF00D1124E0516F +:10444000FC4F80818F70806180838BE194E00E94BB +:10445000A41D0C94A52101968770BECF0895CF921C +:10446000DF92EF92FF920F931F93CF93DF93CDB71D +:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA +:1044800085E0F801DE011D9601900D928A95E1F715 +:10449000D8014C9111965C91119712966C911297DC +:1044A0001396CD90DC90149730911B0470911C04EE +:1044B00080911E0490911F04009709F46BC17F3F07 +:1044C00019F43F3F09F466C1E0901D04EE2009F4A1 +:1044D000C0C020912004C816D90628F0F601E81BB8 +:1044E000F90BCF0104C0809590958C0D9D1DFF2484 +:1044F000F394883C910578F0F12C207F09F0C6C038 +:104500007C2DD98AC88A89890E9486218BE194E012 +:104510000E94A41DB1C0822F807F09F046C0751390 +:1045200014C0341312C0611110C02F702061209389 +:1045300020040E94C6218BE194E00E94A41D80917A +:104540002004D80115968C932EC0CD2819F15F3F19 +:1045500011F44F3FF9F0F62E61111CC08091E90370 +:104560002091EA0336E0821709F45AC090E0389FA0 +:10457000F001399FF00D1124E551FC4F7181571363 +:1045800006C07081471303C07281711103C0019688 +:104590008770E9CFF62E662309F418C180912004B4 +:1045A000816080932004F12C11C1751308C034136D +:1045B00006C0611104C080912004D801C3C04D879A +:1045C0005E878D859E856A8B0E9460216A8988231B +:1045D000E1F16623D1F120912004822F82958F7022 +:1045E00090E0029774F080911B0490911C049887CE +:1045F0008F831986DB86CA862C87CE0107960E9498 +:10460000A41D86E0F801ABE1B4E001900D928A951B +:10461000E1F70E94D4210E94C621FF24F394D6C062 +:104620004D875E878D859E850E949026292F229535 +:104630002F7030E0223031050CF0BCC09F7009F0C3 +:10464000B6C0805E883008F4C1C0C8010E94A41DB5 +:10465000E4CFC816D90608F453C0F601E81BF90BDD +:10466000CF01883C910508F450C0F12C7C2DD98AEB +:10467000C88A89890E948621EBE1F4E086E0DF01A7 +:104680001D928A95E9F70E94C621A0C0751314C037 +:10469000341312C0611110C080912004F801858389 +:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249 +:1046B0008A95E9F7FE2C8AC04D875E878D859E8599 +:1046C0006A8B0E9460216A89882309F4BECF662321 +:1046D00009F4BBCF20912004822F82958F7090E047 +:1046E00002970CF48ECF80911B0490911C049A8346 +:1046F00089831B82DD82CC822E83CE0101967FCFFF +:10470000809590958C0D9D1DACCFF62E662309F4F7 +:104710009CCF75132EC034132CC02091200420FD93 +:104720001FC0822F82958F70D9F0D80115962C93D7 +:1047300015978F3049F08F5F982F9295907F822F39 +:104740008F70892B15968C93C8010E94A41D86E05A +:10475000F801ABE1B4E001900D928A95E1F793CFB7 +:1047600086E0F801ABE1B4E001900D928A95E1F7A3 +:104770002DC04D875E878D859E850E9460218111A9 +:1047800040CF80912004816080932004C8010E9462 +:10479000A41D1CC0662309F458CF4D875E878D8504 +:1047A0009E850E946021882309F44FCF2ACF811172 +:1047B00048CF0CC0243031050CF047CF9F7009F46E +:1047C00040CFF8019581907F09F03BCF8F2D629605 +:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112 +:1047E0000F91FF90EF90DF90CF9008951F93CF939C +:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0 +:10480000CDBF4F83588769877A878B879C87CE0176 +:1048100007960E942F22882369F08F8198852A8528 +:104820003B85232BF1F19F3F09F063C08F3F09F0D7 +:1048300060C037C086E0FE013796DE011196019018 +:104840000D928A95E1F76F817885EA85FB8530972F +:1048500041F17F3F11F46F3F21F12091EA0330E0F5 +:10486000C9010196877099274091E90350E08417A8 +:10487000950709F447C069837A83FD83EC8396E04A +:10488000929FD001939FB00D1124A551BC4FFE0102 +:10489000319601900D929A95E1F78093EA030E9478 +:1048A000A52116E08091E9039091EA038917C1F1EF +:1048B000189FC001112485519C4F0E942F228823EC +:1048C00079F1E091E9031E9FF0011124E551FC4FBD +:1048D0004081518162817381848195810E949521FB +:1048E0008091E90390E00196877099278093E9030E +:1048F000D9CF4F81588569857A858B859C850E94A3 +:104900009521CFCF0E945C211092EA031092E90317 +:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73 +:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE +:104930001F910895EF92FF920F931F93CF93DF93F0 +:104940008C01009709F46CC0F12CEE24E394E8018B +:104950002196F8018491843740F4843008F051C0E6 +:10496000813081F0823019F15BC0853709F444C091 +:10497000A8F19CE7980F903708F052C08F770E94FB +:10498000471D41C00E5F1F4FFE01C49180E28C0F96 +:10499000883048F4C7708E2D01C0880FCA95EAF799 +:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3 +:1049B0001F4FFE01C49180E28C0F883058F4C770FD +:1049C0008E2D01C0880FCA95EAF70E944B270E94DE +:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8 +:1049E000FE01C491CC2381F08FE99FE00197F1F79C +:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3 +:104A000003C00E947F1C8E018F2D882309F49FCF45 +:104A1000EFE9FFE03197F1F700C000008150F5CFDA +:104A2000DF91CF911F910F91FF90EF90089508951E +:104A300060932504709326048093270490932804A0 +:104A40000C9448210F931F93009125041091260484 +:104A50002091270430912804DC01CB01802B912B7D +:104A6000A22BB32B8093250490932604A0932704B4 +:104A7000B09328041F910F910C9448210F931F931A +:104A800000912504109126042091270430912804D8 +:104A9000DC01CB0180239123A223B323809325043F +:104AA00090932604A0932704B09328041F910F919C +:104AB0000C9448210F931F93009125041091260414 +:104AC0002091270430912804DC01CB018027912715 +:104AD000A227B3278093250490932604A09327044C +:104AE000B09328041F910F910C9448211092210437 +:104AF0001092220410922304109224040C94482152 +:104B000041E050E060E070E004C0440F551F661FB4 +:104B1000771F8A95D2F74093210450932204609323 +:104B20002304709324040C94482141E050E060E099 +:104B300070E004C0440F551F661F771F8A95D2F797 +:104B40008091210490912204A0912304B091240427 +:104B5000482B592B6A2B7B2B409321045093220422 +:104B600060932304709324040C94482141E050E0A6 +:104B700060E070E004C0440F551F661F771F8A95E0 +:104B8000D2F7409550956095709580912104909151 +:104B90002204A0912304B0912404482359236A23BA +:104BA0007B23409321045093220460932304709349 +:104BB00024040C94482141E050E060E070E004C01F +:104BC000440F551F661F771F8A95D2F780912104E5 +:104BD00090912204A0912304B091240448275927DE +:104BE0006A277B2740932104509322046093230477 +:104BF000709324040C9448210F931F930091210477 +:104C0000109122042091230430912404DC01CB0173 +:104C1000802B912BA22BB32B809321049093220401 +:104C2000A0932304B09324041F910F910C94482166 +:104C30000F931F93009121041091220420912304CB +:104C400030912404DC01CB0180239123A223B323E0 +:104C50008093210490932204A0932304B09324040E +:104C60001F910F910C9448210F931F9300912104E1 +:104C7000109122042091230430912404DC01CB0103 +:104C800080279127A227B3278093210490932204A1 +:104C9000A0932304B09324041F910F910C944821F6 +:104CA0000895CF92DF92EF92FF920F931F93CF93CD +:104CB000DF938C01C0902504D0902604E090270457 +:104CC000F09028048091210490912204A091230463 +:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD +:104CE000D701C6010C2E04C0B695A7959795879558 +:104CF0000A94D2F780FF06C0B8018C2F0E94D30916 +:104D0000019721F4219760F780E001C08C2FDF919B +:104D1000CF911F910F91FF90EF90DF90CF9008956A +:104D2000CF93DF93EC010E945126BE010E94D3096C +:104D3000DF91CF910895CB010E9490260895909124 +:104D40008402992321F090918502911109C020914C +:104D5000860230918702F90132969FEF40E01FC032 +:104D6000982F9695969596959F3050F5E0918602EE +:104D7000F0918702E90FF11D877021E030E0A90171 +:104D800002C0440F551F8A95E2F7CA019181892B11 +:104D9000818308959F3F39F04F5F4E3041F051912C +:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77 +:104DB00039F0F901E90FF11D97FDFA958283089505 +:104DC000089590918402992321F090918502911188 +:104DD00009C02091860230918702F9013296205F46 +:104DE0003F4F1FC0982F9695969596959F30F0F45B +:104DF000E0918602F0918702E90FF11D877021E0B2 +:104E000030E0A90102C0440F551F8A95E2F7CA019C +:104E1000809591818923818308953196E217F30764 +:104E200029F090819813F9CF1082F7CF089581E08F +:104E300090E0E0918602F0918702E80FF91F10825E +:104E4000019680319105A9F7089590913C04892B32 +:104E500080933C040895809590913C04892380932D +:104E60003C04089510923C04089590913B04892BD2 +:104E700080933B040895809590913B04892380930F +:104E80003B04089510923B04089590913A04892BB5 +:104E900080933A040895809590913A0489238093F1 +:104EA0003A04089510923A040895809329040895CD +:104EB0001092290408958091860290918702FC0146 +:104EC00031969C01205F3F4F80E0919191118F5F5F +:104ED000E217F307D1F70895E0918602F091870277 +:104EE00080913C048083E0918602F091870290815A +:104EF00080913B04892B8083E0918602F0918702A8 +:104F0000908180913A04892B8083809129048823A1 +:104F100061F0E0918602F09187029081892B808375 +:104F20000E945B2781111092290480918602909142 +:104F300087020C944B1B80915E04843039F11092EF +:104F40003E0420E488E190E00FB6F894A8958093A1 +:104F500060000FBE2093600080E00E94300580E07A +:104F60000E94AE0A83B7817F846083BF83B781606C +:104F700083BF7894889583B78E7F83BF88E10FB60F +:104F8000F89480936000109260000FBE0895089519 +:104F90000895CF9380E00E9430050E94C7270E94A9 +:104FA000650C0E94C827C0E08C2F0E94AE0D892B93 +:104FB00029F4CF5FC430C1F780E001C081E0CF9118 +:104FC00008950E945C2180E00E9430050E94562DC9 +:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5 +:104FE00011248F939F93AF93BF9380913E048111BF +:104FF00013C080913F0490914004A0914104B0916E +:1050000042044196A11DB11D80933F04909340043A +:10501000A0934104B0934204BF91AF919F918F91AF +:105020000F900FBE0F901F90189582E084BD93E003 +:1050300095BD9AEF97BD80936E0008952FB7F894B1 +:1050400080913F0490914004A0914104B0914204AA +:105050002FBF0895CF92DF92EF92FF920F931F938D +:105060002FB7F89440913F0450914004609141045F +:10507000709142042FBF6A017B01EE24FF248C0152 +:1050800020E030E0C016D106E206F30610F44150ED +:1050900051099A01281B390BC9011F910F91FF90EB +:1050A000EF90DF90CF9008951F920F920FB60F925E +:1050B00011248F939F93AF93BF9380913F0490915E +:1050C0004004A0914104B09142040196A11DB11D7C +:1050D00080933F0490934004A0934104B093420412 +:1050E000BF91AF919F918F910F900FBE0F901F9026 +:1050F00018950E943C18F8942FEF87EA91E621500A +:1051000080409040E1F700C0000087E090EBDC01B8 +:105110008093690490936A04A0936B04B0936C0429 +:105120009CE088E10FB6F894A895809360000FBECC +:1051300090936000FFCF0E94DA28811102C00E9484 +:10514000B6280E94E52880933D040E94F2288093AF +:10515000670487FB882780F9809385020E94E928ED +:10516000682F70E080E090E00C9418256DEE7EEFE3 +:1051700080E090E00E94093260E082E090E00E94CE +:10518000F73160E083E090E00E94F73160E084E076 +:1051900090E00E94F73160E085E090E00E94F731F6 +:1051A00060E086E090E00E94F7316FEF87E090E0EA +:1051B0000C94F73180E090E00E94F13121E08D3EC7 +:1051C0009E4F09F020E0822F089582E090E00C9439 +:1051D000E93183E090E00C94E931682F83E090E0BE +:1051E0000C94F73184E090E00C94E931682F84E06E +:1051F00090E00C94F73186E090E00C94E931682F50 +:1052000086E090E00C94F73187E090E00C94E9316F +:10521000682F87E090E00C94F7318091450480FF7F +:105220000BC060918B0285E0689FB00111247595D9 +:105230006795759567952BC081FF09C060918B02BA +:1052400085E0689FB00111247595679520C082FFA5 +:1052500007C060918B0285E0689FB001112417C0E0 +:10526000909146049923D1F060918A02961788F7AD +:1052700020918B0285E0289F90011124929FA0012C +:10528000939F500D112470E0CA010E94CF31603805 +:10529000710540F46115710539F002C065E070E0F8 +:1052A000862F08958FE7089581E008958091450441 +:1052B00080FF08C06091890270E0759567957595CB +:1052C000679521C081FF06C06091890270E07595E5 +:1052D000679519C082FF04C06091890270E010C018 +:1052E000909146049923C1F0609188029617A0F727 +:1052F00080918902899FC001112470E00E94CF3102 +:105300006038710528F46115710521F0862F089524 +:105310008FE7089581E0089561E070E0F4CF803F69 +:1053200021F40E940D29819504C0813F29F40E9437 +:105330000D29809349040895823F21F40E940D298C +:10534000819504C0833F29F40E940D29809348046D +:105350000895893F19F40E94562905C08A3F31F407 +:105360000E945629819580934A0408958B3F21F429 +:105370000E945629819504C08C3F29F40E94562929 +:1053800080934B040895843F21F480914704816009 +:1053900017C0853F21F480914704826011C0863F89 +:1053A00021F48091470484600BC0873F21F48091F1 +:1053B0004704886005C0883F31F4809147048061CC +:1053C0008093470408958D3F21F4809145048160C6 +:1053D0000BC08E3F21F480914504826005C08F3F51 +:1053E00029F4809145048460809345040895803FAA +:1053F00039F48091490487FF6CC01092490469C058 +:10540000813F29F4809149041816BCF362C0909141 +:105410004804823F29F497FF5CC01092480459C0A9 +:10542000833F19F41916CCF354C0893F41F480919D +:105430004A0418160CF04DC010924A044AC08A3F24 +:1054400029F480914A0487FF44C0F6CF8B3F39F49A +:1054500080914B0487FF3DC010924B043AC08C3FB3 +:1054600029F480914B041816BCF333C0843F21F417 +:10547000809147048E7F17C0853F21F480914704B7 +:105480008D7F11C0863F21F4809147048B7F0BC034 +:10549000873F21F480914704877F05C0883F31F41E +:1054A000809147048F7E8093470413C08D3F21F481 +:1054B000809145048E7F0BC08E3F21F4809145047E +:1054C0008D7F05C08F3F29F4809145048B7F8093A9 +:1054D00045048091480481110EC0809149048111D6 +:1054E0000AC080914A04811106C080914B04811149 +:1054F00002C010924604089587E494E00E94561B6F +:105500000E941E28909344048093430408951F939F +:10551000CF93DF9380914304909144040E942A2802 +:10552000AC0190914604992321F020918C0230E047 +:1055300006C020918D028AE0289F90011124421715 +:10554000530708F486C080914804C0914904D09163 +:105550004A0410914B04811107C0C11176C0D111CA +:1055600074C0111172C075C09F3F19F09F5F909376 +:105570004604181624F40E940D2980934804809153 +:10558000480487FF05C00E940D2981958093480437 +:105590001C1624F40E940D2980934904809149042B +:1055A00087FF05C00E940D29819580934904609171 +:1055B0004804662339F1C0914904CC2319F17727B7 +:1055C00067FD7095872F972F0E94F12E23E333E319 +:1055D00043E35FE30E9401300E94BE2E60934804C3 +:1055E0006C2F772767FD7095872F972F0E94F12EDC +:1055F00023E333E343E35FE30E9401300E94BE2EC6 +:10560000609349041D1624F40E94562980934A048D +:1056100080914A0487FF05C00E9456298195809396 +:105620004A04111624F40E94562980934B04809159 +:105630004B0487FF05C00E945629819580934B0437 +:10564000DF91CF911F910C947C2A9F3F09F08ECF60 +:1056500096CFDF91CF911F910895E7E4F4E085E0C4 +:10566000DF011D928A95E9F71092460410924504D5 +:105670000895833081F128F4813059F08230D1F0DF +:105680000895853009F449C0B8F1863009F456C050 +:10569000089580918D02262F30E0280F311D2F3F75 +:1056A000310524F4680F60938D0208958FEF809385 +:1056B0008D02089580918C02262F30E0280F311D35 +:1056C0002F3F310524F4680F60938C0208958FEF0B +:1056D00080938C02089580918B02262F30E0280F52 +:1056E000311D2F3F310524F4680F60938B0208951C +:1056F0008FEF80938B02089580918A02262F30E0ED +:10570000280F311D2F3F310524F4680F60938A0262 +:1057100008958FEF80938A02089580918902262F41 :1057200030E0280F311D2F3F310524F4680F6093BE -:105730008A0208958FEF80938A020895833011F1D1 -:1057400028F4813049F0823091F00895853081F15C -:1057500020F18630C1F1089580918F02681720F4FE -:10576000861B80938F02089510928F020895809176 -:105770008E02681720F4861B80938E020895109283 -:105780008E02089580918D02681720F4861B809305 -:105790008D02089510928D02089580918C026817F1 -:1057A00020F4861B80938C02089510928C02089539 -:1057B00080918B02681720F4861B80938B020895DA -:1057C00010928B02089580918A02681720F4861B3C -:1057D00080938A02089510928A0208950F931F936E -:1057E000873208F048C08E3108F094C0803109F447 -:1057F0007EC008F5873009F468C068F4863009F087 -:10580000A4C08091ED03817F8E7F8093ED0381E0C2 -:105810008093FD039BC08B3009F490C08E3009F05B -:1058200094C08091ED0382FB222720F991E092271A -:1058300090FB82F965C0863109F480C060F4813143 -:1058400009F083C00E944B219091870281E0892753 -:105850008093870273C0893109F470C08B3109F0DD -:1058600074C08091ED0381FB222720F991E09227FB -:1058700090FB81F945C0883309F460C050F4893247 -:1058800009F45EC0853309F45BC0873209F458C05F -:105890005CC0833409F454C028F48A3308F455C03A -:1058A000895339C0883409F050C00E944B210E94AE -:1058B00090060FEF13ED20E3015010402040E1F778 -:1058C00000C000000E94682839C09091ED03892F24 -:1058D0008095817080FB90F929F096609860909394 -:1058E000ED0334C0997F977F9093ED0327C080919B -:1058F000ED0383FB222720F991E0922790FB83F9A7 -:105900008093ED039923D1F08091ED038160809322 -:10591000ED0314C08D5141E050E060E070E08A0179 -:105920009B0104C0000F111F221F331F8A95D2F75D -:10593000C901B8010E9407250E944B2181E006C0E1 -:1059400061E070E080E090E0F5CF80E01F910F9182 -:10595000089580E0089580E00895CF93C82F809146 -:10596000FD03813069F018F08230C9F184C0E09104 -:105970008802F09189028081823209F07EC007C0DE -:10598000E0918802F09189028081823261F48C2F4B -:105990000E94A92C811104C08C2F0E94EE2B1DC0E7 -:1059A00081E090E01AC08C2F0E94AB2C811114C0B2 -:1059B000C43179F048F4CB3079F0C03109F061C0DE -:1059C00082E08093FD0308C0C93219F0C83321F08A -:1059D00058C01092FD0355C081E0817054C0C93297 -:1059E00091F120F5C43179F1B0F4C73009F047C026 -:1059F0008EE180938F0282E380938E028AE080930F -:105A00008D0284E180938C0288E080938B0288E28F -:105A100080938A0234C0CE51C63088F5EC2FF0E076 -:105A2000E65FFC4F80818093FC0329C0CE34E9F00F -:105A300020F4CB3421F56AE013C0C13579F0C235CA -:105A4000F1F461E00DC08091FC03882319F01092FD -:105A5000FC0315C081E08093FD0315C061E006C022 -:105A60008091FC030E94282B0AC06AE08091FC030D -:105A70000E949E2B04C01092FD0380E004C081E0D0 -:105A800002C080E0AACFCF9108950E94C928811159 -:105A900002C00E94A5280E94EA288093180480FF73 -:105AA00002C0869501C080E00C94540580911804D2 -:105AB000982F9695292F30E0233031054CF49F5FC5 -:105AC000990F8170892B8160809318040E94EE28C1 -:105AD0008091180486950C94540580911804982F91 -:105AE000969591F09158990F8170892B80931804A5 -:105AF0008E7F91E009F490E08091180490FB80F98A -:105B0000809318040E94EE288091180486950C94C6 -:105B1000540580911804982F909590FB80F98093FC -:105B200018040E94EE288091180480FF02C0869518 -:105B300001C080E00C94540590911804892F86953B -:105B40008F5F8F779170843028F4880F892B809332 -:105B5000180402C090931804809118048E7F91E07D -:105B600009F490E08091180490FB80F98093180468 -:105B70000E94EE288091180486950C94540520917B -:105B80001804922F96958927982F990F822F81704C -:105B9000892B809318048E7F91E009F490E0809126 -:105BA000180490FB80F9809318040E94EE288091DD -:105BB000180486950C9454055058BB27AA270ED07C -:105BC00075C166D130F06BD120F031F49F3F11F4F4 -:105BD0001EF45BC10EF4E095E7FB51C1E92F77D1CC -:105BE00080F3BA17620773078407950718F071F4FA -:105BF0009EF58FC10EF4E0950B2EBA2FA02D0B0150 -:105C0000B90190010C01CA01A0011124FF27591B01 -:105C100099F0593F50F4503E68F11A16F040A22F07 -:105C2000232F342F4427585FF3CF46953795279578 -:105C3000A795F0405395C9F77EF41F16BA0B620B77 -:105C4000730B840BBAF09150A1F0FF0FBB1F661FBE -:105C5000771F881FC2F70EC0BA0F621F731F841F01 -:105C600048F4879577956795B795F7959E3F08F027 -:105C7000B3CF9395880F08F09927EE0F97958795E6 -:105C80000895D9D008F481E008950CD00FC107D150 -:105C900040F0FED030F021F45F3F19F0F0C0511118 -:105CA00039C1F3C014D198F39923C9F35523B1F343 -:105CB000951B550BBB27AA2762177307840738F07B -:105CC0009F5F5F4F220F331F441FAA1FA9F333D0DA -:105CD0000E2E3AF0E0E830D091505040E695001C8E -:105CE000CAF729D0FE2F27D0660F771F881FBB1F4A -:105CF000261737074807AB07B0E809F0BB0B802D24 -:105D0000BF01FF2793585F4F2AF09E3F510568F06F -:105D1000B6C000C15F3FECF3983EDCF38695779503 -:105D20006795B795F7959F5FC9F7880F911D969571 -:105D3000879597F90895E1E0660F771F881FBB1FCD -:105D4000621773078407BA0720F0621B730B840B7A -:105D5000BA0BEE1F88F7E095089504D06894B1114E -:105D6000D9C00895BCD088F09F5790F0B92F9927DB -:105D7000B751A0F0D1F0660F771F881F991F1AF056 -:105D8000BA95C9F712C0B13081F0C3D0B1E008951F -:105D9000C0C0672F782F8827B85F39F0B93FCCF3A0 -:105DA000869577956795B395D9F73EF4909580954C -:105DB000709561957F4F8F4F9F4F0895E89409C06C -:105DC00097FB3EF490958095709561957F4F8F4F2E -:105DD0009F4F9923A9F0F92F96E9BB279395F69544 -:105DE000879577956795B795F111F8CFFAF4BB0FC2 -:105DF00011F460FF1BC06F5F7F4F8F4F9F4F16C026 -:105E0000882311F096E911C0772321F09EE8872FAF -:105E1000762F05C0662371F096E8862F70E060E06B -:105E20002AF09A95660F771F881FDAF7880F9695E4 -:105E3000879597F90895990F0008550FAA0BE0E888 -:105E4000FEEF16161706E807F907C0F0121613063C -:105E5000E407F50798F0621B730B840B950B39F47C -:105E60000A2661F0232B242B252B21F408950A26E2 -:105E700009F4A140A6958FEF811D811D089597F922 -:105E80009F6780E870E060E008959FEF80EC0895E0 -:105E900000240A9416161706180609060895002409 -:105EA0000A9412161306140605060895092E039483 -:105EB000000C11F4882352F0BB0F40F4BF2B11F4F7 -:105EC00060FF04C06F5F7F4F8F4F9F4F089557FD56 -:105ED0009058440F551F59F05F3F71F04795880F58 -:105EE00097FB991F61F09F3F79F0879508951216EF -:105EF00013061406551FF2CF4695F1DF08C016169B -:105F000017061806991FF1CF86957105610508944B -:105F10000895E894BB2766277727CB0197F9089562 -:105F20008ADF08F48FEF08950BD0C0CFB1DF28F0DF -:105F3000B6DF18F0952309F0A2CFA7CF1124EACF3E -:105F4000C6DFA0F3959FD1F3950F50E0551F629FD8 -:105F5000F001729FBB27F00DB11D639FAA27F00DC2 -:105F6000B11DAA1F649F6627B00DA11D661F829FE9 -:105F70002227B00DA11D621F739FB00DA11D621FCE -:105F8000839FA00D611D221F749F3327A00D611DEB -:105F9000231F849F600D211D822F762F6A2F1124CD -:105FA0009F5750408AF0E1F088234AF0EE0FFF1F20 -:105FB000BB1F661F771F881F91505040A9F79E3F57 -:105FC000510570F05CCFA6CF5F3FECF3983EDCF359 -:105FD000869577956795B795F795E7959F5FC1F794 -:105FE000FE2B880F911D9695879597F90895FA01D4 -:105FF000EE0FFF1F30962105310599F161157105EE -:1060000061F48038BFE39B0749F1689490388105BB -:1060100061F08038BFEF9B0741F0992342F5FF3FC5 -:10602000E1053105210511F1E8940894E795D901BE -:10603000AA2329F4AB2FBE2FF85FD0F310C0FF5F67 -:1060400070F4A695E0F7F73950F019F0FF3A38F4FC -:106050009F779F930CD00F9007FC905808953EF0C7 -:1060600014CF60E070E080E89FE308954FE79F77EA -:106070005F934F933F932F939ED02F913F914F91DA -:106080005F9152DF05C019F40EF0F9CE42CFFDCE7C -:1060900026DFC8F39638C0F707F80F92E8942BE391 -:1060A0003AEA48EB5FE74EDF0F920F920F924DB73F -:1060B0005EB70F92C0D0E4E4F1E016D04F915F914B -:1060C000EF91FF91E595EE1FFF1F49F0FE57E06845 -:1060D0004427EE0F441FFA95E1F74195550B32D056 -:1060E0000F9007FE26C00895DF93CF931F930F9361 -:1060F000FF92EF92DF927B018C01689405C0DA2E4B -:10610000EF011EDFFE01E894A5912591359145919F -:106110005591AEF3EF0162DDFE019701A801DA941B -:1061200079F7DF90EF90FF900F911F91CF91DF9162 -:1061300008959B01AC0160E070E080E89FE3A5CD8D -:106140009ECEACC0CCDEE8F39923D9F3940F511D59 -:10615000BBF39150504094F059F0882332F0660F11 -:10616000771F881F91505040C1F79E3F510544F75B -:10617000880F911D9695879597F908955F3FACF02C -:10618000983E9CF0BB27869577956795B79508F460 -:10619000B1609395C1F7BB0F58F711F460FFE8CFDA -:1061A0006F5F7F4F8F4F9F4FE3CFB4CE0EF076C01F -:1061B0006CCE689464CE93DEC8F39923D1F3C6F312 -:1061C000DF93CF931F930F93FF92C92FDD2788236F -:1061D0002AF02197660F771F881FDAF720E030E05A -:1061E00040E85FEB9FE3883920F0803E30F0219655 -:1061F0008F77E3DCECE6F1E003C0DFDCE9E9F1E016 -:1062000073DF8B01BE01EC01FB2E6F577109759591 -:10621000771F880B990BD4DD28E132E741E35FE378 -:106220008FDEAF2D9801AE01FF900F911F91CF919E -:10623000DF91D4DC3BCEFA01DC01AA0FBB1F9B012E -:10624000AC01BF5728F422273327442750781FC0BA -:10625000B75188F4AB2F0024469537952795011C3C -:10626000A395D2F3002069F0220F331F441FB3958A -:10627000DAF30DD0A1CC61307105A0E88A07B946E8 -:1062800030F49B01AC0166277727882790783096F9 -:1062900021F0208331834283538308959F3F31F05F -:1062A000915020F4879577956795B795880F911D44 -:1062B0009695879597F90895AA1BBB1B51E107C0D6 -:1062C000AA1FBB1FA617B70710F0A61BB70B881F86 -:1062D000991F5A95A9F780959095BC01CD01089515 -:1062E00097FB072E16F4009407D077FD09D00E9483 -:1062F0005C3107FC05D03EF4909581959F4F089541 -:10630000709561957F4F0895EE0FFF1F0590F491F2 -:10631000E02D0994F999FECF92BD81BDF89A992795 -:1063200080B50895A8E1B0E042E050E00C94B231AD -:10633000262FF999FECF92BD81BDF89A019700B43E -:10634000021639F01FBA20BD0FB6F894FA9AF99ADE -:106350000FBE08950196272F0E9499310C94983111 -:10636000DC01CB01FC01F999FECF06C0F2BDE1BD15 -:10637000F89A319600B40D9241505040B8F7089504 -:04638000F894FFCFBF -:1063840007000C52D02445000000410000DC44000A -:1063940000004152D0A4440000404100005C44008D -:1063A40000004148F17644000000415C978A4400B3 -:1063B4000000411FD592440000004152D0A4440083 -:1063C4000000415CFFB844000000410AA7CF44002C -:1063D4000000410000DC44000000410AA7CF440053 -:1063E4000000410000DC4400000041000000000007 -:1063F40000804000005C45000040410000000000B7 -:1064040000804052D02445000040410AA7CF4400F8 -:106414000000410000DC44000000410000000000D6 -:1064240000804052D024450000404100000000009C -:1064340000804000005C45000040410AA7CF4400B2 -:106444000000410000DC44000000410000000000A6 -:1064540000804052D024450000404100000000006C -:106464000080400AA74F45000040410AA7CF4400DE -:106474000000410000DC4400000041000000000076 -:1064840000804052D024450000004100000000007C -:106494000080405CFF38450000004100000000001F -:1064A40000804052D02445000000410AA7CF440098 -:1064B4000000410000DC4400000041000000000036 -:1064C40000804052D024450000804153D024450030 -:1064D40000404160970A450000004154D0A44400A4 -:1064E4000000410000DC440000004160970A4500C0 -:1064F40000A041050000003F0000C8423214C0144F -:106504009D14691435140101DA032808140A321E93 -:106514000000020004000500070009000B000C0045 -:106524000E001000110013001500170018001A00C7 -:106534001C001D001F002100230024002600280049 -:1065440029002B002D002F003000320034003500CC -:10655400370039003B00400045002500260061005B -:106564006000200037006400650066006700440096 -:106574004600240047003F4D3639BD0970093A09E9 -:1065840001099408AD08C608DF08010203040506E2 -:0465940007080900EB +:10573000890208958FEF80938902089580918802ED +:10574000262F30E0280F311D2F3F310524F4680F3C +:105750006093880208958FEF8093880208958330C4 +:1057600011F128F4813049F0823091F008958530AC +:1057700081F120F18630C1F1089580918D02681782 +:1057800020F4861B80938D02089510928D02089557 +:1057900080918C02681720F4861B80938C020895F8 +:1057A00010928C02089580918B02681720F4861B5A +:1057B00080938B02089510928B02089580918A0243 +:1057C000681720F4861B80938A02089510928A023B +:1057D000089580918902681720F4861B80938902BE +:1057E000089510928902089580918802681720F424 +:1057F000861B8093880208951092880208950F9363 +:105800001F93873208F048C08E3108F094C0803171 +:1058100009F47EC008F5873009F468C068F4863062 +:1058200009F0A4C080913D04817F8E7F80933D0468 +:1058300081E080934D049BC08B3009F490C08E3082 +:1058400009F094C080913D0482FB222720F991E069 +:10585000922790FB82F965C0863109F480C060F41C +:10586000813109F083C00E945C219091850281E022 +:1058700089278093850273C0893109F470C08B3108 +:1058800009F074C080913D0481FB222720F991E04A +:10589000922790FB81F945C0883309F460C050F429 +:1058A000893209F45EC0853309F45BC0873209F49C +:1058B00058C05CC0833409F454C028F48A3308F417 +:1058C00055C0895339C0883409F050C00E945C210A +:1058D0000E946C060FEF13ED20E3015010402040B2 +:1058E000E1F700C000000E94792839C090913D0482 +:1058F000892F8095817080FB90F929F096609860DF +:1059000090933D0434C0997F977F90933D0427C0C6 +:1059100080913D0483FB222720F991E0922790FBA0 +:1059200083F980933D049923D1F080913D048160F7 +:1059300080933D0414C08D5141E050E060E070E080 +:105940008A019B0104C0000F111F221F331F8A957B +:10595000D2F7C901B8010E9418250E945C2181E09C +:1059600006C061E070E080E090E0F5CF80E01F913C +:105970000F91089580E0089580E00895CF93C82F97 +:1059800080914D04813069F018F08230C9F184C0F3 +:10599000E0918602F09187028081823209F07EC018 +:1059A00007C0E0918602F09187028081823261F423 +:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7 +:1059C0001DC081E090E01AC08C2F0E94BC2C811178 +:1059D00014C0C43179F048F4CB3079F0C03109F00B +:1059E00061C082E080934D0408C0C93219F0C83309 +:1059F00021F058C010924D0455C081E0817054C010 +:105A0000C93291F120F5C43179F1B0F4C73009F011 +:105A100047C08EE180938D0282E380938C028AE0FE +:105A200080938B0284E180938A0288E080938902CC +:105A300088E28093880234C0CE51C63088F5EC2FBE +:105A4000F0E0E85AFC4F808180934C0429C0CE34AA +:105A5000E9F020F4CB3421F56AE013C0C13579F0C8 +:105A6000C235F1F461E00DC080914C04882319F037 +:105A700010924C0415C081E080934D0415C061E084 +:105A800006C080914C040E94392B0AC06AE08091C4 +:105A90004C040E94AF2B04C010924D0480E004C05F +:105AA00081E002C080E0AACFCF9108950E94DA2859 +:105AB000811102C00E94B6280E94FB2880936804CE +:105AC00080FF02C0869501C080E00C943005809173 +:105AD0006804982F9695292F30E0233031054CF437 +:105AE0009F5F990F8170892B8160809368040E9469 +:105AF000FF288091680486950C9430058091680495 +:105B0000982F969591F09158990F8170892B8093D9 +:105B100068048E7F91E009F490E08091680490FB26 +:105B200080F9809368040E94FF288091680486951C +:105B30000C94300580916804982F909590FB80F923 +:105B4000809368040E94FF288091680480FF02C04F +:105B5000869501C080E00C94300590916804892FEF +:105B600086958F5F8F779170843028F4880F892B0A +:105B70008093680402C090936804809168048E7FCB +:105B800091E009F490E08091680490FB80F98093A3 +:105B900068040E94FF288091680486950C94300563 +:105BA00020916804922F96958927982F990F822F1C +:105BB0008170892B809368048E7F91E009F490E0D6 +:105BC0008091680490FB80F9809368040E94FF280C +:105BD0008091680486950C9430055058BB27AA27FD +:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7 +:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45 +:105C0000D3D180F3BA17620773078407950718F09A +:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A +:105C20000B01B90190010C01CA01A0011124FF2749 +:105C3000591B99F0593F50F4503E68F11A16F04044 +:105C4000A22F232F342F4427585FF3CF4695379543 +:105C50002795A795F0405395C9F77EF41F16BA0B08 +:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6 +:105C7000661F771F881FC2F70EC0BA0F621F731FFF +:105C8000841F48F4879577956795B795F7959E3F5C +:105C900008F0B3CF9395880F08F09927EE0F9795EA +:105CA0008795089527D108F481E008950CD06BC141 +:105CB00063D140F05AD130F021F45F3F19F03EC17A +:105CC000511195C14FC170D198F39923C9F3552350 +:105CD000B1F3951B550BBB27AA27621773078407DF +:105CE00038F09F5F5F4F220F331F441FAA1FA9F395 +:105CF00033D00E2E3AF0E0E830D091505040E69587 +:105D0000001CCAF729D0FE2F27D0660F771F881FE7 +:105D1000BB1F261737074807AB07B0E809F0BB0BD6 +:105D2000802DBF01FF2793585F4F2AF09E3F5105FA +:105D300068F004C15CC15F3FECF3983EDCF38695EC +:105D400077956795B795F7959F5FC9F7880F911D70 +:105D50009695879597F90895E1E0660F771F881F5C +:105D6000BB1F621773078407BA0720F0621B730B0F +:105D7000840BBA0BEE1F88F7E095089504D0689461 +:105D8000B11135C1089518D188F09F5790F0B92FFF +:105D90009927B751A0F0D1F0660F771F881F991F80 +:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035 +:105DB00008951CC1672F782F8827B85F39F0B93F45 +:105DC000CCF3869577956795B395D9F73EF4909582 +:105DD0008095709561957F4F8F4F9F4F0895E89400 +:105DE00009C097FB3EF490958095709561957F4F23 +:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1 +:105E0000F695879577956795B795F111F8CFFAF4E0 +:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11 +:105E200016C0882311F096E911C0772321F09EE86F +:105E3000872F762F05C0662371F096E8862F70E0D5 +:105E400060E02AF09A95660F771F881FDAF7880FAF +:105E50009695879597F9089588D018F011F08CD011 +:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4 +:105E7000E7FB6217730784079507A8F199F3E92FE9 +:105E8000FF2788232AF03197660F771F881FDAF7DC +:105E9000952F5527442332F091505040220F331F45 +:105EA000441FD2F7BB27E91BF50B621B730B840B56 +:105EB000B109C1F222F4620F731F841FB11D319723 +:105EC0002AF0660F771F881FBB1FEFCF91505040FD +:105ED0005AF041F0882332F0660F771F881F9150E7 +:105EE0005040C1F7939530C08695779567959F5F31 +:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D +:105F000016161706E807F907C0F012161306E4077D +:105F1000F50798F0621B730B840B950B39F40A2676 +:105F200061F0232B242B252B21F408950A2609F454 +:105F3000A140A6958FEF811D811D089597F99F6758 +:105F400080E870E060E008959F3F31F0915020F4C8 +:105F5000879577956795B795880F911D9695879545 +:105F600097F908959FEF80EC089500240A9416167F +:105F7000170618060906089500240A941216130637 +:105F8000140605060895092E0394000C11F48823C5 +:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1 +:105FA0007F4F8F4F9F4F089557FD9058440F551FB7 +:105FB00059F05F3F71F04795880F97FB991F61F08B +:105FC0009F3F79F087950895121613061406551F02 +:105FD000F2CF4695F1DF08C0161617061806991F6E +:105FE000F1CF86957105610508940895E894BB2763 +:105FF00066277727CB0197F908957CDF08F48FEFA8 +:1060000008950BD0C0CFB1DF28F0B6DF18F095238C +:1060100009F094CFA7CF1124EACFC6DFA0F3959F54 +:10602000D1F3950F50E0551F629FF001729FBB277F +:10603000F00DB11D639FAA27F00DB11DAA1F649F2B +:106040006627B00DA11D661F829F2227B00DA11DDE +:10605000621F739FB00DA11D621F839FA00D611D64 +:10606000221F749F3327A00D611D231F849F600D85 +:10607000211D822F762F6A2F11249F5750408AF0BE +:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A +:10609000881F91505040A9F79E3F510570F04ECF98 +:1060A000A6CF5F3FECF3983EDCF386957795679536 +:1060B000B795F795E7959F5FC1F7FE2B880F911D68 +:1060C0009695879597F90895FA01EE0FFF1F309680 +:1060D0002105310599F16115710561F48038BFE33F +:1060E0009B0749F168949038810561F08038BFEFD3 +:1060F0009B0741F0992342F5FF3FE105310521055A +:1061000011F1E8940894E795D901AA2329F4AB2F5B +:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4 +:10612000F73950F019F0FF3A38F49F779F930CD06D +:106130000F9007FC905808953EF014CF60E070E097 +:1061400080E89FE308954FE79F775F934F933F93D6 +:106150002F939ED02F913F914F915F9152DF05C0B9 +:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801 +:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1 +:106180004EDF0F920F920F924DB75EB70F92C0D0B5 +:10619000ECEFF0E016D04F915F91EF91FF91E59514 +:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23 +:1061B000FA95E1F74195550B32D00F9007FE26C0B6 +:1061C0000895DF93CF931F930F93FF92EF92DF9287 +:1061D0007B018C01689405C0DA2EEF011EDFFE0101 +:1061E000E894A5912591359145915591AEF3EF0134 +:1061F00006DDFE019701A801DA9479F7DF90EF90B0 +:10620000FF900F911F91CF91DF9108959B01AC01F9 +:1062100060E070E080E89FE349CD90CE95CECCDE83 +:10622000E8F39923D9F3940F511DBBF391505040DB +:1062300094F059F0882332F0660F771F881F915031 +:106240005040C1F79E3F510544F7880F911D969528 +:10625000879597F908955F3FACF0983E9CF0BB2777 +:10626000869577956795B79508F4B1609395C1F7D2 +:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70 +:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67 +:1062900093DEC8F39923D1F3C6F3DF93CF931F9313 +:1062A0000F93FF92C92FDD2788232AF02197660FCD +:1062B000771F881FDAF720E030E040E85FEB9FE3CC +:1062C000883920F0803E30F021968F7787DCE4E239 +:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197 +:1062E000EC01FB2E6F5771097595771F880B990B81 +:1062F00078DD28E132E741E35FE38FDEAF2D9801DF +:10630000AE01FF900F911F91CF91DF9178DC3BCED2 +:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497 +:1063200022273327442750781FC0B75188F4AB2F5A +:106330000024469537952795011CA395D2F300209C +:1063400069F0220F331F441FB395DAF30DD045CC0B +:1063500061307105A0E88A07B94630F49B01AC01B1 +:106360006627772788279078309621F0208331831D +:10637000428353830895AA1BBB1B51E107C0AA1F88 +:10638000BB1FA617B70710F0A61BB70B881F991FD6 +:106390005A95A9F780959095BC01CD01089597FB7A +:1063A000072E16F4009407D077FD09D00E94BB3168 +:1063B00007FC05D03EF4909581959F4F0895709508 +:1063C00061957F4F0895EE0FFF1F0590F491E02D2A +:1063D0000994F999FECF92BD81BDF89A992780B5AD +:1063E0000895A8E1B0E042E050E00C941132262F6D +:1063F000F999FECF92BD81BDF89A019700B40216BB +:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68 +:1064100008950196272F0E94F8310C94F731DC0182 +:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F +:10643000319600B40D9241505040B8F70895F89449 +:02644000FFCF8C +:106442000C52D02445000000410000DC4400000052 +:106452004152D0A4440000404100005C44000000CE +:106462004148F17644000000415C978A44000000F4 +:10647200411FD592440000004152D0A444000000C4 +:10648200415CFFB844000000410AA7CF440000006D +:10649200410000DC44000000410AA7CF4400000094 +:1064A200410000DC440000004100000000000080C8 +:1064B2004000005C450000404100000000000080F8 +:1064C2004052D02445000040410AA7CF44000000BA +:1064D200410000DC44000000410000000000008098 +:1064E2004052D024450000404100000000000080DE +:1064F2004000005C45000040410AA7CF4400000074 +:10650200410000DC44000000410000000000008067 +:106512004052D024450000404100000000000080AD +:10652200400AA74F45000040410AA7CF440000009F +:10653200410000DC44000000410000000000008037 +:106542004052D024450000004100000000000080BD +:10655200405CFF3845000000410000000000008060 +:106562004052D02445000000410AA7CF4400000059 +:10657200410000DC440000004100000000000080F7 +:106582004052D024450000804153D02445000040B1 +:106592004160970A450000004154D0A44400000025 +:1065A200410000DC440000004160970A450000A061 +:1065B20041050000003F0000C8424314D114AE144C +:1065C2007A14461401012A042808140A321E000013 +:1065D200020004000500070009000B000C000E0079 +:1065E2001000110013001500170018001A001C00FB +:1065F2001D001F002100230024002600280029007E +:106602002B002D002F0030003200340035003700FF +:1066120039003B0040004500250026006100600073 +:1066220020003700640065006600670044004600F1 +:10663200240047003149803F5D8B803FF8BF803F97 +:10664200CAE1803F73ED803FCAE1803FF8BF803FDF +:106652005D8B803F3149803F0000803FF16D7F3F7D +:1066620075EA7E3F4C827E3F833F7E3F84287E3F99 +:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6 +:106682000000803F3F4D363975092809F208B908E4 +:106692004C0865087E0897080102030405060708EE +:0266A2000900ED :00000001FF diff --git a/keyboard/planck/planck_pcb_r4_w_bootloader.hex b/keyboard/planck/planck_pcb_r4_w_bootloader.hex index f2e9993ac..140bf415f 100644 --- a/keyboard/planck/planck_pcb_r4_w_bootloader.hex +++ b/keyboard/planck/planck_pcb_r4_w_bootloader.hex @@ -250,76 +250,76 @@ :107FE4000C94ED3E0C94113F0C94193F0C94213FDA :0C7FF4000C94F23E0C94033F0C94293FC7 :040000030000700089 -:100000000C94FE040C9442050C9442050C94420599 -:100010000C9442050C9442050C9442050C94420544 -:100020000C9442050C9442050C94A6180C94781973 -:100030000C94DB270C9442050C9442050C94420569 -:100040000C9442050C9442050C9442050C94420514 -:100050000C9442050C9443280C9442050C944205E0 -:100060000C9442050C9442050C9442050C944205F4 -:100070000C9442050C9442050C9442050C944205E4 -:100080000C94D10E0C9442050C9442050C9442053C -:100090000C9442050C9442050C9442050C944205C4 -:1000A0000C9442050C9442050C9442059D05AD0547 -:1000B000BF05CF05D505E405F005F60504060D06D8 -:1000C0001E062E06340664069013901390139013A8 -:1000D000901390139013901390139013A713A713DA -:1000E000A713A713A713A713A713A713A713A71340 -:1000F00090139013901390139013A713A713A713A3 -:10010000A713A713901390139013A713A713A71364 -:10011000E519071AF51A071AF51A4C1A6F1AF51A83 -:10012000C41AD71ADA1DDA1D171E171E711EAF1E4C -:1001300027212721C81E2721C91FC91F8C20A320C2 -:100140002721122107634236B79BD8A71A39685670 -:1001500018AEBAAB558C1D3CB7CC5763BD6DEDFDE9 -:10016000753EF6177231BF000000803F08000000A6 -:10017000BE922449123EABAAAA2ABECDCCCC4C3E9C -:1001800000000080BEABAAAAAA3E00000000BF008B -:100190000000803F0000000000084178D3BB438787 -:1001A000D1133D190E3CC3BD4282AD2B3E68EC829B -:1001B00076BED98FE1A93E4C80EFFFBE01C4FF7F20 -:1001C0003F00000000002B0014001A00080015007A -:1001D00017001C0018000C00120013002A00290050 -:1001E00004001600070009000A000B000D000E00B5 -:1001F0000F0033003400E1001D001B000600190051 -:1002000005001100100036003700380028000530C6 -:10021000E000E200E30003302C002C00043050002A -:10022000510052004F002B0014001A000900130067 -:100230000A000D000F0018001C0033002A002900DE -:10024000040015001600170007000B00110008003D -:100250000C0012003400E1001D001B000600190014 -:1002600005000E0010003600370038002800053069 -:10027000E000E200E30003302C002C0004305000CA -:10028000510052004F002B0034003600370013009D -:100290001C0009000A00060015000F002A002900B2 -:1002A00004001200080018000C0007000B001700E3 -:1002B000110016003800E100330014000D000E009C -:1002C0001B00050010001A0019001D002800053051 -:1002D000E000E200E30003302C002C00043050006A -:1002E000510052004F0035021E021F02200221025F -:1002F0002202230224022502260227022A004C00A1 -:100300003A003B003C003D003E003F002D022E0223 -:100310002F02300231020100400041004200430040 -:10032000440045000100010001000100010001003E -:100330000100010001000100010001000100AB000B -:10034000AA00A900AE0035001E001F0020002100F9 -:100350002200230024002500260027002A004C004C -:100360003A003B003C003D003E003F002D002E00C7 -:100370002F003000310001004000410042004300E6 -:1003800044004500010001000100010001000100DE -:100390000100010001000100010001000100AB00AB -:1003A000AA00A900AE00000000000000000000004C -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F0000000000000000330000000000430000096 -:100400000000000000001E001E001E001E001E0056 -:100410001E001E001E001E001E001E001E0000000A -:1004200014001A000800150017001C0018000C002A -:10043000120013002F00000004001600070009003E -:100440000A000B000D000E000F00330034000D30C9 -:10045000000000000600190000000000110010005C +:100000000C94DA040C941E050C941E050C941E0529 +:100010000C941E050C941E050C941E050C941E05D4 +:100020000C941E050C941E050C94B7180C94891999 +:100030000C94EC270C941E050C941E050C941E05C4 +:100040000C941E050C941E050C941E050C941E05A4 +:100050000C941E050C9454280C941E050C941E053B +:100060000C941E050C941E050C941E050C941E0584 +:100070000C941E050C941E050C941E050C941E0574 +:100080000C94AD0E0C941E050C941E050C941E05CC +:100090000C941E050C941E050C941E050C941E0554 +:1000A0000C941E050C941E050C941E0579058905FB +:1000B0009B05AB05B105C005CC05D205E005E905FA +:1000C000FA050A0610064006F619181A061B181A31 +:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC +:1000E000281E281E821EC01E38213821D91E382104 +:1000F000DA1FDA1F9D20B4203821232107634236FE +:10010000B79BD8A71A39685618AEBAAB558C1D3CA8 +:10011000B7CC5763BD6DEDFD753EF6177231BF006C +:100120000000803F08000000BE922449123EABAAA6 +:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01 +:10014000AA3E00000000BF000000803F0000000049 +:1001500000084178D3BB4387D1133D190E3CC3BD82 +:100160004282AD2B3E68EC8276BED98FE1A93E4C2F +:1001700080EFFFBE01C4FF7F3F00000000002B00A6 +:1001800014001A000800150017001C0018000C00CD +:10019000120013002A0029000400160007000900BD +:1001A0000A000B000D000E000F0033003400E100C8 +:1001B0001D001B000600190005001100100036008C +:1001C0003700380028000530E000E200E30003308B +:1001D0002C002C0004305000510052004F002B0026 +:1001E00014001A00090013000A000D000F00180087 +:1001F0001C0033002A002900040015001600170017 +:1002000007000B00110008000C0012003400E10090 +:100210001D001B000600190005000E00100036002E +:100220003700380028000530E000E200E30003302A +:100230002C002C0004305000510052004F002B00C5 +:1002400034003600370013001C0009000A000600C5 +:1002500015000F002A0029000400120008001800F1 +:100260000C0007000B001700110016003800E10019 +:10027000330014000D000E001B00050010001A00D2 +:1002800019001D0028000530E000E200E300033003 +:100290002C002C0004305000510052004F00350259 +:1002A0001E021F0220022102220223022402250232 +:1002B000260227022A004C003A003B003C003D0089 +:1002C0003E003F002D022E022F02300231020100BB +:1002D000400041004200430044004500010001008D +:1002E0000100010001000100010001000100010006 +:1002F000010001000100AB00AA00A900AE0035001A +:100300001E001F00200021002200230024002500E1 +:10031000260027002A004C003A003B003C003D002C +:100320003E003F002D002E002F0030003100010064 +:10033000400041004200430044004500010001002C +:1003400001000100010001000100010001000100A5 +:10035000010001000100AB00AA00A900AE000000EE +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000003301A +:1003B00000000000043000000000000000001E00EB +:1003C0001E001E001E001E001E001E001E001E003D +:1003D0001E001E001E00000014001A000800150078 +:1003E00017001C0018000C00120013002F00000062 +:1003F00004001600070009000A000B000D000E00A3 +:100400000F00330034000D3000000000060019001A +:1004100000000000110010000000000000000000BB +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C @@ -369,1512 +369,1529 @@ :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C00000000000000001000050010001000100D5 -:1007D0000100010001000100010001004C000100C6 -:1007E0000100010007300630135012500030013074 -:1007F00002300C30010001000B300A3009300830A3 -:1008000001000100010001000100010001000100E0 -:1008100001000100010001000100010001000100D0 -:100820000100010001002803540068006500200059 -:1008300050006C0061006E0063006B0020004B00F4 -:100840006500790062006F006100720064000000C2 -:100850002C034F007200740068006F006C00690088 -:100860006E0065006100720020004B006500790099 -:1008700062006F00610072006400730000000403F6 -:10088000090409026D00040100A0FA090400000136 -:1008900003010100092111010001223F0007058128 -:1008A0000308000A090401000103010200092111E3 -:1008B000010001224D000705820308000A09040215 -:1008C0000001030000000921110100012236000788 -:1008D00005830308000A090403000103000000095E -:1008E00021110100012239000705840310000112C3 -:1008F00001100100000008EDFE606001000102002F -:100900000105010906A101050719E029E7150025E0 -:1009100001950875018102050819012905950575DC -:1009200001910295017503910105071900297715B9 -:10093000002501957875018102C005010980A1019A -:10094000850216010026B7001A01002AB7007510AB -:1009500095018100C0050C0901A101850316010064 -:10096000269C021A01002A9C02751095018100C084 -:1009700005010902A1010901A100050919012905C3 -:100980001500250195057501810295017503810109 -:100990000501093009311581257F95027508810609 -:1009A00009381581257F950175088106050C0A38DF -:1009B000021581257F950175088106C0C0050109D2 -:1009C00006A101050719E029E7150025019508751D -:1009D0000181029501750881010508190129059514 -:1009E000057501910295017503910105071900290B -:1009F000FF150025FF950675088100C011241FBE54 -:100A0000CFEFDAE0DEBFCDBF04B603FE24C0809195 -:100A1000190490911A04A0911B04B0911C04873012 -:100A2000904BA740B04BB9F41092190410921A04DD -:100A300010921B0410921C0414BE84B7877F84BFDD -:100A400088E10FB6F89480936000109260000FBEAA -:100A5000E0E0F8E3099513E0A0E0B1E0E4E8F3E6B4 -:100A600002C005900D92A431B107D9F714E0A4E1BA -:100A7000B3E001C01D92A931B107E1F70E94EC1566 -:100A80000C94C0310C940000279A2F988FEF9FEFA1 -:100A900090938700809386008AE08093800089E1AC -:100AA000809381000C94452D282F81110BC08091DB -:100AB0008000877F8093800010928D0010928C00C0 -:100AC0002F9808952F9880918000886080938000EF -:100AD000233019F48FEF9FEF0FC083E090E0821B6B -:100AE0009109880F991F2FEF3FEFA90102C056957A -:100AF00047958A95E2F7CA0190938D0080938C0008 -:100B00000895CF93DF93EC010E94DC28BE0180E0C2 -:100B100090E0DF91CF910C9407250F931F93462F00 -:100B200050E04E30510508F0DEC0DC01FA01EA5A0F -:100B3000FF4F12968C910C948431882309F4D3C012 -:100B400000E010E0980140E064E070E08BE292E0A9 -:100B50000E944F1281E090E00FC0882309F4C3C0C7 -:100B600000E010E0980140E066E070E08BEB91E07F -:100B70000E944F1282E090E00E948105B4C0882359 -:100B800009F4B1C000E010E0980140E068E070E0D6 -:100B90008BEE91E00E944F1284E090E0EDCF88232D -:100BA00011F083E005C083E00CC0882349F084E0A5 -:100BB0000E94842540E164E083E00E94910A93C092 -:100BC00084E00E94A525F6CF882331F085EE0E94AF -:100BD0006E1C0E949C2D87C085EE0E94361D83C02E -:100BE000882309F480C00E94E30D7DC0882309F4A6 -:100BF0007AC00E94DC0D00E010E0980140E065E062 -:100C000070E08BE492E027C0882309F46CC085E093 -:100C10000E94A5250E94040E66C0882309F463C0C3 -:100C200000E010E0980140E068E070E08BE191E0C6 -:100C30000E944F1285E00E94842555C0882309F444 -:100C400052C00E94E21200E010E0980140E068E02B -:100C500070E08BE191E00E944F1245C0882309F4B7 -:100C600042C00E94ED12EFCF8823E9F100E010E0CE -:100C7000980140E066E070E08BE891E00E944F123E -:100C800084E00E94A52583E00E94A52580E10E94C2 -:100C9000A52585E00E94A5250E94040E86E00E94FD -:100CA00084250E94C928811102C00E94A5280E94A3 -:100CB000E12890E090931804809317048068809353 -:100CC00017040E94E5280FC0882369F000E010E0B7 -:100CD000980140E066E070E08BE591E00E944F12E1 -:100CE00086E00E94A52580E090E01F910F91089575 -:100CF0000F931F932FEF89EF90E021508040904099 -:100D0000E1F700C0000000E010E0980140E065E07D -:100D100070E08BE492E00E944F121F910F910895B2 -:100D20000F931F9300E010E0980140E063E070E053 -:100D300083E091E00E944F122FEF82E597E021506F -:100D400080409040E1F700C000001F910F9108958E -:100D5000CF92DF92EF92FF920F931F93CF93DF9387 -:100D6000CDB7DEB7CC58D1090FB6F894DEBF0FBEB1 -:100D7000CDBF2091D10325FFC5C08C01FC0192811C -:100D800080910201992309F460C096E4E0E9F2E061 -:100D9000DE01A95BBF4F01900D929A95E1F7F80132 -:100DA0009081E0910001F0910101E90FF11DEE0F3A -:100DB000FF1F27E430E02C0F3D1FE20FF31F60817F -:100DC0007181680F711D882777FD8095982F0E948B -:100DD000E02E20E030E040E451E40E94452E6B011B -:100DE0007C01F801218184E090E0821B9109BC0123 -:100DF000882777FD8095982F0E94E02E9B01AC01FB -:100E0000C701B6010E94DD2D9B01AC0160E070E0DE -:100E100080E090E40E94F72F20E030E04CE551E4C0 -:100E20000E94942F4FE050E0C457DF4F0FB6F89464 -:100E3000DEBF0FBECDBFDF91CF911F910F91FF900D -:100E4000EF90DF90CF900C94EF1196E4E0E9F2E0A0 -:100E5000DE01119601900D929A95E1F7F8019081CB -:100E6000E0910001F0910101E90FF11DEE0FFF1F6C -:100E700021E030E02C0F3D1FE20FF31F60817181F4 -:100E8000680F711D882777FD8095982F0E94E02EAE -:100E900020E030E040E451E40E94452E6B017C01EB -:100EA000F801218184E090E0821B9109BC01882730 -:100EB00077FD8095982F0E94E02E9B01AC01C70121 -:100EC000B6010E94DD2D9B01AC0160E070E080E086 -:100ED00090E40E94F72F20E030E04CE551E40E94BE -:100EE000942FC457DF4F0FB6F894DEBF0FBECDBFAF -:100EF000DF91CF911F910F91FF90EF90DF90CF90F6 -:100F00000C94370EC457DF4F0FB6F894DEBF0FBEF8 -:100F1000CDBFDF91CF911F910F91FF90EF90DF90A8 -:100F2000CF90089508950E9444056E9A769A0C9485 -:100F300078060C9492070C94A8060895880F991FC0 -:100F4000FC01EA5BFF4F859194910895880F991FEA -:100F5000FC01EA53FE4F8591949108950F931F93DE -:100F6000CF93DF93EC01811520E49207A0F5C11522 -:100F700080E3D80708F0E1C0C83ED105D8F4C03EF0 -:100F8000D10508F0EEC1C83AD10578F4C53AD105CB -:100F900008F074C0C130D10509F46DC008F4DEC199 -:100FA000C430D10508F0DDC1D9C1CB3BD10508F46F -:100FB00070C0D4C1C11590E2D90708F0B9C0C115FD -:100FC00021E0D20708F0CDC1C03FD10508F4C6C169 -:100FD0008E01106506C2C13080E5D80709F4BDC096 -:100FE00068F5C13120E4D20709F4AEC050F4C03135 -:100FF00090E4D90708F0A5C0CF70DD278E01146DED -:10100000F0C1C33120E4D20709F4A4C008F49FC0A2 -:10101000C115D04509F0A2C10E944B210E94040EC7 -:101020000E9490069FEF24E38CE091502040804086 -:10103000E1F700C000000E946828D3C1C11520E676 -:10104000D20730F4C11581E5D80708F48CC02DC152 -:10105000C11590E7D90708F481C1C11520E8D2076E -:1010600008F478C1C11580E9D80708F077C1DF70AE -:101070008E01106AB6C101E010E0B3C1C53AD105D6 -:1010800009F471C1C63AD10509F070C102E810E453 -:10109000A8C1C83AD10509F46CC1C93AD10509F40F -:1010A0006BC1CA3AD10509F46AC1CB3AD10509F43A -:1010B00069C1CC3AD10509F468C1CD3AD10509F42A -:1010C00067C1C03BD10509F466C1CE3AD10509F428 -:1010D00065C1CF3AD10509F464C1C13BD10509F41A -:1010E00063C1C23BD10509F462C1C33BD10509F418 -:1010F00061C1C43BD10509F460C1C53BD10509F408 -:101100005FC1C63BD10509F45EC1C73BD10509F4F7 -:101110005DC1C83BD10509F45CC1C93BD10509F4E7 -:101120005BC1CA3BD10509F45AC100E014E459C1BE -:10113000CE019F700E94A60755C1DD278E01106C5D -:1011400050C100E011ED4DC100E010ED4AC100E0DA -:1011500012ED47C100E013ED44C18091ED038160C1 -:101160008093ED033EC10E94C928811102C00E94F4 -:10117000A5280E94E12890E090931804809317041A -:10118000C23090E5D90721F480911704816086C0B0 -:10119000C43020E5D20721F48091170482607EC01C -:1011A000C63080E5D80721F480911704846076C0AA -:1011B000C83090E5D90719F48091170427C0CA30C8 -:1011C00020E5D20721F480911704806167C0CC30FC -:1011D00080E5D80721F48091170480625FC0CE308B -:1011E00090E5D90721F480911704806457C0C0317D -:1011F00020E5D20721F48091170480684FC0C231E6 -:1012000080E5D80729F4809117048460886046C07F -:10121000C33090E5D90721F4809117048E7F3EC03A -:10122000C53020E5D20721F4809117048D7F36C0A8 -:10123000C73080E5D80721F4809117048B7F2EC03A -:10124000C93090E5D90719F48091170426C0CB3036 -:1012500020E5D20721F4809117048F7E1FC0CD3086 -:1012600080E5D80721F4809117048F7D17C0CF3017 -:1012700090E5D90721F4809117048F7B0FC0C1310D -:1012800020E5D20721F4809117048F7707C0C3317E -:10129000D04531F4809117048B7F877F80931704AA -:1012A000809117040E94E5289CC08D2F99278F708C -:1012B000992781309105D9F49E012370332702C00C -:1012C000880F991F2A95E2F79C688E0144E0000F71 -:1012D000111F4A95E1F700271370802B912B53E0E3 -:1012E000CC0FDD1F5A95E1F7C076DD272FC0823085 -:1012F000910531F4DC2FCC278E01016F106A71C08B -:101300008330910569F4CE018370992701E010E0E4 -:1013100002C0000F111F8A95E2F7C8019C680FC038 -:10132000049709F05EC0CE018370992701E010E0B8 -:1013300002C0000F111F8A95E2F7C8019A6823E0E6 -:10134000CC0FDD1F2A95E1F7C07ED7708C010C2BE6 -:101350001D2B47C0DF708E01106243C000E010E01B -:1013600040C08E013EC001E810E43BC003E810E439 -:1013700038C002EE14E435C009EE14E432C00AEEBF -:1013800014E42FC005EB14E42CC006EB14E429C0D0 -:1013900007EB14E426C00CEC14E423C00DEC14E4B9 -:1013A00020C003E815E41DC00AE815E41AC002E9EC -:1013B00015E417C004E915E414C001E216E411C0F5 -:1013C00003E216E40EC004E216E40BC005E216E4E4 -:1013D00008C006E216E405C007E216E402C00AE20D -:1013E00016E4C801DF91CF911F910F9108959CE001 -:1013F000799FF001112490E3899FE00DF11D1124E4 -:10140000E60FF11DEE0FFF1FEA53FE4F85919491F9 -:10141000803E9105E0F4803C910558F581339105BB -:1014200009F46FC048F48932910509F463C08A3227 -:10143000910509F46DC072C089339105E9F08238D5 -:101440009105D1F08533910509F44DC067C0833E05 -:10145000910581F138F4803E9105B9F0823E910505 -:10146000D9F05CC0863E910561F1873E9105A1F1FE -:1014700055C00E949E0708952091170420FD02C0C8 -:1014800021FF4CC080EE90E049C08091170480FF9E -:10149000F9CF89E390E042C08091170482FF0EC02B -:1014A0008091170484FF03C080E090E037C083EE92 -:1014B00090E034C08091170482FFF2CF82EE90E07A -:1014C0002DC08091170483FF0BC08091170484FD09 -:1014D000EBCF87EE90E022C08091170483FFF5CF19 -:1014E00086EE90E01BC08091170485FF07C089E25B -:1014F00090E014C08091170485FFF9CF85E390E058 -:101500000DC08091170486FF07C08AE290E006C0F4 -:101510008091170486FFF9CF81E390E00E94AE0727 -:101520000895CF92DF92EF92FF920F931F9301E005 -:1015300010E020E030E06801790104C0CC0CDD1C33 -:10154000EE1CFF1C8A95D2F704C0000F111F221F4A -:10155000331F6A95D2F70C291D292E293F29C090E7 -:10156000D103D090D203E090D303F090D403C022F3 -:10157000D122E222F322842FC016D106E206F3061E -:1015800041F41F910F91FF90EF90DF90CF900C945A -:1015900084251F910F91FF90EF90DF90CF900C94D6 -:1015A000A52508950C94D10A5F926F927F928F9235 -:1015B0009F92AF92BF92CF92DF92EF92FF920F93E2 -:1015C0001F93CF93DF93CDB7DEB728970FB6F8946C -:1015D000DEBF0FBECDBFCE0101966C014E0199E07A -:1015E000890E911C20E030E040E050E060E070E0C7 -:1015F00000E010E0E12CF12C6C2C5D2C88E0782EC2 -:10160000AA24A394B12CE6EDF2E0A62DB52D872DEA -:1016100001900D928A95E1F7F601819191916F0108 -:10162000FC01E07FFF27E032F10559F48F70992724 -:10163000F50102C0EE0FFF1F8A95E2F7EE2AFF2A9E -:1016400037C0E033F10559F48F709927F50102C0D6 -:10165000EE0FFF1F8A95E2F70E2B1F2B29C0E034F7 -:10166000F10559F48F709927F50102C0EE0FFF1FA5 -:101670008A95E2F76E2B7F2B1BC0E035F10559F4FC -:101680008F709927F50102C0EE0FFF1F8A95E2F7D0 -:101690004E2B5F2B0DC0E036F10551F48F7099276A -:1016A000F50102C0EE0FFF1F8A95E2F72E2B3F2BAC -:1016B000C814D90409F0A7CF84B19E2D9095892331 -:1016C00084B985B1E82AE5B887B1902F9095892330 -:1016D00087B988B1082B08B98AB1962F90958923CC -:1016E0008AB98BB1682B6BB98DB1942F90958923F2 -:1016F0008DB98EB1482B4EB980B3922F9095892326 -:1017000080BB81B3282B21BB28960FB6F894DEBF8F -:101710000FBECDBFDF91CF911F910F91FF90EF9042 -:10172000DF90CF90BF90AF909F908F907F906F9001 -:101730005F9008955F926F927F928F929F92AF9287 -:10174000BF92CF92DF92EF92FF920F931F93CF93AE -:10175000DF93CDB7DEB768970FB6F894DEBF0FBE44 -:10176000CDBF85B7806885BF85B7806885BF0E947B -:10177000D40ACE0101966C014E0199E1890E911CAB -:1017800020E030E040E050E060E070E000E010E099 -:10179000E12CF12C6C2C5D2C88E1782EAA24A394EA -:1017A000B12CEEEDF2E0A62DB52D872D01900D9216 -:1017B0008A95E1F7F601819191916F01FC01E07F3B -:1017C000FF27E032F10559F48F709927F50102C027 -:1017D000EE0FFF1F8A95E2F7EE2AFF2A37C0E033AB -:1017E000F10559F48F709927F50102C0EE0FFF1F24 -:1017F0008A95E2F70E2B1F2B29C0E034F10559F42E -:101800008F709927F50102C0EE0FFF1F8A95E2F74E -:101810006E2B7F2B1BC0E035F10559F48F70992793 -:10182000F50102C0EE0FFF1F8A95E2F74E2B5F2BEA -:101830000DC0E036F10551F48F709927F50102C013 -:10184000EE0FFF1F8A95E2F72E2B3F2BC814D90409 -:1018500009F0A7CF84B19E2D9095892384B985B1D5 -:10186000E82AE5B887B1902F9095892387B988B188 -:10187000082B08B98AB1962F909589238AB98BB124 -:10188000682B6BB98DB1942F909589238DB98EB14A -:10189000482B4EB980B3922F9095892380BB81B39A -:1018A000282B21BB10921D0310921C0310921503CC -:1018B0001092140310921F0310921E03109217032C -:1018C0001092160310922103109220031092190314 -:1018D00010921803109223031092220310921B03FC -:1018E00010921A0368960FB6F894DEBF0FBECDBFF4 -:1018F000DF91CF911F910F91FF90EF90DF90CF90EC -:10190000BF90AF909F908F907F906F905F900C945E -:1019100093077F928F929F92AF92BF92CF92DF9266 -:10192000EF92FF920F931F93CF93DF93CDB7DEB764 -:10193000A0970FB6F894DEBF0FBECDBF6E0149E190 -:10194000C40ED11C84E1E82E83E0F82E98E0792EB5 -:10195000BC2CAD2C01E010E028E1822E35E0932E66 -:10196000E6EDF2E0AB2DBA2D872D01900D928A9510 -:10197000E1F7F601819191916F019C01207F33275E -:101980002032310591F424B18F709927A80102C04B -:10199000440F551F8A95E2F7CA01922F982B94B9EC -:1019A00095B18095892385B953C02033310591F4D1 -:1019B00027B18F709927F80102C0EE0FFF1F8A959B -:1019C000E2F7CF01922F982B97B998B18095892390 -:1019D00088B93EC02034310591F42AB18F7099271F -:1019E000A80102C0440F551F8A95E2F7CA01922F41 -:1019F000982B9AB99BB1809589238BB929C0203542 -:101A0000310591F42DB18F709927F80102C0EE0FC6 -:101A1000FF1F8A95E2F7CF01922F982B9DB99EB1B7 -:101A2000809589238EB914C02036310589F420B3FE -:101A30008F709927A80102C0440F551F8A95E2F7BD -:101A4000CA01922F982B90BB91B38095892381BBBB -:101A500050EA5A95F1F7BE016F5F7F4F20E030E00A -:101A600040E050E0EEEDF2E0DE011196882D0190AD -:101A70000D928A95E1F7FB0181919191BF01FC01E3 -:101A8000E07FFF27E032F10511F4E3B113C0E0334A -:101A9000F10511F4E6B10EC0E034F10511F4E9B13D -:101AA00009C0E035F10511F4ECB104C0E036F105F0 -:101AB000B9F4EFB1F0E08F70992702C0F595E79582 -:101AC0008A95E2F7E0FD08C0C801042E02C0880F25 -:101AD000991F0A94E2F702C080E090E0282B392B8E -:101AE0004F5F5F4F4C30510509F0BCCFF70180814B -:101AF00091818217930721F03183208390927302A2 -:101B00000E94D40AF2E0EF0EF11C4CE1E41643E02F -:101B1000F40609F025CF80917302882361F181508A -:101B200080937302882339F08FE99FE00197F1F7E2 -:101B300000C0000020C08091140390911503909381 -:101B40001D0380931C0380911603909117039093BB -:101B50001F0380931E0380911803909119039093A3 -:101B600021038093200380911A0390911B0390938B -:101B70002303809322030E94990781E0A0960FB669 -:101B8000F894DEBF0FBECDBFDF91CF911F910F91B3 -:101B9000FF90EF90DF90CF90BF90AF909F908F908D -:101BA0007F900895E82FF0E0EE0FFF1FE45EFC4FFA -:101BB00080819181089508958091020481608093CD -:101BC00002040C94F728809102048E7F8093020413 -:101BD0000C94F7280E94C928811102C00E94A528F0 -:101BE0000E94F328809302043E9A809171008D7FB9 -:101BF0008093710082E0809390008AE1809391004D -:101C000081E080932603089580912603811102C00C -:101C10000E94EA0D10927603109275038091710074 -:101C20008D7F80937100809190008F7780939000DA -:101C3000109238031092370310926F0310927003C2 -:101C4000109271031092720310926E0310926D0342 -:101C5000EDE4F3E0ADE3B3E0119211921192119231 -:101C60001D921D9283E0ED36F807B1F70895CF92EB -:101C7000DF92EF92FF920F931F93CF93DF93209108 -:101C80003703222309F484C06B017C018091260371 -:101C9000811102C00E94EA0D0DE613E0C7E0D0E01A -:101CA000A7019601F80192918291729162918F0140 -:101CB0000E94412E811131C0FE01EE0FFF1FEE0F79 -:101CC000FF1FE35BFC4F1082118212821382DE0140 -:101CD000AA0FBB1FA35CBC4F11961C921E92C7306B -:101CE000D105E9F021964481558166817781408351 -:101CF000518362837383148215821682178212962F -:101D00008D919C91139711969C938E9313961C9290 -:101D10001E92129734961296E2CF219708F6809180 -:101D2000750390917603019797FD05C09093760314 -:101D30008093750304C0109276031092750380910E -:101D400075039091760320917303309174032817E3 -:101D5000390724F01092740310927303892BC1F495 -:101D6000809171008D7F80937100809190008F77BA -:101D70008093900010926F03109270031092710381 -:101D80001092720310926E0310926D03109237033B -:101D9000DF91CF911F910F91FF90EF90DF90CF9047 -:101DA00008951F920F920FB60F9211244F925F92D7 -:101DB0006F927F928F929F92AF92BF92CF92DF925B -:101DC000EF92FF922F933F934F935F936F937F9385 -:101DD0008F939F93AF93BF93CF93DF93EF93FF9333 -:101DE00080913703882309F49BC1C0917503D0917A -:101DF00076031C161D060CF093C1409027035090EB -:101E000028036090290370902A0320E030E0A901A4 -:101E1000C301B2010E94902F18160CF065C0C130AA -:101E2000D10509F452C08091730390917403BE01EF -:101E30000E9470317C0190937403809373038090AF -:101E4000390390903A03A0903B03B0903C0320E00C -:101E500030E040E85FE3C501B4010E94DD2D6093EE -:101E6000390370933A0380933B0390933C03F7014B -:101E7000EE0FFF1FEE0FFF1FE35BFC4FA30192016C -:101E800060817181828193810E94452E20E030E043 -:101E900040E05EE30E94942F9B01AC01C501B401B8 -:101EA0000E94902F18168CF4C7010196BE010E9463 -:101EB00070319093740380937303109239031092DE -:101EC0003A0310923B0310923C03E0917303F091AC -:101ED0007403EE0FFF1FEE0FFF1FE35BFC4F6081EB -:101EE000718182819381D0C0C0906F03D0907003C4 -:101EF000E0907103F090720320E030E0A901C70187 -:101F0000B6010E94412E2197882309F4A2C0FE0148 -:101F1000EE0FFF1FEE0FFF1FE35BFC4F80809180F1 -:101F2000A280B380A5019401C701B6010E94412E91 -:101F300087FF31C0A501940160E070E08CED93EC67 -:101F40000E94452E20E030E040E451E40E94452EFE -:101F500020E030E040E05FE30E94942F9B01AC0161 -:101F600060E070E080E090E40E94F72F9B01AC01FC -:101F7000C501B4010E94942F9B01AC01C701B601B9 -:101F80000E94412E87FF07C0A701960160E070E024 -:101F90008CED93E439C0A5019401C701B6010E94FC -:101FA000902F18160CF055C0A501940160E070E068 -:101FB0008CED93E40E94452E20E030E040E451E4B3 -:101FC0000E94452E20E030E040E05FE30E94942F25 -:101FD0009B01AC0160E070E080E090E40E94F72F8C -:101FE0009B01AC01C501B4010E94942F9B01AC017F -:101FF000C701B6010E94902F18165CF5A701960143 -:1020000060E070E08CED93EC0E94452E20E030E023 -:1020100040E451E40E94452E20E030E040E05FE3E0 -:102020000E94942F9B01AC0160E070E080E090E49E -:102030000E94F72F9B01AC01C701B6010E94942FAB -:1020400060936F0370937003809371039093720396 -:1020500013C0FE01EE0FFF1FEE0FFF1FE35BFC4FEF -:1020600080819181A281B38180936F0390937003EB -:10207000A0937103B093720360916F03709170032A -:102080008091710390917203209124033091250374 -:102090002F3F4FEF340731F02F5F3F4F3093250331 -:1020A000209324030E94F8126B017C0120E034E2AB -:1020B00044EF51E40E94412E87FF08C086EFC82EEE -:1020C00088E2D82E84EFE82E81E4F82E20E030E07C -:1020D00040E051E4C701B6010E94942F9B01AC017E -:1020E00060E074E284E79BE40E94452E6B017C0172 -:1020F0000E94AD2E70939700609396002091740219 -:10210000309175024091760250917702C701B60175 -:102110000E94942F0E94AD2E7093990060939800B6 -:1021200080913803882309F433C1C0903303D090E1 -:102130003403E0903503F090360320E030E0A9014D -:10214000C701B6010E94902F1816D4F58091240380 -:10215000909125038F3F2FEF920729F001969093DE -:10216000250380932403C701B6010E94F81220E0E2 -:1021700030E040E051E40E94942F9B01AC0160E00C -:1021800074E284E79BE40E94452E6B017C010E946F -:10219000AD2E709397006093960020917402309159 -:1021A00075024091760250917702C701B6010E94F4 -:1021B000942F0E94AD2E709399006093980008C0F0 -:1021C0001092970010929600109299001092980029 -:1021D00060912D0370912E036F5F7F4F70932E03DC -:1021E00060932D03209196003091970080E090E05D -:1021F000232BF1F0C0919600D09197000E94DE2E23 -:102200006B017C01BE0180E090E00E94DE2E9B010C -:10221000AC0160912F037091300380913103909154 -:1022200032030E94452E20E03FEF4FE757E410C0F5 -:102230000E94DE2E6B017C0120E030EE4FEF54E473 -:1022400060912F037091300380913103909132039C -:102250000E94942F9B01AC01C701B6010E94902FF0 -:1022600087FD96C080912B038F5F80932B0390E0B6 -:102270002091FE033091FF0382179307A0F0809115 -:102280000904882319F010922B030DC0809171006E -:102290008D7F80937100809190008F778093900064 -:1022A000109238037DC080912C03C0912B038111C3 -:1022B00028C0C0900304D0900404E0900504F0907E -:1022C000060420E030E0A901C701B6010E94902F6A -:1022D0001816BCF481E080932C0310923303109203 -:1022E00034031092350310923603C0922F03D0921C -:1022F0003003E0923103F0923203C150C0932B03BC -:1023000043C010922C031092250310922403E091F5 -:102310000004F091010448E0C49FE00DF11D112478 -:1023200080819181A281B3818093330390933403A0 -:10233000A0933503B093360320E030E040E85EE33D -:1023400064817581868197810E94942F6B017C0145 -:1023500020E030E048EC52E460917802709179021C -:1023600080917A0290917B020E94452E9B01AC01E4 -:10237000C701B6010E94942F60932F03709330031E -:10238000809331039093320310922E0310922D0309 -:102390008091020480FD04C010923803109237032C -:1023A000FF91EF91DF91CF91BF91AF919F918F916D -:1023B0007F916F915F914F913F912F91FF90EF909F -:1023C000DF90CF90BF90AF909F908F907F906F9055 -:1023D0005F904F900F900FBE0F901F901895CF9267 -:1023E000DF92EF92FF92CF93DF936B017C01EA01C2 -:1023F00080912603811102C00E94EA0D809102049F -:1024000080FF46C0809175039091760308970CF089 -:102410003FC0809171008D7F80937100809138035F -:1024200081110E94040E81E08093370310922503EE -:102430001092240320E030E0A901C701B6010E94F8 -:10244000902F1816DCF48091750390917603FC01AF -:10245000EE0FFF1FEE0FFF1FE35BFC4FC082D18228 -:10246000E282F382FC01EE0FFF1FE35CFC4FD1839D -:10247000C0830196909376038093750380917100D9 -:1024800082608093710080919000806880939000BA -:10249000DF91CF91FF90EF90DF90CF9008958F92D2 -:1024A0009F92AF92BF92CF92DF92EF92FF920F93E3 -:1024B0001F93CF93DF93EC017B01D42E4801590188 -:1024C00080912603811102C00E94EA0D80910204CE -:1024D00080FF6BC0809171008D7F8093710080912F -:1024E000370381110E94040E81E080933803D0935A -:1024F0000104C0930004F092FF03E092FE03D09227 -:1025000009048092030490920404A0920504B092FE -:1025100006041092390310923A0310923B03109272 -:102520003C0310922B0388819981AA81BB818093FF -:10253000330390933403A0933503B093360320E024 -:1025400030E040E85EE36C817D818E819F810E9456 -:10255000942F6B017C0120E030E048EC52E4609164 -:1025600078027091790280917A0290917B020E94A8 -:10257000452E9B01AC01C701B6010E94942F6093C8 -:102580002F037093300380933103909332031092A2 -:102590002E0310922D038091710082608093710050 -:1025A00080919000806880939000DF91CF911F917F -:1025B0000F91FF90EF90DF90CF90BF90AF909F90E2 -:1025C0008F9008958091770390E0019665E070E028 -:1025D0000E9470318093770308958091770390E093 -:1025E000019765E070E00E94703180937703089551 -:1025F0008F929F92AF92BF92CF92DF92EF92FF9213 -:10260000CF93DF936B017C01C0912403D09125030C -:10261000BE0180E090E00E94DE2E4B015C01A7012C -:10262000960160E070E08CE594E40E94452E9B01E9 -:10263000AC01C501B4010E94942F0E94B22E4091BA -:102640007703423009F45CC028F4442351F0413050 -:10265000E9F0FBC0433009F481C0443009F4B4C050 -:10266000F4C080E090E0A0E0BFE380937402909318 -:102670007502A0937602B09377021092270310920E -:1026800028031092290310922A03DFC01092270317 -:10269000109228031092290310922A0364317105C5 -:1026A00040F46A307105E0F520E030E040E85EE398 -:1026B0003BC0693C710508F0C0C080E090E00E941A -:1026C000DE2E20E030E040EA51E40E94DC2D20E0E4 -:1026D00030E044E353E40E94452E9B01AC010E948C -:1026E000942F20E030E040E05EE30E94942F9B01B5 -:1026F000AC0160E070E080E09EE30E94DC2D5BC0F6 -:1027000010922703109228031092290310922A0393 -:102710006432710578F4FB01EC59FF4F0C9484315D -:1027200020E030E040E05FE3C701B6010E94942F53 -:102730006B017C0180E090E0A0E0BEE38093740236 -:1027400090937502A0937602B09377027EC0A701A2 -:102750009601C701B6010E94DD2DEACF1092270332 -:10276000109228031092290310922A032AE0269F30 -:10277000A001279F500D1124CA0168EB7BE00E9445 -:102780005C31BC016C5D754077FF03C0719561954C -:102790007109882777FD8095982F0E94E02E2EE3FF -:1027A00033EC4EE259E30E94942F20E030E040ECFD -:1027B0005EE30E94DD2D6093740270937502809336 -:1027C00076029093770241C010922703109228035B -:1027D0001092290310922A03CE0183709927892B26 -:1027E000E1F0BE016170772780E090E00E94DE2E6C -:1027F00020E030E040E05EE30E94942F20E030E0F3 -:1028000040E45FE30E94DD2D6093740270937502D3 -:1028100080937602909377020CC080E090E0A0E075 -:10282000BFE38093740290937502A0937602B093F5 -:102830007702C770DD27CD2B41F4109274021092FD -:1028400075021092760210927702C701B601DF91ED -:10285000CF91FF90EF90DF90CF90BF90AF909F907F -:102860008F900895809188030895CF93DF9300D0CF -:102870001F92CDB7DEB79C0180910E04843019F50C -:1028800093E099833B832A839093E9008FEF9091A3 -:10289000E800815095FD06C095ED9A95F1F700008E -:1028A0008111F5CF8091E80085FF0DC040E050E038 -:1028B00063E070E0CE0101960E9496168091E800D8 -:1028C0008E778093E8000F900F900F90DF91CF915B -:1028D0000895CF93DF9300D01F92CDB7DEB720913C -:1028E0000E04243021F522E029839B838A8383E030 -:1028F0008093E9008FEF9091E800815095FD06C02C -:1029000095ED9A95F1F700008111F5CF8091E800DF -:1029100085FF0DC040E050E063E070E0CE0101961D -:102920000E9496168091E8008E778093E8000F90C1 -:102930000F900F90DF91CF91089520910E042430D5 -:10294000F1F422E02093E9002FEF3091E8002150CC -:1029500035FD06C035ED3A95F1F700002111F5CFB0 -:102960002091E80025FF0BC040E050E065E070E0FA -:102970000E9496168091E8008E778093E800089573 -:10298000CF93DF93EC0190910E04943009F046C090 -:10299000809186028823D9F0809187028823B9F03C -:1029A0009093E9008FEF9091E800815095FD06C06B -:1029B00095E19A95F1F700008111F5CF8091E8003B -:1029C00085FF2CC040E050E060E170E017C081E07E -:1029D0008093E9008FEF9091E800815095FD06C04B -:1029E00095ED9A95F1F700008111F5CF8091E800FF -:1029F00085FF14C040E050E068E070E0CE010E9426 -:102A000096168091E8008E778093E80080E1FE01C1 -:102A1000A8E7B3E001900D928A95E1F7DF91CF919D -:102A2000089580910D04811109C00E942B180E9405 -:102A300088188091E20084608093E20008951092EB -:102A40000D040895089508950C94D02742E061EC98 -:102A500081E00E94A51742E061EC82E00E94A51788 -:102A600042E061EC83E00E94A51742E161EC84E062 -:102A70000C94A51780911004833009F455C030F4EC -:102A8000813071F0823009F48EC008958A3009F4E3 -:102A90007AC08B3009F460C0893009F09CC020C036 -:102AA00080910F04813A09F096C08091E800877FF9 -:102AB0008093E8008091130490911404892B21F4F1 -:102AC00060E188E793E003C060E080E090E070E0C0 -:102AD0000E94E1168091E8008B778093E8000895CA -:102AE00080910F04813209F076C080911304909197 -:102AF0001404009719F0039709F06DC08091E80065 -:102B0000877F8093E8008091E80082FD05C0809176 -:102B10000E048111F8CF5FC08091F100809388038B -:102B20008091E8008B7753C080910F04813A09F0BF -:102B300052C08091130490911404892B09F04BC06A -:102B40008091E800877F8093E8008091E80080FF13 -:102B5000FCCF8091860236C080910F048132D9F576 -:102B60008091130490911404892BA9F58091E800B9 -:102B7000877F8093E8000E94DA1780911104809388 -:102B800086020C944B2180910F04813221F58091B3 -:102B9000E800877F8093E8000E94DA178091120492 -:102BA00080938903089580910F04813AA1F4809164 -:102BB000E800877F8093E8008091E80080FFFCCFE9 -:102BC000809189038093F1008091E8008E77809353 -:102BD000E8000C94DA17089584B7877F84BF88E1F2 -:102BE0000FB6F89480936000109260000FBE90E0E2 -:102BF00080E80FB6F89480936100909361000FBE57 -:102C00000E947D1B0E942B180E9488188091E20070 -:102C100084608093E20078940E940E1B0E947F1BC8 -:102C20008CE792E00E94291B80910E04853069F4A4 -:102C30000E948A2780910C048823B1F30E94B82750 -:102C4000882391F30E948016EFCF0E94871BECCF60 -:102C5000292F332723303105C9F064F421303105A1 -:102C600081F02230310509F043C08DE690E022E882 -:102C700038E042C021323105F1F02232310541F114 -:102C800037C082E190E02FEE38E036C099278130DE -:102C9000910541F08230910541F0892B49F5EEE72D -:102CA000F8E005C0E0E5F8E002C0E6E2F8E0849173 -:102CB00090E09F0121C06430D8F4E62FF0E0EE0FE1 -:102CC000FF1FEE5FFC4F2081318189E090E014C04E -:102CD000643070F470E0FB01EE0FFF1FE650FD4F13 -:102CE00020813181FB01EA50FD4F808190E004C0DA -:102CF00080E090E020E030E0FA0131832083089505 -:102D000080E189BD82E189BD09B400FEFDCF8091DB -:102D1000D8008F7D8093D8008091E00082608093FE -:102D2000E0008091E00081FDFCCF0895CF92DF921A -:102D3000EF92FF920F931F93CF93DF93EC018B01E0 -:102D40006A010E94F917811133C0C114D10439F00E -:102D5000F60180819181081B190BC80FD91FE12C46 -:102D6000F12C0115110519F18091E80085FD16C0BF -:102D70008091E8008E778093E800C114D10449F077 -:102D8000F60180819181E80EF91EF182E08285E0F2 -:102D90000FC00E94F917882321F30AC089918093FC -:102DA000F10001501109FFEFEF1AFF0ADACF80E0BE -:102DB000DF91CF911F910F91FF90EF90DF90CF9017 -:102DC000089520911504309116042617370748F00E -:102DD0006115710539F42091E8002E772093E80001 -:102DE00001C0B90140E061157105A9F120910E04FF -:102DF000222309F443C0253009F442C02091E800A1 -:102E000023FD40C02091E80022FD32C02091E8005F -:102E100020FFE9CF4091F3002091F20030E0342B05 -:102E2000FC01CF016115710559F02830310540F4DE -:102E300081918093F100615071092F5F3F4FF1CF75 -:102E400041E02830310509F040E02091E8002E777C -:102E50002093E800C8CF4111C9CF0AC080910E0469 -:102E6000882361F0853061F08091E80083FD0AC01D -:102E70008091E80082FFF2CF80E0089582E008951B -:102E800083E0089581E0089520911504309116049F -:102E90002617370748F06115710539F42091E800CD -:102EA0002E772093E80001C0B901FC0120E06115F4 -:102EB000710591F180910E04882309F440C085309A -:102EC00009F43FC08091E80083FD3DC08091E80097 -:102ED00082FD2FC08091E80080FFE9CF2091F300B0 -:102EE0008091F20090E0922B6115710559F08830C5 -:102EF000910540F424912093F100319661507109BD -:102F00000196F2CF21E0089709F020E08091E800D7 -:102F10008E778093E800CBCF2111CCCF0AC080916F -:102F20000E04882361F0853061F08091E80083FD14 -:102F30000AC08091E80082FFF2CF80E0089582E02D -:102F4000089583E0089581E00895982F973058F50B -:102F50009093E900981739F07091EC002091ED0002 -:102F60005091F00003C0242F762F50E021FF19C0AC -:102F70003091EB003E7F3093EB003091ED003D7FD0 -:102F80003093ED003091EB0031603093EB007093A3 -:102F9000EC002093ED005093F0002091EE0027FF0D -:102FA00007C09F5FD3CF8F708093E90081E00895C1 -:102FB00080E0089580910F0487FF11C08091E800A0 -:102FC00082FD05C080910E048111F8CF11C080915F -:102FD000E8008B770BC080910E04882349F0809124 -:102FE000E80080FFF8CF8091E8008E778093E800BA -:102FF00008952091E4003091E50095E64091EC00C1 -:10300000842F817040FF22C08091E80080FD1CC0A9 -:1030100080910E04882391F0853091F08091EB002F -:1030200085FD10C04091E4005091E5004217530720 -:1030300029F39A01915011F784E0089582E00895F0 -:1030400083E0089581E0089580E008954091E800CC -:1030500042FFDECF08950E9499180E94A118E0EE69 -:10306000F0E0808181608083E8EDF0E080818F77FF -:10307000808319BCA7EDB0E08C918E7F8C9380810A -:103080008F7E808310920D0408950F931F93CF932A -:10309000DF930E9499180E94A118C8EDD0E08881A2 -:1030A0008F77888388818068888388818F7D8883F3 -:1030B00019BC10920E0410920A0410920C04109283 -:1030C0000B0400EE10E0F80180818B7F8083888103 -:1030D0008160888342E060E080E00E94A517E1EE15 -:1030E000F0E080818E7F8083E2EEF0E0808181607D -:1030F0008083808188608083F80180818E7F8083D7 -:10310000888180618883DF91CF911F910F9108950D -:10311000E8EDF0E080818F7E8083E7EDF0E0808154 -:103120008160808384E082BF81E080930D040C94F1 -:103130004518E8EDF0E080818E7F80831092E200F8 -:1031400008951092DA001092E10008951F920F92F4 -:103150000FB60F9211242F933F934F935F936F936A -:103160007F938F939F93AF93BF93EF93FF93809140 -:10317000E10082FF0BC08091E20082FF07C08091D6 -:10318000E1008B7F8093E1000E940D1B8091DA00AB -:1031900080FF1FC08091D80080FF1BC08091DA00A3 -:1031A0008E7F8093DA008091D90080FF0DC080E18E -:1031B00089BD82E189BD09B400FEFDCF81E0809325 -:1031C0000E040E94111505C019BC10920E040E9435 -:1031D0001F158091E10080FF19C08091E20080FFFF -:1031E00015C08091E2008E7F8093E2008091E20022 -:1031F00080618093E2008091D80080628093D80043 -:1032000019BC85E080930E040E9423158091E10093 -:1032100084FF30C08091E20084FF2CC080E189BD32 -:1032200082E189BD09B400FEFDCF8091D8008F7D79 -:103230008093D8008091E1008F7E8093E10080919F -:10324000E2008F7E8093E2008091E20081608093B3 -:10325000E20080910A04882311F084E007C0809185 -:10326000E30087FD02C081E001C083E080930E048B -:103270000E9424158091E10083FF29C08091E20023 -:1032800083FF25C08091E100877F8093E10082E089 -:1032900080930E0410920A048091E1008E7F809347 -:1032A000E1008091E2008E7F8093E2008091E20055 -:1032B00080618093E20042E060E080E00E94A51718 -:1032C0008091F00088608093F0000E942215FF91A9 -:1032D000EF91BF91AF919F918F917F916F915F918E -:1032E0004F913F912F910F900FBE0F901F90189507 -:1032F0001F920F920FB60F9211242F933F934F936B -:103300005F936F937F938F939F93AF93BF93CF936D -:10331000DF93EF93FF93C091E900CF708091EC00B1 -:10332000D82FD17080FDD0E81092E9008091F00094 -:10333000877F8093F00078940E94BC191092E90076 -:103340008091F00088608093F000CD2BCF70C09307 -:10335000E900FF91EF91DF91CF91BF91AF919F91E4 -:103360008F917F916F915F914F913F912F910F902E -:103370000FBE0F901F9018951F93CF93DF93CDB77B -:10338000DEB7AA970FB6F894DEBF0FBECDBFEFE051 -:10339000F4E088E08E0F9091F10091938E13FBCFB3 -:1033A0000E943A158091E80083FF1FC180910F04AD -:1033B00090911004492F50E04A30510508F015C192 -:1033C000FA01E857FF4F0C948431803881F082383D -:1033D00009F00BC1809113048F708093E9008091F4 -:1033E000EB0085FB882780F91092E90006C08091E8 -:1033F0000B0490910C04911182609091E800977FEA -:103400009093E8008093F1001092F100C8C0282F3B -:103410002D7F09F0EAC0882319F0823061F0E5C001 -:1034200080911104813009F0E0C0933009F080E010 -:1034300080930C042BC080911104811127C08091CE -:1034400013048F7009F4D1C08093E9002091EB0040 -:1034500020FF1CC0933021F48091EB00806214C0E7 -:103460009091EB0090619093EB0021E030E0A90196 -:1034700002C0440F551F8A95E2F74093EA0010926C -:10348000EA008091EB0088608093EB001092E900E5 -:103490008091E800877F86C08111A7C01091110438 -:1034A0001F778091E3008078812B8093E3008091E7 -:1034B000E800877F8093E8000E94DA178091E80097 -:1034C00080FFFCCF8091E30080688093E3001111BE -:1034D00002C082E001C083E080930E0486C0805861 -:1034E000823008F082C080911104909112048C3DCA -:1034F00053E0950779F583E08A838AE289834FB7A1 -:10350000F894DE01139620E03EE051E2E32FF0E074 -:1035100050935700E49120FF03C0E295EF703F5FA6 -:10352000EF708E2F90E0EA3010F0C79601C0C09681 -:103530008D939D932F5F243149F74FBF8091E80011 -:10354000877F8093E8006AE270E0CE0101960E94D6 -:10355000E11614C0AE014F5F5F4F609113040E94EB -:103560002816BC01009709F440C09091E800977FAD -:103570009093E80089819A810E9444178091E80025 -:103580008B778093E80031C0803879F58091E8002E -:10359000877F8093E80080910A048093F1008091F6 -:1035A000E8008E778093E8000E94DA171EC0811130 -:1035B0001CC0909111049230C0F48091E800877F84 -:1035C0008093E80090930A040E94DA1780910A041D -:1035D000811106C08091E30087FD02C081E001C037 -:1035E00084E080930E040E9426158091E80083FFFA -:1035F0000AC08091E800877F8093E8008091EB000B -:1036000080628093EB00AA960FB6F894DEBF0FBEDF -:10361000CDBFDF91CF911F9108950895CF938091F1 -:103620000E048823A1F0C091E900CF709091EC00C6 -:10363000892F817090FD80E8C82B1092E90080915D -:10364000E80083FD0E94BC19CF70C093E900CF91C0 -:10365000089590938F0380938E030895E0918E03D5 -:10366000F0918F03309721F00190F081E02D0994C3 -:1036700080E00895E0918E03F0918F03309721F060 -:103680000280F381E02D09940895E0918E03F0917A -:103690008F03309721F00480F581E02D099408957F -:1036A00020918C0330918D038217930771F09093D2 -:1036B0008D0380938C03E0918E03F0918F033097FC -:1036C00021F00680F781E02D0994089520918A0366 -:1036D00030918B038217930771F090938B03809343 -:1036E0008A03E0918E03F0918F03309721F00084DC -:1036F000F185E02D0994089508950C947C1B0E9497 -:1037000004280E949A0B0E948A280C94452D4F92FF -:103710005F927F928F929F92AF92BF92CF92DF92F1 -:10372000EF92FF920F931F93CF93DF93CDB7DEB746 -:103730002A970FB6F894DEBF0FBECDBF0E94890C4A -:1037400091E9C92E93E0D92E00E010E0AA24A394B9 -:10375000B12C702E802F0E94D20D4C01F6014190A9 -:1037600051906F014826592641145104B1F40F5F5E -:103770001F4F0430110569F78FEF89838A831B82FD -:103780000E940D288160782F9D838C8349815A8106 -:103790006B818D810E94401C3AC08091ED0381FDB8 -:1037A0000E94DB0D20E030E07501022E02C0EE0C1D -:1037B000FF1C0A94E2F7C70184219521892B09F1A6 -:1037C0002E837F828E209F2091E0892809F490E04B -:1037D00098870E940D288160782F9A8789874E816B -:1037E0005F8168858A850E94401C000F111FF801C7 -:1037F000EF56FC4F80819181E826F926F182E08224 -:1038000006C02F5F3F4F2C30310571F6B0CF0E94BC -:10381000762A109190030E942E1B1817D9F00E944F -:103820002E1B809390032A960FB6F894DEBF0FBE2E -:10383000CDBFDF91CF911F910F91FF90EF90DF905F -:10384000CF90BF90AF909F908F907F905F904F9060 -:103850000C94D20A2A960FB6F894DEBF0FBECDBFE5 -:10386000DF91CF911F910F91FF90EF90DF90CF905C -:10387000BF90AF909F908F907F905F904F900895F2 -:10388000CF93DF93CDB7DEB72B970FB6F894DEBF9B -:103890000FBECDBF4F83588769877A878B87DE013C -:1038A000119686E0FD0111928A95E9F785E0FE0107 -:1038B000379601900D928A95E1F749815A816B8183 -:1038C0007C818D819E810E94E5232B960FB6F89412 -:1038D000DEBF0FBECDBFDF91CF910895CF93882378 -:1038E00009F4C2C0C82F823859F40E942E1B81FDF2 -:1038F000BBC089E30E948E260E945B2789E30CC02F -:10390000833879F40E942E1B80FDAEC083E50E94AF -:103910008E260E945B2783E50E94D026CF910C94CF -:103920005B27843859F40E942E1B82FD9DC087E4DA -:103930000E948E260E945B2787E4EECF8CEF8C0FCF -:10394000813A48F48C2F0E94AD2C81118DC08C2FB0 -:103950000E948E26E3CF80E28C0F883048F4C77037 -:1039600081E001C0880FCA95EAF70E941427D6CFDC -:103970008BE58C0F833078F4C53A29F0C63A31F0E4 -:1039800083E890E005C081E890E002C082E890E022 -:10399000CF910C94501B88E58C0F833108F064C0E4 -:1039A000C83A39F1C93A41F1CA3A49F1CB3A51F131 -:1039B000CC3A59F1CD3A61F1C03B69F1CE3A71F19F -:1039C000CF3A79F1C13B81F1C23B89F1C33B91F11F -:1039D000C43B99F1C53BA1F1C63BA9F1C73BB1F18D -:1039E000C83BB9F1C93BC1F1CA3BC9F180E090E0E5 -:1039F00038C082EE90E035C089EE90E032C08AEEA9 -:103A000090E02FC085EB90E02CC086EB90E029C0C1 -:103A100087EB90E026C08CEC90E023C08DEC90E02A -:103A200020C083E891E01DC08AE891E01AC082E9D5 -:103A300091E017C084E991E014C081E292E011C0E6 -:103A400083E292E00EC084E292E00BC085E292E055 -:103A500008C086E292E005C087E292E002C08AE2F6 -:103A600092E0CF910C94661BCF910895882309F4BE -:103A70004BC0823859F40E942E1B81FF45C089E358 -:103A80000E948E260E945B2789E30CC0833871F464 -:103A90000E942E1B80FF38C083E50E948E260E9464 -:103AA0005B2783E50E94D0260C945B27843859F469 -:103AB0000E942E1B82FF28C087E40E948E260E944F -:103AC0005B2787E4EFCF9CEF980F913A58F390E291 -:103AD000980F983050F4877091E001C0990F8A9543 -:103AE000EAF7892F0E941A27DFCF9BE5980F9330C2 -:103AF00020F480E090E00C94501B885A833120F42D -:103B000080E090E00C94661B0895882321F00E94C9 -:103B100014270C945B270895882321F00E941A270C -:103B20000C945B270895BF92CF92DF92EF92FF92A1 -:103B30000F931F93CF93DF9300D000D000D0CDB769 -:103B4000DEB725E0FC01DE01119601900D922A9569 -:103B5000E1F7FC01D08011810281258122952F702F -:103B600043815481452B09F472C31F3F21F4FFEFB9 -:103B7000DF1609F46CC37C012E830E949B07D98257 -:103B80001A8369817A81802F0E948A26182FB92E84 -:103B90000E943F260E9406252E81002319F00E94D4 -:103BA00031272E81EB2DE295EF70F0E0EE56FF4FBE -:103BB0000C9484318B2D807F9B2D9F70F92E882350 -:103BC00019F0F29480EFF822002389F0FF2009F425 -:103BD0007CC280E2810F883020F48F2D0E94142750 -:103BE00003C08F2D0E9424270E945B276EC2812F65 -:103BF0000E94361DFF2009F42AC3105E8F2D183055 -:103C000018F40E941A2702C00E942A2726960FB68F -:103C1000F894DEBF0FBECDBFDF91CF911F910F9102 -:103C2000FF90EF90DF90CF90BF900C945B278B2D8F -:103C3000807F9B2D9F70803211F4892F03C0892FC4 -:103C40008295807F112319F0113011F12BC00023D0 -:103C5000A9F0222389F1213079F526960FB6F89440 -:103C6000DEBF0FBECDBFDF91CF911F910F91FF90AF -:103C7000EF90DF90CF90BF900C944427222319F04F -:103C8000213009F4E4C28E830E9447278E819BC1B4 -:103C9000002321F0263008F0DAC20EC0253008F0EB -:103CA000D6C291C10023C9F0222331F0F7019581DA -:103CB00090FF0BC29F70958326960FB6F894DEBFD7 -:103CC0000FBECDBFDF91CF911F910F91FF90EF906D -:103CD000DF90CF90BF900C94851D222309F473C10F -:103CE00009C22B2D26952695237030E0211531052C -:103CF00021F021303105D1F0AAC2002321F0812F1B -:103D00009B2D937002C080E090E026960FB6F89449 -:103D1000DEBF0FBECDBFDF91CF911F910F91FF90FE -:103D2000EF90DF90CF90BF900C94501B002321F0B8 -:103D3000812F9B2D937002C080E090E026960FB6F5 -:103D4000F894DEBF0FBECDBFDF91CF911F910F91D1 -:103D5000FF90EF90DF90CF90BF900C94661B812F67 -:103D6000002319F00E947E2902C00E94E6292696AF -:103D70000FB6F894DEBF0FBECDBFDF91CF911F917C -:103D80000F91FF90EF90DF90CF90BF900C946B2A33 -:103D90008B2D837009F07BC0011159C2812F829550 -:103DA00086958770880F880F912F9F70C92ED12C10 -:103DB000E12CF12C082E04C0CC0CDD1CEE1CFF1CE9 -:103DC0000A94D2F714FF12C04FE050E060E070E0B8 -:103DD00004C0440F551F661F771F8A95D2F7CB0189 -:103DE000BA01609570958095909503C060E070E091 -:103DF000CB012B2D269526952370422F50E0423083 -:103E00005105D9F04330510569F16C297D298E297E -:103E10009F294130510551F126960FB6F894DEBF27 -:103E20000FBECDBFDF91CF911F910F91FF90EF900B -:103E3000DF90CF90BF900C942D256C297D298E2981 -:103E40009F2926960FB6F894DEBF0FBECDBFDF9137 -:103E5000CF911F910F91FF90EF90DF90CF90BF9087 -:103E60000C9449250E942D25C701B60126960FB650 -:103E7000F894DEBF0FBECDBFDF91CF911F910F91A0 -:103E8000FF90EF90DF90CF90BF900C94112500230E -:103E900019F08B2D817001C08695882309F4D7C154 -:103EA000812F829586958770880F880F912F9F703C -:103EB000C92ED12CE12CF12C082E04C0CC0CDD1C19 -:103EC000EE1CFF1C0A94D2F714FF12C04FE050E022 -:103ED00060E070E004C0440F551F661F771F8A958D -:103EE000D2F7CB01BA01609570958095909503C08B -:103EF00060E070E0CB012B2D269526952370422F94 -:103F000050E042305105D9F04330510569F16C2938 -:103F10007D298E299F294130510551F126960FB6F2 -:103F2000F894DEBF0FBECDBFDF91CF911F910F91EF -:103F3000FF90EF90DF90CF90BF900C9407266C29F4 -:103F40007D298E299F2926960FB6F894DEBF0FBED5 -:103F5000CDBFDF91CF911F910F91FF90EF90DF9038 -:103F6000CF90BF900C9423260E940726C701B6016C -:103F700026960FB6F894DEBF0FBECDBFDF91CF916E -:103F80001F910F91FF90EF90DF90CF90BF900C9416 -:103F9000EB25103F49F118F4103E48F491C0123F50 -:103FA00009F453C0E8F1133F09F464C089C01F70DD -:103FB0008B2D8F71002321F00E948425812F7CCED0 -:103FC0000E94A525812F26960FB6F894DEBF0FBE5E -:103FD000CDBFDF91CF911F910F91FF90EF90DF90B8 -:103FE000CF90BF900C948C1D0023B1F0253008F0C9 -:103FF0002EC18B2D8F7126960FB6F894DEBF0FBEA3 -:10400000CDBFDF91CF911F910F91FF90EF90DF9087 -:10401000CF90BF900C94CA25263008F018C1E9CF84 -:104020000023A9F08B2D8F7126960FB6F894DEBF72 -:104030000FBECDBFDF91CF911F910F91FF90EF90F9 -:10404000DF90CF90BF900C948425002359F38B2DE3 -:104050008F7126960FB6F894DEBF0FBECDBFDF91ED -:10406000CF911F910F91FF90EF90DF90CF90BF9075 -:104070000C94A525002399F08B2D8F7126960FB6F1 -:10408000F894DEBF0FBECDBFDF91CF911F910F918E -:10409000FF90EF90DF90CF90BF900C946F25269605 +:100770000000000000000000000000000000010078 +:100780000050010001000100010001000100010012 +:10079000010001004C00010001000100073006309B +:1007A000135012500030013002300C3001000100B3 +:1007B0000B300A300930083001000100010001004F +:1007C0000100010001000100010001000100010021 +:1007D00001000100010001000100010001002803E7 +:1007E000540068006500200050006C0061006E003D +:1007F00063006B0020004B006500790062006F0011 +:1008000061007200640000002C034F00720074004D +:1008100068006F006C0069006E0065006100720086 +:1008200020004B006500790062006F0061007200DB +:100830006400730000000403090409026D00040150 +:1008400000A0FA09040000010301010009211101BF +:100850000001223F000705810308000A0904010086 +:100860000103010200092111010001224D000705C9 +:10087000820308000A0904020001030000000921A4 +:10088000110100012236000705830308000A09044C +:1008900003000103000000092111010001223900B9 +:1008A000070584031000011201100100000008ED8B +:1008B000FE606001000102000105010906A10105B9 +:1008C0000719E029E7150025019508750181020542 +:1008D0000819012905950575019102950175039186 +:1008E0000105071900297715002501957875018103 +:1008F00002C005010980A101850216010026B7008A +:100900001A01002AB700751095018100C0050C0975 +:1009100001A1018503160100269C021A01002A9CF0 +:1009200002751095018100C005010902A1010901AC +:10093000A100050919012905150025019505750175 +:100940008102950175038101050109300931158185 +:10095000257F95027508810609381581257F950147 +:1009600075088106050C0A38021581257F950175E9 +:10097000088106C0C005010906A101050719E02983 +:10098000E71500250195087501810295017508811B +:100990000105081901290595057501910295017553 +:1009A0000391010507190029FF150025FF9506751C +:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B +:1009C00004B603FE24C08091690490916A04A0914A +:1009D0006B04B0916C048730904BA740B04BB9F4D6 +:1009E0001092690410926A0410926B0410926C04C5 +:1009F00014BE84B7877F84BF88E10FB6F8948093D4 +:100A00006000109260000FBEE0E0F8E3099513E08B +:100A1000A0E0B1E0E2E4F4E602C005900D92A23657 +:100A2000B107D9F714E0A2E6B3E001C01D92A936E0 +:100A3000B107E1F70E94FD150C941F320C940000E1 +:100A4000279A2F988FEF9FEF9093870080938600CF +:100A50008AE08093800089E1809381000C94562D78 +:100A6000282F81110BC080918000877F80938000A8 +:100A700010928D0010928C002F9808952F988091DD +:100A80008000886080938000233019F48FEF9FEFFF +:100A90000FC083E090E0821B9109880F991F2FEF10 +:100AA0003FEFA90102C0569547958A95E2F7CA0122 +:100AB00090938D0080938C000895CF93DF93EC0189 +:100AC0000E94ED28BE0180E090E0DF91CF910C9470 +:100AD00018250F931F93462F50E04E30510508F014 +:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499 +:100AF000E331882309F4D3C000E010E0980140E01E +:100B000064E070E089E292E00E942B1281E090E0C4 +:100B10000FC0882309F4C3C000E010E0980140E052 +:100B200066E070E089EB91E00E942B1282E090E099 +:100B30000E945D05B4C0882309F4B1C000E010E054 +:100B4000980140E068E070E089EE91E00E942B128D +:100B500084E090E0EDCF882311F083E005C083E0CE +:100B60000CC0882349F084E00E94952540E164E0B0 +:100B700083E00E946D0A93C084E00E94B625F6CF00 +:100B8000882331F085EE0E947F1C0E94AD2D87C026 +:100B900085EE0E94471D83C0882309F480C00E940F +:100BA000BF0D7DC0882309F47AC00E94B80D00E013 +:100BB00010E0980140E065E070E089E492E027C031 +:100BC000882309F46CC085E00E94B6250E94E00DE0 +:100BD00066C0882309F463C000E010E0980140E09B +:100BE00068E070E089E191E00E942B1285E00E94AC +:100BF000952555C0882309F452C00E94BE1200E01A +:100C000010E0980140E068E070E089E191E00E9426 +:100C10002B1245C0882309F442C00E94C912EFCFAD +:100C20008823E9F100E010E0980140E066E070E020 +:100C300089E891E00E942B1284E00E94B62583E0AF +:100C40000E94B62580E10E94B62585E00E94B62567 +:100C50000E94E00D86E00E9495250E94DA2881110D +:100C600002C00E94B6280E94F22890E09093680487 +:100C7000809367048068809367040E94F6280FC001 +:100C8000882369F000E010E0980140E066E070E041 +:100C900089E591E00E942B1286E00E94B62580E053 +:100CA00090E01F910F9108950F931F932FEF89EFFD +:100CB00090E0215080409040E1F700C0000000E04B +:100CC00010E0980140E065E070E089E492E00E9465 +:100CD0002B121F910F9108950F931F9300E010E0C6 +:100CE000980140E063E070E081E091E00E942B1207 +:100CF0002FEF82E597E0215080409040E1F700C05F +:100D000000001F910F910895CF92DF92EF92FF9212 +:100D10000F931F93CF93DF93CDB7DEB7CC58D10994 +:100D20000FB6F894DEBF0FBECDBF2091210425FF82 +:100D3000C5C08C01FC01928180910001992309F4C6 +:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF +:100D50000D929A95E1F7F8019081E0916203F0918C +:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6 +:100D70003D1FE20FF31F60817181680F711D88278D +:100D800077FD8095982F0E94F12E20E030E040E41E +:100D900051E40E94562E6B017C01F801218184E010 +:100DA00090E0821B9109BC01882777FD8095982FE0 +:100DB0000E94F12E9B01AC01C701B6010E94EE2DED +:100DC0009B01AC0160E070E080E090E40E94643040 +:100DD00020E030E04CE551E40E9401304FE050E06B +:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103 +:100DF000CF911F910F91FF90EF90DF90CF900C94C7 +:100E0000CB1196E4EEE8F2E0DE01119601900D922E +:100E10009A95E1F7F8019081E0916203F091630304 +:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9 +:100E3000E20FF31F60817181680F711D882777FDB4 +:100E40008095982F0E94F12E20E030E040E451E49C +:100E50000E94562E6B017C01F801218184E090E014 +:100E6000821B9109BC01882777FD8095982F0E94ED +:100E7000F12E9B01AC01C701B6010E94EE2D9B0132 +:100E8000AC0160E070E080E090E40E94643020E01B +:100E900030E04CE551E40E940130C457DF4F0FB6FB +:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0 +:100EB000FF90EF90DF90CF900C94130EC457DF4F4C +:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B +:100ED0000F91FF90EF90DF90CF90089508950E94BA +:100EE00020056E9A769A0C9454060C946E070C9416 +:100EF00084060895880F991FFC01E250F040859107 +:100F000094910895880F991FFC01E258FE4F859136 +:100F1000949108950F931F93CF93DF93EC01811564 +:100F200020E49207A0F5C11580E3D80708F0E1C0DE +:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C +:100F4000D10578F4C53AD10508F074C0C130D10597 +:100F500009F46DC008F4DEC1C430D10508F0DDC16C +:100F6000D9C1CB3BD10508F470C0D4C1C11590E202 +:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA +:100F8000C03FD10508F4C6C18E01106506C2C1304C +:100F900080E5D80709F4BDC068F5C13120E4D20767 +:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0 +:100FB000CF70DD278E01146DF0C1C33120E4D2075C +:100FC00009F4A4C008F49FC0C115D04509F0A2C11E +:100FD0000E945C210E94E00D0E946C069FEF24E3BA +:100FE0008CE0915020408040E1F700C000000E945A +:100FF0007928D3C1C11520E6D20730F4C11581E5A7 +:10100000D80708F48CC02DC1C11590E7D90708F4A2 +:1010100081C1C11520E8D20708F478C1C11580E963 +:10102000D80708F077C1DF708E01106AB6C101E001 +:1010300010E0B3C1C53AD10509F471C1C63AD10572 +:1010400009F070C102E810E4A8C1C83AD10509F45A +:101050006CC1C93AD10509F46BC1CA3AD10509F48A +:101060006AC1CB3AD10509F469C1CC3AD10509F47A +:1010700068C1CD3AD10509F467C1C03BD10509F477 +:1010800066C1CE3AD10509F465C1CF3AD10509F45C +:1010900064C1C13BD10509F463C1C23BD10509F468 +:1010A00062C1C33BD10509F461C1C43BD10509F458 +:1010B00060C1C53BD10509F45FC1C63BD10509F448 +:1010C0005EC1C73BD10509F45DC1C83BD10509F438 +:1010D0005CC1C93BD10509F45BC1CA3BD10509F428 +:1010E0005AC100E014E459C1CE019F700E948207EA +:1010F00055C1DD278E01106C50C100E011ED4DC1CE +:1011000000E010ED4AC100E012ED47C100E013ED30 +:1011100044C180913D04816080933D043EC10E94A2 +:10112000DA28811102C00E94B6280E94F22890E0BD +:101130009093680480936704C23090E5D90721F446 +:1011400080916704816086C0C43020E5D20721F415 +:101150008091670482607EC0C63080E5D80721F4A4 +:1011600080916704846076C0C83090E5D90719F48F +:101170008091670427C0CA3020E5D20721F480910E +:101180006704806167C0CC3080E5D80721F4809186 +:10119000670480625FC0CE3090E5D90721F480916A +:1011A0006704806457C0C03120E5D20721F48091E4 +:1011B000670480684FC0C23180E5D80729F4809168 +:1011C00067048460886046C0C33090E5D90721F485 +:1011D000809167048E7F3EC0C53020E5D20721F4A0 +:1011E000809167048D7F36C0C73080E5D80721F431 +:1011F000809167048B7F2EC0C93090E5D90719F420 +:101200008091670426C0CB3020E5D20721F480917D +:1012100067048F7E1FC0CD3080E5D80721F4809110 +:1012200067048F7D17C0CF3090E5D90721F48091F6 +:1012300067048F7B0FC0C13120E5D20721F4809174 +:1012400067048F7707C0C331D04531F480916704BC +:101250008B7F877F80936704809167040E94F628C4 +:101260009CC08D2F99278F70992781309105D9F4D3 +:101270009E012370332702C0880F991F2A95E2F739 +:101280009C688E0144E0000F111F4A95E1F700278A +:101290001370802B912B53E0CC0FDD1F5A95E1F793 +:1012A000C076DD272FC08230910531F4DC2FCC27AA +:1012B0008E01016F106A71C08330910569F4CE010F +:1012C0008370992701E010E002C0000F111F8A957A +:1012D000E2F7C8019C680FC0049709F05EC0CE0118 +:1012E0008370992701E010E002C0000F111F8A955A +:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9 +:10130000C07ED7708C010C2B1D2B47C0DF708E0167 +:10131000106243C000E010E040C08E013EC001E812 +:1013200010E43BC003E810E438C002EE14E435C01A +:1013300009EE14E432C00AEE14E42FC005EB14E405 +:101340002CC006EB14E429C007EB14E426C00CEC17 +:1013500014E423C00DEC14E420C003E815E41DC020 +:101360000AE815E41AC002E915E417C004E915E417 +:1013700014C001E216E411C003E216E40EC004E258 +:1013800016E40BC005E216E408C006E216E405C048 +:1013900007E216E402C00AE216E4C801DF91CF9129 +:1013A0001F910F9108959CE0799FF001112490E323 +:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7 +:1013C000E258FE4F85919491803E9105E0F4803C77 +:1013D000910558F58133910509F46FC048F48932BD +:1013E000910509F463C08A32910509F46DC072C099 +:1013F00089339105E9F082389105D1F08533910563 +:1014000009F44DC067C0833E910581F138F4803EF8 +:101410009105B9F0823E9105D9F05CC0863E9105F8 +:1014200061F1873E9105A1F155C00E947A070895A8 +:101430002091670420FD02C021FF4CC080EE90E0A7 +:1014400049C08091670480FFF9CF89E390E042C0F2 +:101450008091670482FF0EC08091670484FF03C0FF +:1014600080E090E037C083EE90E034C08091670464 +:1014700082FFF2CF82EE90E02DC08091670483FF5F +:101480000BC08091670484FDEBCF87EE90E022C013 +:101490008091670483FFF5CF86EE90E01BC08091BA +:1014A000670485FF07C089E290E014C0809167045B +:1014B00085FFF9CF85E390E00DC08091670486FF3A +:1014C00007C08AE290E006C08091670486FFF9CFEA +:1014D00081E390E00E948A070895CF92DF92EF9215 +:1014E000FF920F931F9301E010E020E030E06801CD +:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0 +:1015000004C0000F111F221F331F6A95D2F70C2948 +:101510001D292E293F29C0902104D0902204E0905B +:101520002304F0902404C022D122E222F322842F4B +:10153000C016D106E206F30641F41F910F91FF9009 +:10154000EF90DF90CF900C9495251F910F91FF9015 +:10155000EF90DF90CF900C94B62508950C94AD0ACF +:101560005F926F927F928F929F92AF92BF92CF9233 +:10157000DF92EF92FF920F931F93CF93DF93CDB73C +:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1 +:1015900001966C014E0199E0890E911C20E030E02B +:1015A00040E050E060E070E000E010E0E12CF12C61 +:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49 +:1015C000F2E0A62DB52D872D01900D928A95E1F7B9 +:1015D000F601819191916F01FC01E07FFF27E032DC +:1015E000F10559F48F709927F50102C0EE0FFF1F26 +:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465 +:101600008F709927F50102C0EE0FFF1F8A95E2F750 +:101610000E2B1F2B29C0E034F10559F48F70992748 +:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC +:101630001BC0E035F10559F48F709927F50102C000 +:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1 +:10165000F10551F48F709927F50102C0EE0FFF1FBD +:101660008A95E2F72E2B3F2BC814D90409F0A7CF97 +:1016700084B19E2D9095892384B985B1E82AE5B877 +:1016800087B1902F9095892387B988B1082B08B925 +:101690008AB1962F909589238AB98BB1682B6BB943 +:1016A0008DB1942F909589238DB98EB1482B4EB969 +:1016B00080B3922F9095892380BB81B3282B21BBC7 +:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145 +:1016D0001F910F91FF90EF90DF90CF90BF90AF9050 +:1016E0009F908F907F906F905F9008955F926F9220 +:1016F0007F928F929F92AF92BF92CF92DF92EF92A2 +:10170000FF920F931F93CF93DF93CDB7DEB7689708 +:101710000FB6F894DEBF0FBECDBF85B7806885BF1A +:1017200085B7806885BF0E94B00ACE0101966C0122 +:101730004E0199E1890E911C20E030E040E050E03C +:1017400060E070E000E010E0E12CF12C6C2C5D2CEE +:1017500088E1782EAA24A394B12CECEDF2E0A62D1A +:10176000B52D872D01900D928A95E1F7F6018191B3 +:1017700091916F01FC01E07FFF27E032F10559F400 +:101780008F709927F50102C0EE0FFF1F8A95E2F7CF +:10179000EE2AFF2A37C0E033F10559F48F709927FC +:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB +:1017B00029C0E034F10559F48F709927F50102C072 +:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3 +:1017D000F10559F48F709927F50102C0EE0FFF1F34 +:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0 +:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F +:101800002E2B3F2BC814D90409F0A7CF84B19E2DED +:101810009095892384B985B1E82AE5B887B1902FDE +:101820009095892387B988B1082B08B98AB1962F7A +:10183000909589238AB98BB1682B6BB98DB1942FA0 +:10184000909589238DB98EB1482B4EB980B3922FD4 +:101850009095892380BB81B3282B21BB10926D0307 +:1018600010926C03109265031092640310926F0340 +:1018700010926E0310926703109266031092710328 +:101880001092700310926903109268031092730310 +:101890001092720310926B0310926A0368960FB64F +:1018A000F894DEBF0FBECDBFDF91CF911F910F9196 +:1018B000FF90EF90DF90CF90BF90AF909F908F9070 +:1018C0007F906F905F900C946F077F928F929F92A2 +:1018D000AF92BF92CF92DF92EF92FF920F931F933E +:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6 +:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7 +:1019000083E0F82E98E0792EBC2CAD2C01E010E09D +:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6 +:10192000872D01900D928A95E1F7F60181919191B1 +:101930006F019C01207F33272032310591F424B1BF +:101940008F709927A80102C0440F551F8A95E2F7AE +:10195000CA01922F982B94B995B18095892385B9A6 +:1019600053C02033310591F427B18F709927F801C6 +:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E +:1019800097B998B18095892388B93EC02034310534 +:1019900091F42AB18F709927A80102C0440F551FF6 +:1019A0008A95E2F7CA01922F982B9AB99BB180953C +:1019B00089238BB929C02035310591F42DB18F7061 +:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9 +:1019D000922F982B9DB99EB1809589238EB914C002 +:1019E0002036310589F420B38F709927A80102C0F1 +:1019F000440F551F8A95E2F7CA01922F982B90BB8E +:101A000091B38095892381BB50EA5A95F1F7BE01C5 +:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F +:101A2000DE011196882D01900D928A95E1F7FB0158 +:101A300081919191BF01FC01E07FFF27E032F10528 +:101A400011F4E3B113C0E033F10511F4E6B10EC0B7 +:101A5000E034F10511F4E9B109C0E035F10511F404 +:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED +:101A7000992702C0F595E7958A95E2F7E0FD08C041 +:101A8000C801042E02C0880F991F0A94E2F702C011 +:101A900080E090E0282B392B4F5F5F4F4C30510591 +:101AA00009F0BCCFF701808191818217930721F063 +:101AB00031832083909271020E94B00AF2E0EF0E0F +:101AC000F11C4CE6E41643E0F40609F025CF8091C2 +:101AD0007102882361F1815080937102882339F06B +:101AE0008FE99FE00197F1F700C0000020C08091CE +:101AF00064039091650390936D0380936C038091D0 +:101B000066039091670390936F0380936E038091B7 +:101B1000680390916903909371038093700380919F +:101B20006A0390916B0390937303809372030E94F6 +:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B +:101B4000DF91CF911F910F91FF90EF90DF90CF9099 +:101B5000BF90AF909F908F907F900895E82FF0E016 +:101B6000EE0FFF1FE459FC4F808191810895089585 +:101B7000809152048160809352040C9408298091D2 +:101B800052048E7F809352040C9408290E94DA2814 +:101B9000811102C00E94B6280E9404298093520439 +:101BA0003E9A809171008D7F8093710082E08093D6 +:101BB00090008AE18093910081E0809376030895FC +:101BC00080917603811102C00E94C60D1092C60357 +:101BD0001092C503809171008D7F80937100809178 +:101BE00090008F7780939000109288031092870363 +:101BF0001092BF031092C0031092C1031092C2034F +:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E +:101C100011921192119211921D921D9283E0ED3B4F +:101C2000F807B1F70895CF92DF92EF92FF920F93EA +:101C30001F93CF93DF9320918703222309F484C05D +:101C40006B017C0180917603811102C00E94C60D58 +:101C50000DEB13E0C7E0D0E0A7019601F8019291E7 +:101C60008291729162918F010E94522E811131C036 +:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219 +:101C8000118212821382DE01AA0FBB1FA357BC4F21 +:101C900011961C921E92C730D105E9F0219644811D +:101CA0005581668177814083518362837383148277 +:101CB00015821682178212968D919C911397119618 +:101CC0009C938E9313961C921E92129734961296A2 +:101CD000E2CF219708F68091C5039091C603019742 +:101CE00097FD05C09093C6038093C50304C010926E +:101CF000C6031092C5038091C5039091C60320913D +:101D0000C3033091C4032817390724F01092C40389 +:101D10001092C303892BC1F4809171008D7F809351 +:101D20007100809190008F77809390001092BF0394 +:101D30001092C0031092C1031092C2031092BE030E +:101D40001092BD0310928703DF91CF911F910F91E5 +:101D5000FF90EF90DF90CF9008951F920F920FB6F3 +:101D60000F9211244F925F926F927F928F929F9267 +:101D7000AF92BF92CF92DF92EF92FF922F933F9359 +:101D80004F935F936F937F938F939F93AF93BF9383 +:101D9000CF93DF93EF93FF9380918703882309F418 +:101DA0009BC1C091C503D091C6031C161D060CF043 +:101DB00093C14090770350907803609079037090BE +:101DC0007A0320E030E0A901C301B2010E94FD2F97 +:101DD00018160CF065C0C130D10509F452C08091CD +:101DE000C3039091C403BE010E94CF317C01909344 +:101DF000C4038093C3038090890390908A03A090CA +:101E00008B03B0908C0320E030E040E85FE3C50135 +:101E1000B4010E94EE2D6093890370938A0380932E +:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44 +:101E3000E356FC4FA30192016081718182819381FD +:101E40000E94562E20E030E040E05EE30E94013028 +:101E50009B01AC01C501B4010E94FD2F18168CF442 +:101E6000C7010196BE010E94CF319093C4038093B5 +:101E7000C3031092890310928A0310928B0310926D +:101E80008C03E091C303F091C403EE0FFF1FEE0F2C +:101E9000FF1FE356FC4F6081718182819381D0C026 +:101EA000C090BF03D090C003E090C103F090C20384 +:101EB00020E030E0A901C701B6010E94522E21970F +:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3 +:101ED000E356FC4F80809180A280B380A5019401DD +:101EE000C701B6010E94522E87FF31C0A50194019F +:101EF00060E070E08CED93EC0E94562E20E030E024 +:101F000040E451E40E94562E20E030E040E05FE3E0 +:101F10000E9401309B01AC0160E070E080E090E441 +:101F20000E9464309B01AC01C501B4010E940130E4 +:101F30009B01AC01C701B6010E94522E87FF07C06A +:101F4000A701960160E070E08CED93E439C0A50133 +:101F50009401C701B6010E94FD2F18160CF055C060 +:101F6000A501940160E070E08CED93E40E94562E90 +:101F700020E030E040E451E40E94562E20E030E0C2 +:101F800040E05FE30E9401309B01AC0160E070E043 +:101F900080E090E40E9464309B01AC01C501B40173 +:101FA0000E9401309B01AC01C701B6010E94FD2FC8 +:101FB00018165CF5A701960160E070E08CED93ECDB +:101FC0000E94562E20E030E040E451E40E94562E5C +:101FD00020E030E040E05FE30E9401309B01AC0173 +:101FE00060E070E080E090E40E9464309B01AC010E +:101FF000C701B6010E9401306093BF037093C00314 +:102000008093C1039093C20313C0FE01EE0FFF1F24 +:10201000EE0FFF1FE356FC4F80819181A281B381B7 +:102020008093BF039093C003A093C103B093C203F6 +:102030006091BF037091C0038091C1039091C2036E +:1020400020917403309175032F3F4FEF340731F027 +:102050002F5F3F4F30937503209374030E94D41277 +:102060006B017C0120E034E244EF51E40E94522EE7 +:1020700087FF08C086EFC82E88E2D82E84EFE82EAE +:1020800081E4F82E20E030E040E051E4C701B601E1 +:102090000E9401309B01AC0160E074E284E79BE4A4 +:1020A0000E94562E6B017C010E94BE2E70939700F9 +:1020B00060939600209172023091730240917402F5 +:1020C00050917502C701B6010E9401300E94BE2ED8 +:1020D000709399006093980080918803882309F495 +:1020E00033C1C0908303D0908403E0908503F090C7 +:1020F000860320E030E0A901C701B6010E94FD2F50 +:102100001816D4F580917403909175038F3F2FEFCB +:10211000920729F001969093750380937403C70189 +:10212000B6010E94D41220E030E040E051E40E9469 +:1021300001309B01AC0160E074E284E79BE40E9403 +:10214000562E6B017C010E94BE2E70939700609307 +:102150009600209172023091730240917402509166 +:102160007502C701B6010E9401300E94BE2E709315 +:1021700099006093980008C0109297001092960002 +:10218000109299001092980060917D0370917E03E7 +:102190006F5F7F4F70937E0360937D032091960065 +:1021A0003091970080E090E0232BF1F0C0919600F1 +:1021B000D09197000E94EF2E6B017C01BE0180E060 +:1021C00090E00E94EF2E9B01AC0160917F03709123 +:1021D000800380918103909182030E94562E20E01B +:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8 +:1021F00020E030EE4FEF54E460917F037091800354 +:1022000080918103909182030E9401309B01AC0177 +:10221000C701B6010E94FD2F87FD96C080917B0308 +:102220008F5F80937B0390E020914E0430914F04A8 +:1022300082179307A0F080915904882319F0109217 +:102240007B030DC0809171008D7F80937100809120 +:1022500090008F7780939000109288037DC08091CA +:102260007C03C0917B03811128C0C0905304D0909F +:102270005404E0905504F090560420E030E0A901A9 +:10228000C701B6010E94FD2F1816BCF481E08093AF +:102290007C031092830310928403109285031092A2 +:1022A0008603C0927F03D0928003E0928103F09274 +:1022B0008203C150C0937B0343C010927C031092F1 +:1022C000750310927403E0915004F091510448E0BA +:1022D000C49FE00DF11D112480819181A281B38101 +:1022E0008093830390938403A0938503B093860324 +:1022F00020E030E040E85EE364817581868197816B +:102300000E9401306B017C0120E030E048EC52E497 +:1023100060917602709177028091780290917902B3 +:102320000E94562E9B01AC01C701B6010E940130EC +:1023300060937F0370938003809381039093820363 +:1023400010927E0310927D038091520480FD04C0A0 +:102350001092880310928703FF91EF91DF91CF9144 +:10236000BF91AF919F918F917F916F915F914F91AD +:102370003F912F91FF90EF90DF90CF90BF90AF9063 +:102380009F908F907F906F905F904F900F900FBEB7 +:102390000F901F901895CF92DF92EF92FF92CF93FC +:1023A000DF936B017C01EA0180917603811102C009 +:1023B0000E94C60D8091520480FF46C08091C503E3 +:1023C0009091C60308970CF03FC0809171008D7FFB +:1023D000809371008091880381110E94E00D81E05B +:1023E00080938703109275031092740320E030E00D +:1023F000A901C701B6010E94FD2F1816DCF48091D7 +:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7 +:10241000E356FC4FC082D182E282F382FC01EE0FD0 +:10242000FF1FE357FC4FD183C08301969093C603EF +:102430008093C503809171008260809371008091C8 +:102440009000806880939000DF91CF91FF90EF9093 +:10245000DF90CF9008958F929F92AF92BF92CF92CC +:10246000DF92EF92FF920F931F93CF93DF93EC01D4 +:102470007B01D42E4801590180917603811102C05D +:102480000E94C60D8091520480FF6BC08091710044 +:102490008D7F809371008091870381110E94E00DF0 +:1024A00081E080938803D0935104C0935004F0924C +:1024B0004F04E0924E04D0925904809253049092BB +:1024C0005404A0925504B0925604109289031092BD +:1024D0008A0310928B0310928C0310927B038881E5 +:1024E0009981AA81BB818093830390938403A093F5 +:1024F0008503B093860320E030E040E85EE36C8122 +:102500007D818E819F810E9401306B017C0120E0E2 +:1025100030E048EC52E4609176027091770280914D +:102520007802909179020E94562E9B01AC01C7015E +:10253000B6010E94013060937F0370938003809303 +:1025400081039093820310927E0310927D03809109 +:102550007100826080937100809190008068809308 +:102560009000DF91CF911F910F91FF90EF90DF903E +:10257000CF90BF90AF909F908F9008958091C703A8 +:1025800090E0019666E070E00E94CF318093C7032F +:1025900008958091C70390E0019766E070E00E9483 +:1025A000CF318093C70308958F929F92AF92BF92CD +:1025B000CF92DF92EF92FF920F931F93CF93DF930F +:1025C0006B017C01C0917403D0917503BE0180E062 +:1025D00090E00E94EF2E4B015C01A701960160E0A4 +:1025E00070E08CE594E40E94562E9B01AC01C5017D +:1025F000B4010E9401300E94C32E2091C7032330F2 +:1026000009F473C028F4222351F02130E9F02CC1E1 +:10261000243009F4A0C0253009F4E0C025C180E0D1 +:1026200090E0A0E0BFE38093720290937302A093C6 +:102630007402B0937502109277031092780310928F +:10264000790310927A0310C11092770310927803E5 +:102650001092790310927A036431710540F46A3064 +:10266000710560F520E030E040E85EE32BC0693C96 +:10267000710508F0AAC080E090E00E94EF2E20E0F3 +:1026800030E040EA51E40E94ED2D20E030E044E3E8 +:1026900053E40E94562E9B01AC010E94013020E0C1 +:1026A00030E040E05EE30E9401309B01AC0160E05D +:1026B00070E080E09EE30E94ED2D44C020E030E019 +:1026C00040E05FE3C701B6010E9401306B017C016D +:1026D00080E090E0A0E0BEE38093720290937302EA +:1026E000A0937402B0937502BFC01092770310924A +:1026F00078031092790310927A034AE0469F900182 +:10270000479F300D1124C90168EB7BE00E94BB316B +:10271000BC016C5D754077FF03C0719561957109CF +:10272000882777FD8095982F0E94F12E2EE333ECB9 +:102730004EE259E30E94013020E030E040EC5EE3DD +:102740000E94EE2D60937202709373028093740264 +:102750009093750289C010927703109278031092BB +:10276000790310927A03CE0183709927892BE1F0C7 +:10277000BE016170772780E090E00E94EF2E20E09C +:1027800030E040E05EE30E94013020E030E040E4D1 +:102790005FE30E94EE2D6093720270937302809348 +:1027A0007402909375020CC080E090E0A0E0BFE35B +:1027B0008093720290937302A0937402B093750297 +:1027C000C770DD27CD2B09F04FC010927202109216 +:1027D0007302109274021092750246C01092770331 +:1027E000109278031092790310927A0300E010E0BF +:1027F00020E03FE30093720210937302209374026F +:10280000309375026739710578F180E090E00E949D +:10281000EF2E20E030E047E153E40E94ED2D20E070 +:1028200030E04AE754E40E94562E20E030E048E4CD +:1028300052E40E94013020E030E040EA51E40E947E +:10284000332F0E94BE2E660F771F660F771FFB0186 +:10285000EC50FD4F2081318142815381C701B60187 +:102860000E9401306B017C01C701B601DF91CF915D +:102870001F910F91FF90EF90DF90CF90BF90AF909E +:102880009F908F9008958091D8030895CF93DF9300 +:1028900000D01F92CDB7DEB79C0180915E048430DA +:1028A00019F593E099833B832A839093E9008FEF96 +:1028B0009091E800815095FD06C095ED9A95F1F74D +:1028C00000008111F5CF8091E80085FF0DC040E048 +:1028D00050E063E070E0CE0101960E94A71680915F +:1028E000E8008E778093E8000F900F900F90DF91B3 +:1028F000CF910895CF93DF9300D01F92CDB7DEB76D +:1029000020915E04243021F522E029839B838A8371 +:1029100083E08093E9008FEF9091E800815095FD6E +:1029200006C095ED9A95F1F700008111F5CF8091E1 +:10293000E80085FF0DC040E050E063E070E0CE01AC +:1029400001960E94A7168091E8008E778093E80098 +:102950000F900F900F90DF91CF91089520915E041A +:102960002430F1F422E02093E9002FEF3091E800C9 +:10297000215035FD06C035ED3A95F1F700002111E3 +:10298000F5CF2091E80025FF0BC040E050E065E066 +:1029900070E00E94A7168091E8008E778093E8008F +:1029A0000895CF93DF93EC0190915E04943009F089 +:1029B00046C0809184028823D9F0809185028823C3 +:1029C000B9F09093E9008FEF9091E800815095FD68 +:1029D00006C095E19A95F1F700008111F5CF80913D +:1029E000E80085FF2CC040E050E060E170E017C0D7 +:1029F00081E08093E9008FEF9091E800815095FD90 +:102A000006C095ED9A95F1F700008111F5CF809100 +:102A1000E80085FF14C040E050E068E070E0CE01BF +:102A20000E94A7168091E8008E778093E80080E1ED +:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9 +:102A4000CF91089580915D04811109C00E943C18C6 +:102A50000E9499188091E20084608093E2000895BA +:102A600010925D040895089508950C94E12742E0C2 +:102A700061EC81E00E94B61742E061EC82E00E94C6 +:102A8000B61742E061EC83E00E94B61742E161ECC8 +:102A900084E00C94B61780916004833009F455C02B +:102AA00030F4813071F0823009F48EC008958A309C +:102AB00009F47AC08B3009F460C0893009F09CC0F9 +:102AC00020C080915F04813A09F096C08091E800AF +:102AD000877F8093E8008091630490916404892B40 +:102AE00021F460E188EC93E003C060E080E090E0D6 +:102AF00070E00E94F2168091E8008B778093E800E6 +:102B0000089580915F04813209F076C0809163045A +:102B100090916404009719F0039709F06DC08091BB +:102B2000E800877F8093E8008091E80082FD05C07F +:102B300080915E048111F8CF5FC08091F100809395 +:102B4000D8038091E8008B7753C080915F04813A6D +:102B500009F052C08091630490916404892B09F0BC +:102B60004BC08091E800877F8093E8008091E80067 +:102B700080FFFCCF8091840236C080915F04813257 +:102B8000D9F58091630490916404892BA9F5809113 +:102B9000E800877F8093E8000E94EB178091610432 +:102BA000809384020C945C2180915F04813221F532 +:102BB0008091E800877F8093E8000E94EB17809166 +:102BC00062048093D903089580915F04813AA1F44F +:102BD0008091E800877F8093E8008091E80080FF83 +:102BE000FCCF8091D9038093F1008091E8008E772B +:102BF0008093E8000C94EB17089584B7877F84BF17 +:102C000088E10FB6F89480936000109260000FBEC8 +:102C100090E080E80FB6F894809361009093610093 +:102C20000FBE0E948E1B0E943C180E949918809132 +:102C3000E20084608093E20078940E941F1B0E944F +:102C4000901B8AE792E00E943A1B80915E048530D7 +:102C500069F40E949B2780915C048823B1F30E9451 +:102C6000C927882391F30E949116EFCF0E94981BE9 +:102C7000ECCF292F332723303105C9F064F42130FC +:102C8000310581F02230310509F043C08DE690E036 +:102C90002AE338E042C021323105F1F02232310519 +:102CA00041F137C082E190E027EA38E036C0992749 +:102CB0008130910541F08230910541F0892B49F531 +:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A +:102CD000849190E09F0121C06430D8F4E62FF0E0A9 +:102CE000EE0FFF1FE05BFC4F2081318189E090E017 +:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E +:102D0000FC4F20813181FB01EC5BFC4F808190E026 +:102D100004C080E090E020E030E0FA0131832083BD +:102D2000089580E189BD82E189BD09B400FEFDCF2F +:102D30008091D8008F7D8093D8008091E0008260E0 +:102D40008093E0008091E00081FDFCCF0895CF9258 +:102D5000DF92EF92FF920F931F93CF93DF93EC01DB +:102D60008B016A010E940A18811133C0C114D10479 +:102D700039F0F60180819181081B190BC80FD91F0A +:102D8000E12CF12C0115110519F18091E80085FD68 +:102D900016C08091E8008E778093E800C114D104BA +:102DA00049F0F60180819181E80EF91EF182E082FE +:102DB00085E00FC00E940A18882321F30AC0899178 +:102DC0008093F10001501109FFEFEF1AFF0ADACFEB +:102DD00080E0DF91CF911F910F91FF90EF90DF90F6 +:102DE000CF90089520916504309166042617370727 +:102DF00048F06115710539F42091E8002E77209391 +:102E0000E80001C0B90140E061157105A9F1209108 +:102E10005E04222309F443C0253009F442C0209106 +:102E2000E80023FD40C02091E80022FD32C020913F +:102E3000E80020FFE9CF4091F3002091F20030E05C +:102E4000342BFC01CF016115710559F02830310593 +:102E500040F481918093F100615071092F5F3F4FE1 +:102E6000F1CF41E02830310509F040E02091E80041 +:102E70002E772093E800C8CF4111C9CF0AC08091B6 +:102E80005E04882361F0853061F08091E80083FD65 +:102E90000AC08091E80082FFF2CF80E0089582E0CE +:102EA000089583E0089581E00895209165043091AC +:102EB00066042617370748F06115710539F420912B +:102EC000E8002E772093E80001C0B901FC0120E062 +:102ED0006115710591F180915E04882309F440C069 +:102EE000853009F43FC08091E80083FD3DC08091AA +:102EF000E80082FD2FC08091E80080FFE9CF20919B +:102F0000F3008091F20090E0922B6115710559F069 +:102F10008830910540F424912093F100319661505E +:102F200071090196F2CF21E0089709F020E0809125 +:102F3000E8008E778093E800CBCF2111CCCF0AC078 +:102F400080915E04882361F0853061F08091E80013 +:102F500083FD0AC08091E80082FFF2CF80E00895EF +:102F600082E0089583E0089581E00895982F9730D6 +:102F700058F59093E900981739F07091EC00209182 +:102F8000ED005091F00003C0242F762F50E021FF78 +:102F900019C03091EB003E7F3093EB003091ED0093 +:102FA0003D7F3093ED003091EB0031603093EB00CA +:102FB0007093EC002093ED005093F0002091EE0010 +:102FC00027FF07C09F5FD3CF8F708093E90081E018 +:102FD000089580E0089580915F0487FF11C080917B +:102FE000E80082FD05C080915E048111F8CF11C018 +:102FF0008091E8008B770BC080915E04882349F0B4 +:103000008091E80080FFF8CF8091E8008E77809370 +:10301000E80008952091E4003091E50095E64091A4 +:10302000EC00842F817040FF22C08091E80080FD79 +:103030001CC080915E04882391F0853091F08091CE +:10304000EB0085FD10C04091E4005091E50042176F +:10305000530729F39A01915011F784E0089582E013 +:10306000089583E0089581E0089580E008954091F7 +:10307000E80042FFDECF08950E94AA180E94B2180D +:10308000E0EEF0E0808181608083E8EDF0E0808117 +:103090008F77808319BCA7EDB0E08C918E7F8C93E5 +:1030A00080818F7E808310925D0408950F931F931B +:1030B000CF93DF930E94AA180E94B218C8EDD0E007 +:1030C00088818F77888388818068888388818F7DD5 +:1030D000888319BC10925E0410925A0410925C040A +:1030E00010925B0400EE10E0F80180818B7F8083FA +:1030F00088818160888342E060E080E00E94B617AA +:10310000E1EEF0E080818E7F8083E2EEF0E080816E +:1031100081608083808188608083F80180818E7FD8 +:103120008083888180618883DF91CF911F910F9187 +:103130000895E8EDF0E080818F7E8083E7EDF0E098 +:1031400080818160808384E082BF81E080935D0420 +:103150000C945618E8EDF0E080818E7F8083109209 +:10316000E20008951092DA001092E10008951F9293 +:103170000F920FB60F9211242F933F934F935F93AB +:103180006F937F938F939F93AF93BF93EF93FF932F +:103190008091E10082FF0BC08091E20082FF07C0B6 +:1031A0008091E1008B7F8093E1000E941E1B809143 +:1031B000DA0080FF1FC08091D80080FF1BC0809183 +:1031C000DA008E7F8093DA008091D90080FF0DC0F5 +:1031D00080E189BD82E189BD09B400FEFDCF81E0B7 +:1031E00080935E040E94221505C019BC10925E04F3 +:1031F0000E9430158091E10080FF19C08091E200AB +:1032000080FF15C08091E2008E7F8093E200809164 +:10321000E20080618093E2008091D8008062809318 +:10322000D80019BC85E080935E040E94341580911B +:10323000E10084FF30C08091E20084FF2CC080E177 +:1032400089BD82E189BD09B400FEFDCF8091D8001F +:103250008F7D8093D8008091E1008F7E8093E10084 +:103260008091E2008F7E8093E2008091E200816095 +:103270008093E20080915A04882311F084E007C013 +:103280008091E30087FD02C081E001C083E080936C +:103290005E040E9435158091E10083FF29C0809172 +:1032A000E20083FF25C08091E100877F8093E100E9 +:1032B00082E080935E0410925A048091E1008E7F38 +:1032C0008093E1008091E2008E7F8093E200809104 +:1032D000E20080618093E20042E060E080E00E94D2 +:1032E000B6178091F00088608093F0000E9433153B +:1032F000FF91EF91BF91AF919F918F917F916F91CE +:103300005F914F913F912F910F900FBE0F901F90A3 +:1033100018951F920F920FB60F9211242F933F937F +:103320004F935F936F937F938F939F93AF93BF93CD +:10333000CF93DF93EF93FF93C091E900CF7080911B +:10334000EC00D82FD17080FDD0E81092E900809178 +:10335000F000877F8093F00078940E94CD1910923E +:10336000E9008091F00088608093F000CD2BCF7051 +:10337000C093E900FF91EF91DF91CF91BF91AF91A1 +:103380009F918F917F916F915F914F913F912F917D +:103390000F900FBE0F901F9018951F93CF93DF9340 +:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C +:1033B000EFE5F4E088E08E0F9091F10091938E1389 +:1033C000FBCF0E944B158091E80083FF1FC18091C5 +:1033D0005F0490916004492F50E04A30510508F095 +:1033E00015C1FA01EC59FF4F0C94E331803881F09C +:1033F000823809F00BC1809163048F708093E900DB +:103400008091EB0085FB882780F91092E90006C0C7 +:1034100080915B0490915C04911182609091E8002E +:10342000977F9093E8008093F1001092F100C8C05C +:10343000282F2D7F09F0EAC0882319F0823061F02F +:10344000E5C080916104813009F0E0C0933009F05B +:1034500080E080935C042BC080916104811127C0BF +:10346000809163048F7009F4D1C08093E9002091AA +:10347000EB0020FF1CC0933021F48091EB008062B0 +:1034800014C09091EB0090619093EB0021E030E04C +:10349000A90102C0440F551F8A95E2F74093EA0044 +:1034A0001092EA008091EB0088608093EB0010920C +:1034B000E9008091E800877F86C08111A7C0109144 +:1034C00061041F778091E3008078812B8093E30073 +:1034D0008091E800877F8093E8000E94EB1780913D +:1034E000E80080FFFCCF8091E30080688093E300D8 +:1034F000111102C082E001C083E080935E0486C0A7 +:103500008058823008F082C08091610490916204FA +:103510008C3D53E0950779F583E08A838AE28983BD +:103520004FB7F894DE01139620E03EE051E2E32F1E +:10353000F0E050935700E49120FF03C0E295EF7054 +:103540003F5FEF708E2F90E0EA3010F0C79601C019 +:10355000C0968D939D932F5F243149F74FBF809183 +:10356000E800877F8093E8006AE270E0CE01019670 +:103570000E94F21614C0AE014F5F5F4F609163046A +:103580000E943916BC01009709F440C09091E800F0 +:10359000977F9093E80089819A810E9455178091C6 +:1035A000E8008B778093E80031C0803879F580910E +:1035B000E800877F8093E80080915A048093F100AF +:1035C0008091E8008E778093E8000E94EB171EC080 +:1035D00081111CC0909161049230C0F48091E80088 +:1035E000877F8093E80090935A040E94EB178091A4 +:1035F0005A04811106C08091E30087FD02C081E07A +:1036000001C084E080935E040E9437158091E80039 +:1036100083FF0AC08091E800877F8093E800809153 +:10362000EB0080628093EB00AA960FB6F894DEBFA1 +:103630000FBECDBFDF91CF911F9108950895CF9315 +:1036400080915E048823A1F0C091E900CF70909131 +:10365000EC00892F817090FD80E8C82B1092E90062 +:103660008091E80083FD0E94CD19CF70C093E900DE +:10367000CF9108959093DF038093DE030895E09146 +:10368000DE03F091DF03309721F00190F081E02D0F +:10369000099480E00895E091DE03F091DF03309714 +:1036A00021F00280F381E02D09940895E091DE037A +:1036B000F091DF03309721F00480F581E02D09942B +:1036C00008952091DC033091DD038217930771F098 +:1036D0009093DD038093DC03E091DE03F091DF0340 +:1036E000309721F00680F781E02D0994089520910C +:1036F000DA033091DB038217930771F09093DB03B9 +:103700008093DA03E091DE03F091DF03309721F03C +:103710000084F185E02D0994089508950C948D1B83 +:103720000E9415280E94760B0E949B280C94562D0F +:103730004F925F927F928F929F92AF92BF92CF9261 +:10374000DF92EF92FF920F931F93CF93DF93CDB74A +:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A +:10376000650C91EEC92E93E0D92E00E010E0AA245A +:10377000A394B12C702E802F0E94AE0D4C01F60147 +:10378000419051906F014826592641145104B1F4DB +:103790000F5F1F4F0430110569F78FEF89838A830C +:1037A0001B820E941E288160782F9D838C83498113 +:1037B0005A816B818D810E94511C3AC080913D04D9 +:1037C00081FD0E94B70D20E030E07501022E02C09D +:1037D000EE0CFF1C0A94E2F7C70184219521892B86 +:1037E00009F12E837F828E209F2091E0892809F4A1 +:1037F00090E098870E941E288160782F9A87898799 +:103800004E815F8168858A850E94511C000F111FBF +:10381000F801EF51FC4F80819181E826F926F18271 +:10382000E08206C02F5F3F4F2C30310571F6B0CFDC +:103830000E94872A1091E0030E943F1B1817D9F0BD +:103840000E943F1B8093E0032A960FB6F894DEBFD8 +:103850000FBECDBFDF91CF911F910F91FF90EF90E1 +:10386000DF90CF90BF90AF909F908F907F905F90B0 +:103870004F900C94AE0A2A960FB6F894DEBF0FBE96 +:10388000CDBFDF91CF911F910F91FF90EF90DF900F +:10389000CF90BF90AF909F908F907F905F904F9010 +:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B +:1038B000DEBF0FBECDBF4F83588769877A878B875E +:1038C000DE01119686E0FD0111928A95E9F785E007 +:1038D000FE01379601900D928A95E1F749815A8150 +:1038E0006B817C818D819E810E94F6232B960FB681 +:1038F000F894DEBF0FBECDBFDF91CF910895CF9377 +:10390000882309F4C2C0C82F823859F40E943F1B93 +:1039100081FDBBC089E30E949F260E946C2789E33A +:103920000CC0833879F40E943F1B80FDAEC083E554 +:103930000E949F260E946C2783E50E94E126CF917A +:103940000C946C27843859F40E943F1B82FD9DC063 +:1039500087E40E949F260E946C2787E4EECF8CEFBD +:103960008C0F813A48F48C2F0E94BE2C81118DC09F +:103970008C2F0E949F26E3CF80E28C0F883048F482 +:10398000C77081E001C0880FCA95EAF70E94252719 +:10399000D6CF8BE58C0F833078F4C53A29F0C63A40 +:1039A00031F083E890E005C081E890E002C082E851 +:1039B00090E0CF910C94611B88E58C0F833108F067 +:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F +:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F +:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F +:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D +:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092 +:103A100090E038C082EE90E035C089EE90E032C090 +:103A20008AEE90E02FC085EB90E02CC086EB90E012 +:103A300029C087EB90E026C08CEC90E023C08DEC91 +:103A400090E020C083E891E01DC08AE891E01AC0B0 +:103A500082E991E017C084E991E014C081E292E02C +:103A600011C083E292E00EC084E292E00BC085E2D6 +:103A700092E008C086E292E005C087E292E002C0D0 +:103A80008AE292E0CF910C94771BCF91089588231E +:103A900009F44BC0823859F40E943F1B81FF45C096 +:103AA00089E30E949F260E946C2789E30CC083381B +:103AB00071F40E943F1B80FF38C083E50E949F265F +:103AC0000E946C2783E50E94E1260C946C278438C1 +:103AD00059F40E943F1B82FF28C087E40E949F2662 +:103AE0000E946C2787E4EFCF9CEF980F913A58F330 +:103AF00090E2980F983050F4877091E001C0990FD0 +:103B00008A95EAF7892F0E942B27DFCF9BE5980F34 +:103B1000933020F480E090E00C94611B885A83314C +:103B200020F480E090E00C94771B0895882321F026 +:103B30000E9425270C946C270895882321F00E9469 +:103B40002B270C946C270895BF92CF92DF92EF92AF +:103B5000FF920F931F93CF93DF9300D000D000D03C +:103B6000CDB7DEB725E0FC01DE01119601900D9284 +:103B70002A95E1F7FC01D0801181028125812295EF +:103B80002F7043815481452B09F472C31F3F21F4E8 +:103B9000FFEFDF1609F46CC37C012E830E947707C8 +:103BA000D9821A8369817A81802F0E949B26182FDF +:103BB000B92E0E9450260E9417252E81002319F04D +:103BC0000E9442272E81EB2DE295EF70F0E0E25942 +:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E +:103BE000882319F0F29480EFF822002389F0FF2057 +:103BF00009F47CC280E2810F883020F48F2D0E946E +:103C0000252703C08F2D0E9435270E946C276EC286 +:103C1000812F0E94471DFF2009F42AC3105E8F2DBB +:103C2000183018F40E942B2702C00E943B272696CA +:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD +:103C40000F91FF90EF90DF90CF90BF900C946C2776 +:103C50008B2D807F9B2D9F70803211F4892F03C0A4 +:103C6000892F8295807F112319F0113011F12BC01B +:103C70000023A9F0222389F1213079F526960FB689 +:103C8000F894DEBF0FBECDBFDF91CF911F910F9192 +:103C9000FF90EF90DF90CF90BF900C945527222398 +:103CA00019F0213009F4E4C28E830E9458278E81D6 +:103CB0009BC1002321F0263008F0DAC20EC0253067 +:103CC00008F0D6C291C10023C9F0222331F0F701D8 +:103CD000958190FF0BC29F70958326960FB6F8943E +:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F +:103CF000EF90DF90CF90BF900C94961D222309F493 +:103D000073C109C22B2D26952695237030E021150D +:103D1000310521F021303105D1F0AAC2002321F074 +:103D2000812F9B2D937002C080E090E026960FB605 +:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1 +:103D4000FF90EF90DF90CF90BF900C94611B002309 +:103D500021F0812F9B2D937002C080E090E0269689 +:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C +:103D70000F91FF90EF90DF90CF90BF900C94771B46 +:103D8000812F002319F00E948F2902C00E94F72979 +:103D900026960FB6F894DEBF0FBECDBFDF91CF9150 +:103DA0001F910F91FF90EF90DF90CF90BF900C94F8 +:103DB0007C2A8B2D837009F07BC0011159C2812FA1 +:103DC000829586958770880F880F912F9F70C92ED6 +:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7 +:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD +:103DF00070E004C0440F551F661F771F8A95D2F7E5 +:103E0000CB01BA01609570958095909503C060E0F4 +:103E100070E0CB012B2D269526952370422F50E084 +:103E200042305105D9F04330510569F16C297D29A3 +:103E30008E299F294130510551F126960FB6F894ED +:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD +:103E5000EF90DF90CF90BF900C943E256C297D2988 +:103E60008E299F2926960FB6F894DEBF0FBECDBFD0 +:103E7000DF91CF911F910F91FF90EF90DF90CF9046 +:103E8000BF900C945A250E943E25C701B601269684 +:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B +:103EA0000F91FF90EF90DF90CF90BF900C94222560 +:103EB000002319F08B2D817001C08695882309F4A9 +:103EC000D7C1812F829586958770880F880F912F93 +:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3 +:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039 +:103EF00050E060E070E004C0440F551F661F771F5C +:103F00008A95D2F7CB01BA0160957095809590950E +:103F100003C060E070E0CB012B2D26952695237021 +:103F2000422F50E042305105D9F04330510569F13C +:103F30006C297D298E299F294130510551F1269602 +:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA +:103F50000F91FF90EF90DF90CF90BF900C941826B8 +:103F60006C297D298E299F2926960FB6F894DEBFED +:103F70000FBECDBFDF91CF911F910F91FF90EF90BA +:103F8000DF90CF90BF900C9434260E941826C70172 +:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7 +:103FA000CF911F910F91FF90EF90DF90CF90BF9036 +:103FB0000C94FC25103F49F118F4103E48F491C0D0 +:103FC000123F09F453C0E8F1133F09F464C089C0FB +:103FD0001F708B2D8F71002321F00E949525812F5A +:103FE0007CCE0E94B625812F26960FB6F894DEBFB0 +:103FF0000FBECDBFDF91CF911F910F91FF90EF903A +:10400000DF90CF90BF900C949D1D0023B1F0253020 +:1040100008F02EC18B2D8F7126960FB6F894DEBF57 +:104020000FBECDBFDF91CF911F910F91FF90EF9009 +:10403000DF90CF90BF900C94DB25263008F018C19C +:10404000E9CF0023A9F08B2D8F7126960FB6F89437 +:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB +:10406000EF90DF90CF90BF900C949525002359F3EB +:104070008B2D8F7126960FB6F894DEBF0FBECDBF85 +:10408000DF91CF911F910F91FF90EF90DF90CF9034 +:10409000BF900C94B625002399F08B2D8F71269636 :1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149 -:1040B0000F91FF90EF90DF90CF90BF900C9465250B -:1040C0000023A9F0222309F4ADCF812F26960FB645 -:1040D000F894DEBF0FBECDBFDF91CF911F910F913E -:1040E000FF90EF90DF90CF90BF900C946E1C222336 -:1040F00009F4ADCF812F26960FB6F894DEBF0FBE20 -:10410000CDBFDF91CF911F910F91FF90EF90DF9086 -:10411000CF90BF900C94361D4B2D4F70612FC7016F -:104120000E948D0526960FB6F894DEBF0FBECDBF58 -:10413000DF91CF911F910F91FF90EF90DF90CF9083 -:10414000BF900C948924011182C09B2D9F70492F30 -:1041500050E04230510509F443C0C4F44115510503 -:1041600071F14130510509F072C026960FB6F894EE -:10417000DEBF0FBECDBFDF91CF911F910F91FF909A -:10418000EF90DF90CF90BF900C946D2D4330510590 -:10419000C1F14430510509F05AC0812F26960FB65F -:1041A000F894DEBF0FBECDBFDF91CF911F910F916D -:1041B000FF90EF90DF90CF90BF900C94BF2D26968C +:1040B0000F91FF90EF90DF90CF90BF900C948025F0 +:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D +:1040D0001F910F91FF90EF90DF90CF90BF900C94C5 +:1040E00076250023A9F0222309F4ADCF812F26964F +:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9 +:104100000F91FF90EF90DF90CF90BF900C947F1CA9 +:10411000222309F4ADCF812F26960FB6F894DEBF87 +:104120000FBECDBFDF91CF911F910F91FF90EF9008 +:10413000DF90CF90BF900C94471D4B2D4F70612F97 +:10414000C7010E94690526960FB6F894DEBF0FBE20 +:10415000CDBFDF91CF911F910F91FF90EF90DF9036 +:10416000CF90BF900C949A24011182C09B2D9F7018 +:10417000492F50E04230510509F443C0C4F44115C1 +:10418000510571F14130510509F072C026960FB604 +:10419000F894DEBF0FBECDBFDF91CF911F910F917D +:1041A000FF90EF90DF90CF90BF900C947E2D433026 +:1041B0005105C1F14430510509F05AC0812F2696AE :1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128 -:1041D0000F91FF90EF90DF90CF90BF900C94562DF1 +:1041D0000F91FF90EF90DF90CF90BF900C94D02D77 :1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC :1041F0001F910F91FF90EF90DF90CF90BF900C94A4 -:10420000892D26960FB6F894DEBF0FBECDBFDF9185 +:10420000672D26960FB6F894DEBF0FBECDBFDF91A7 :10421000CF911F910F91FF90EF90DF90CF90BF90C3 -:104220000C949C2D4B2D4F70612FC70126960FB615 -:10423000F894DEBF0FBECDBFDF91CF911F910F91DC -:10424000FF90EF90DF90CF90BF900C949D07269643 +:104220000C949A2D26960FB6F894DEBF0FBECDBF24 +:10423000DF91CF911F910F91FF90EF90DF90CF9082 +:10424000BF900C94AD2D4B2D4F70612FC70126965A :104250000FB6F894DEBF0FBECDBFDF91CF911F9197 -:104260000F91FF90EF90DF90CF90BF9008950E9444 -:1042700031270E9441270E9406270E945B270E9447 -:104280001C2B0E946B2A80E090E00E94501B80E073 -:1042900090E00C94661B0E9421270C9437210E9409 -:1042A0007F26292F22952F7030E02C3031054CF4D9 -:1042B0002A3031056CF4225031092230310588F45E -:1042C00007C02C30310549F02F30310531F009C0DD -:1042D000803E48F0803F29F406C093FB882780F990 -:1042E000089580E0089581E00895CF93DF9300D092 -:1042F00000D01F92CDB7DEB70F900F900F900F90A8 -:104300000F90DF91CF910895CF93DF9300D000D02D -:1043100000D0CDB7DEB726960FB6F894DEBF0FBE3D -:10432000CDBFDF91CF9108951F93CF93DF93C091BD -:10433000990316E080919A03C81799F0D0E01C9F6A -:10434000F0011D9FF00D1124E556FC4F4081518175 -:1043500062817381848195810E9484212196C77036 -:10436000E9CFDF91CF911F9108954091CB035091F8 -:10437000CC036091CD037091CE038091CF039091D7 -:10438000D0030C9484218091D00382958F7009F022 -:1043900054C08091CD03882309F44FC080919903C4 -:1043A000A0919A036091CB037091CC034091CE030E -:1043B0005091CF03B6E08A1709F43FC090E0411551 -:1043C0005105C1F17F3F11F46F3FA1F1B89FF0019A -:1043D000B99FF00D1124E556FC4F218172132AC0BC -:1043E0002081621327C02281211124C023813481BE -:1043F0002417350710F421503109241B350B283CB4 -:104400003105C0F42091D0032F7020612093D00398 -:1044100026E0289FF001299FF00D1124E056FC4F63 -:1044200080818F70806180838BEC93E00E94931D6C -:104430000C94942101968770BECF0895CF92DF929D -:10444000EF92FF920F931F93CF93DF93CDB7DEB719 -:1044500062970FB6F894DEBF0FBECDBF8C0185E02A -:10446000F801DE011D9601900D928A95E1F7D801C1 -:104470004C9111965C91119712966C91129713962C -:10448000CD90DC9014973091CB037091CC03809148 -:10449000CE039091CF03009709F46BC17F3F19F4CD -:1044A0003F3F09F466C1E090CD03EE2009F4C0C09F -:1044B0002091D003C816D90628F0F601E81BF90BA5 -:1044C000CF0104C0809590958C0D9D1DFF24F39421 -:1044D000883C910578F0F12C207F09F0C6C07C2D36 -:1044E000D98AC88A89890E9475218BEC93E00E9441 -:1044F000931DB1C0822F807F09F046C0751314C090 -:10450000341312C0611110C02F7020612093D003AA -:104510000E94B5218BEC93E00E94931D8091D00303 -:10452000D80115968C932EC0CD2819F15F3F11F458 -:104530004F3FF9F0F62E61111CC080919903209134 -:104540009A0336E0821709F45AC090E0389FF001D0 -:10455000399FF00D1124E556FC4F7181571306C0A9 -:104560007081471303C07281711103C00196877077 -:10457000E9CFF62E662309F418C18091D00381603B -:104580008093D003F12C11C1751308C0341306C0F9 -:10459000611104C08091D003D801C3C04D875E87EC -:1045A0008D859E856A8B0E944F216A898823E1F15F -:1045B0006623D1F12091D003822F82958F7090E0F5 -:1045C000029774F08091CB039091CC0398878F83EE -:1045D0001986DB86CA862C87CE0107960E94931D1A -:1045E00086E0F801ABECB3E001900D928A95E1F71B -:1045F0000E94C3210E94B521FF24F394D6C04D87A9 -:104600005E878D859E850E947F26292F22952F709B -:1046100030E0223031050CF0BCC09F7009F0B6C00C -:10462000805E883008F4C1C0C8010E94931DE4CFA9 -:10463000C816D90608F453C0F601E81BF90BCF01E0 -:10464000883C910508F450C0F12C7C2DD98AC88A89 -:1046500089890E947521EBECF3E086E0DF011D9271 -:104660008A95E9F70E94B521A0C0751314C03413D0 -:1046700012C0611110C08091D003F8018583C80178 -:104680000E94931D86E0EBECF3E0DF011D928A951A -:10469000E9F7FE2C8AC04D875E878D859E856A8BE3 -:1046A0000E944F216A89882309F4BECF662309F44A -:1046B000BBCF2091D003822F82958F7090E002971C -:1046C0000CF48ECF8091CB039091CC039A83898395 -:1046D0001B82DD82CC822E83CE0101967FCF809516 -:1046E00090958C0D9D1DACCFF62E662309F49CCFC2 -:1046F00075132EC034132CC02091D00320FD1FC091 -:10470000822F82958F70D9F0D80115962C9315972A -:104710008F3049F08F5F982F9295907F822F8F7006 -:10472000892B15968C93C8010E94931D86E0F80191 -:10473000ABECB3E001900D928A95E1F793CF86E060 -:10474000F801ABECB3E001900D928A95E1F72DC032 -:104750004D875E878D859E850E944F21811140CFB8 -:104760008091D00381608093D003C8010E94931D83 -:104770001CC0662309F458CF4D875E878D859E85C2 -:104780000E944F21882309F44FCF2ACF811148CFAF -:104790000CC0243031050CF047CF9F7009F440CF96 -:1047A000F8019581907F09F03BCF8F2D62960FB66F -:1047B000F894DEBF0FBECDBFDF91CF911F910F9157 -:1047C000FF90EF90DF90CF9008951F93CF93DF93EA -:1047D000CDB7DEB72C970FB6F894DEBF0FBECDBFB6 -:1047E0004F83588769877A878B879C87CE01079686 -:1047F0000E941E22882369F08F8198852A853B8537 -:10480000232BF1F19F3F09F063C08F3F09F060C097 -:1048100037C086E0FE013796DE01119601900D92B9 -:104820008A95E1F76F817885EA85FB85309741F1BC -:104830007F3F11F46F3F21F120919A0330E0C901CD -:104840000196877099274091990350E08417950746 -:1048500009F447C069837A83FD83EC8396E0929FD5 -:10486000D001939FB00D1124A556BC4FFE01319687 -:1048700001900D929A95E1F780939A030E949421FA -:1048800016E08091990390919A038917C1F1189FBE -:10489000C001112485569C4F0E941E22882379F165 -:1048A000E09199031E9FF0011124E556FC4F4081D1 -:1048B000518162817381848195810E9484218091DC -:1048C000990390E001968770992780939903D9CF37 -:1048D0004F81588569857A858B859C850E948421C6 -:1048E000CFCF0E944B2110929A0310929903EBECC8 -:1048F000F3E086E0DF011D928A95E9F7C1CF2C969F -:104900000FB6F894DEBF0FBECDBFDF91CF911F91E0 -:104910000895EF92FF920F931F93CF93DF938C0133 -:10492000009709F46CC0F12CEE24E394E801219681 -:10493000F8018491843740F4843008F051C081300C -:1049400081F0823019F15BC0853709F444C0A8F1C9 -:104950009CE7980F903708F052C08F770E94361D61 -:1049600041C00E5F1F4FFE01C49180E28C0F883062 -:1049700048F4C7708E2D01C0880FCA95EAF70E94CF -:10498000342714C08C2F0E946E1C2DC00E5F1F4F49 -:10499000FE01C49180E28C0F883058F4C7708E2DD0 -:1049A00001C0880FCA95EAF70E943A270E945B2748 -:1049B0001AC08C2F0E94361D16C00E5F1F4FFE01BD -:1049C000C491CC2381F08FE99FE00197F1F700C0FB -:1049D0000000C150F6CF0E5F1F4FFE01F49003C0E0 -:1049E0000E946E1C8E018F2D882309F49FCFEFE962 -:1049F000FFE03197F1F700C000008150F5CFDF9163 -:104A0000CF911F910F91FF90EF90089508956093BB -:104A1000D5037093D6038093D7039093D8030C9457 -:104A200037210F931F930091D5031091D603209146 -:104A3000D7033091D803DC01CB01802B912BA22B23 -:104A4000B32B8093D5039093D603A093D703B09351 -:104A5000D8031F910F910C9437210F931F9300914E -:104A6000D5031091D6032091D7033091D803DC01F0 -:104A7000CB0180239123A223B3238093D50390936A -:104A8000D603A093D703B093D8031F910F910C9432 -:104A900037210F931F930091D5031091D6032091D6 -:104AA000D7033091D803DC01CB0180279127A227BF -:104AB000B3278093D5039093D603A093D703B093E5 -:104AC000D8031F910F910C9437211092D1031092AB -:104AD000D2031092D3031092D4030C94372141E0F7 -:104AE00050E060E070E004C0440F551F661F771F60 -:104AF0008A95D2F74093D1035093D2036093D303A6 -:104B00007093D4030C94372141E050E060E070E0F2 -:104B100004C0440F551F661F771F8A95D2F78091F6 -:104B2000D1039091D203A091D303B091D403482B29 -:104B3000592B6A2B7B2B4093D1035093D203609364 -:104B4000D3037093D4030C94372141E050E060E02C -:104B500070E004C0440F551F661F771F8A95D2F777 -:104B600040955095609570958091D1039091D203B6 -:104B7000A091D303B091D403482359236A237B2304 -:104B80004093D1035093D2036093D3037093D40323 -:104B90000C94372141E050E060E070E004C0440F25 -:104BA000551F661F771F8A95D2F78091D103909188 -:104BB000D203A091D303B091D403482759276A2781 -:104BC0007B274093D1035093D2036093D303709318 -:104BD000D4030C9437210F931F930091D1031091AC -:104BE000D2032091D3033091D403DC01CB01802B7D -:104BF000912BA22BB32B8093D1039093D203A0933C -:104C0000D303B093D4031F910F910C9437210F93CA -:104C10001F930091D1031091D2032091D3033091BF -:104C2000D403DC01CB0180239123A223B3238093FF -:104C3000D1039093D203A093D303B093D4031F91D5 -:104C40000F910C9437210F931F930091D103109172 -:104C5000D2032091D3033091D403DC01CB01802710 -:104C60009127A227B3278093D1039093D203A093D7 -:104C7000D303B093D4031F910F910C94372108955F -:104C8000CF92DF92EF92FF920F931F93CF93DF9318 -:104C90008C01C090D503D090D603E090D703F0905C -:104CA000D8038091D1039091D203A091D303B09106 -:104CB000D403C82AD92AEA2AFB2ACFE1D0E0D701B7 -:104CC000C6010C2E04C0B695A795979587950A94B2 -:104CD000D2F780FF06C0B8018C2F0E94F709019718 -:104CE00021F4219760F780E001C08C2FDF91CF91F4 -:104CF0001F910F91FF90EF90DF90CF900895CF9389 -:104D0000DF93EC010E944026BE010E94F709DF916B -:104D1000CF910895CB010E947F260895909186023D -:104D2000992321F090918702911109C02091880266 -:104D300030918902F90132969FEF40E01FC0982F11 -:104D40009695969596959F3050F5E0918802F09152 -:104D50008902E90FF11D877021E030E0A90102C04E -:104D6000440F551F8A95E2F7CA019181892B8183EF -:104D700008959F3F39F04F5F4E3041F051915813E5 -:104D8000F8CF0DC05111F7CF942FF5CF9F3F39F0D9 -:104D9000F901E90FF11D97FDFA95828308950895B1 -:104DA00090918602992321F090918702911109C078 -:104DB0002091880230918902F9013296205F3F4F9D -:104DC0001FC0982F9695969596959F30F0F4E09198 -:104DD0008802F0918902E90FF11D877021E030E02F -:104DE000A90102C0440F551F8A95E2F7CA018095B8 -:104DF00091818923818308953196E217F30729F081 -:104E000090819813F9CF1082F7CF089581E090E058 -:104E1000E0918802F0918902E80FF91F1082019653 -:104E200080319105A9F708959091EC03892B809327 -:104E3000EC03089580959091EC0389238093EC0313 -:104E400008951092EC0308959091EB03892B8093C1 -:104E5000EB03089580959091EB0389238093EB03F6 -:104E600008951092EB0308959091EA03892B8093A3 -:104E7000EA03089580959091EA0389238093EA03D9 -:104E800008951092EA0308958093D903089510922B -:104E9000D90308958091880290918902FC0131968E -:104EA0009C01205F3F4F80E0919191118F5FE2174D -:104EB000F307D1F70895E0918802F091890280917B -:104EC000EC038083E0918802F091890290818091C7 -:104ED000EB03892B8083E0918802F0918902908115 -:104EE0008091EA03892B80838091D903882361F024 -:104EF000E0918802F09189029081892B80830E9441 -:104F00004A2781111092D9038091880290918902D9 -:104F10000C943A1B80910E04843039F11092EE0308 -:104F200020E488E190E00FB6F894A89580936000A3 -:104F30000FBE2093600080E00E94540580E00E9434 -:104F4000D20A83B7817F846083BF83B7816083BFC8 -:104F50007894889583B78E7F83BF88E10FB6F894E5 -:104F600080936000109260000FBE08950895089528 -:104F7000CF9380E00E9454050E94B6270E94890CBE -:104F80000E94B727C0E08C2F0E94D20D892B29F4F4 -:104F9000CF5FC430C1F780E001C081E0CF910895B8 -:104FA0000E944B2180E00E9454050E94452D0E94E2 -:104FB0002E1B0C94D20A1F920F920FB60F9211243F -:104FC0008F939F93AF93BF938091EE03811113C092 -:104FD0008091EF039091F003A091F103B091F2035F -:104FE0004196A11DB11D8093EF039093F003A09310 -:104FF000F103B093F203BF91AF919F918F910F9006 -:105000000FBE0F901F90189582E084BD93E095BD70 -:105010009AEF97BD80936E0008952FB7F894809112 -:10502000EF039091F003A091F103B091F2032FBF31 -:105030000895CF92DF92EF92FF920F931F932FB7B5 -:10504000F8944091EF035091F0036091F103709157 -:10505000F2032FBF6A017B01EE24FF248C0120E0C4 -:1050600030E0C016D106E206F30610F441505109B3 -:105070009A01281B390BC9011F910F91FF90EF90E6 -:10508000DF90CF9008951F920F920FB60F921124C8 -:105090008F939F93AF93BF938091EF039091F00311 -:1050A000A091F103B091F2030196A11DB11D80936F -:1050B000EF039093F003A093F103B093F203BF9139 -:1050C000AF919F918F910F900FBE0F901F901895E9 -:1050D0000E942B18F8942FEF87EA91E62150804028 -:1050E0009040E1F700C0000087E090EBDC01809386 -:1050F000190490931A04A0931B04B0931C049CE021 -:1051000088E10FB6F894A895809360000FBE909345 -:105110006000FFCF0E94C928811102C00E94A5280B -:105120000E94D4288093ED030E94E1288093170405 -:1051300087FB882780F9809387020E94D828682FF0 -:1051400070E080E090E00C9407256DEE7EEF80E04B -:1051500090E00E94AA3160E082E090E00E949831E5 -:1051600060E083E090E00E94983160E084E090E0AD -:105170000E94983160E085E090E00E94983160E004 -:1051800086E090E00E9498316FEF87E090E00C9409 -:10519000983180E090E00E94923121E08D3E9E4F58 -:1051A00009F020E0822F089582E090E00C948A318B -:1051B00083E090E00C948A31682F83E090E00C94B7 -:1051C000983184E090E00C948A31682F84E090E07C -:1051D0000C94983186E090E00C948A31682F86E038 -:1051E00090E00C94983187E090E00C948A31682F1D -:1051F00087E090E00C9498318091F50380FF0BC01C -:1052000060918D0285E0689FB001112475956795C6 -:10521000759567952BC081FF09C060918D0285E06F -:10522000689FB00111247595679520C082FF07C063 -:1052300060918D0285E0689FB001112417C09091A4 -:10524000F6039923D1F060918C02961788F720918C -:105250008D0285E0289F90011124929FA001939FC9 -:10526000500D112470E0CA010E9470316038710540 -:1052700040F46115710539F002C065E070E0862FD9 -:1052800008958FE7089581E008958091F50380FFE8 -:1052900008C060918B0270E075956795759567956C -:1052A00021C081FF06C060918B0270E07595679503 -:1052B00019C082FF04C060918B0270E010C0909111 -:1052C000F6039923C1F060918A029617A0F78091A6 -:1052D0008B02899FC001112470E00E9470316038F8 -:1052E000710528F46115710521F0862F08958FE767 -:1052F000089581E0089561E070E0F4CF803F21F4EB -:105300000E94FC28819504C0813F29F40E94FC285A -:105310008093F9030895823F21F40E94FC2881952F -:1053200004C0833F29F40E94FC288093F803089569 -:10533000893F19F40E94452905C08A3F31F40E9433 -:10534000452981958093FA0308958B3F21F40E94AB -:105350004529819504C08C3F29F40E9445298093FA -:10536000FB030895843F21F48091F703816017C007 -:10537000853F21F48091F703826011C0863F21F4BC -:105380008091F70384600BC0873F21F48091F7037D -:10539000886005C0883F31F48091F7038061809375 -:1053A000F70308958D3F21F48091F50381600BC0D0 -:1053B0008E3F21F48091F503826005C08F3F29F470 -:1053C0008091F50384608093F5030895803F39F45C -:1053D0008091F90387FF6CC01092F90369C0813F87 -:1053E00029F48091F9031816BCF362C09091F80378 -:1053F000823F29F497FF5CC01092F80359C0833FA5 -:1054000019F41916CCF354C0893F41F48091FA0382 -:1054100018160CF04DC01092FA034AC08A3F29F4C6 -:105420008091FA0387FF44C0F6CF8B3F39F4809117 -:10543000FB0387FF3DC01092FB033AC08C3F29F469 -:105440008091FB031816BCF333C0843F21F4809194 -:10545000F7038E7F17C0853F21F48091F7038D7F7E -:1054600011C0863F21F48091F7038B7F0BC0873FEB -:1054700021F48091F703877F05C0883F31F4809144 -:10548000F7038F7E8093F70313C08D3F21F4809143 -:10549000F5038E7F0BC08E3F21F48091F5038D7F45 -:1054A00005C08F3F29F48091F5038B7F8093F5032E -:1054B0008091F80381110EC08091F90381110AC017 -:1054C0008091FA03811106C08091FB03811102C013 -:1054D0001092F603089587EF93E00E94451B0E9407 -:1054E0000D289093F4038093F30308951F93CF93B3 -:1054F000DF938091F3039091F4030E941928AC018B -:105500009091F603992321F020918E0230E006C09D -:1055100020918F028AE0289F90011124421753079F -:1055200008F486C08091F803C091F903D091FA0382 -:105530001091FB03811107C0C11176C0D11174C055 -:10554000111172C075C09F3F19F09F5F9093F603D1 -:10555000181624F40E94FC288093F8038091F80325 -:1055600087FF05C00E94FC2881958093F8031C16D4 -:1055700024F40E94FC288093F9038091F90387FFAB -:1055800005C00E94FC2881958093F9036091F8037F -:10559000662339F1C091F903CC2319F1772767FD10 -:1055A0007095872F972F0E94E02E23E333E343E388 -:1055B0005FE30E94942F0E94AD2E6093F8036C2F3E -:1055C000772767FD7095872F972F0E94E02E23E3A2 -:1055D00033E343E35FE30E94942F0E94AD2E609378 -:1055E000F9031D1624F40E9445298093FA03809143 -:1055F000FA0387FF05C00E94452981958093FA032D -:10560000111624F40E9445298093FB038091FB032B -:1056100087FF05C00E94452981958093FB03DF9198 -:10562000CF911F910C946B2A9F3F09F08ECF96CF9C -:10563000DF91CF911F910895E7EFF3E085E0DF015F -:105640001D928A95E9F71092F6031092F5030895DA -:10565000833081F128F4813059F08230D1F00895FF -:10566000853009F449C0B8F1863009F456C0089570 -:1056700080918F02262F30E0280F311D2F3F3105FA -:1056800024F4680F60938F0208958FEF80938F0248 -:10569000089580918E02262F30E0280F311D2F3F74 -:1056A000310524F4680F60938E0208958FEF809384 -:1056B0008E02089580918D02262F30E0280F311D33 -:1056C0002F3F310524F4680F60938D0208958FEF0A -:1056D00080938D02089580918C02262F30E0280F50 -:1056E000311D2F3F310524F4680F60938C0208951B -:1056F0008FEF80938C02089580918B02262F30E0EB -:10570000280F311D2F3F310524F4680F60938B0261 -:1057100008958FEF80938B02089580918A02262F3F +:104260000F91FF90EF90DF90CF90BF900C94790763 +:1042700026960FB6F894DEBF0FBECDBFDF91CF916B +:104280001F910F91FF90EF90DF90CF90BF90089516 +:104290000E9442270E9452270E9417270E946C27E3 +:1042A0000E942D2B0E947C2A80E090E00E94611BDE +:1042B00080E090E00C94771B0E9432270C944821F8 +:1042C0000E949026292F22952F7030E02C30310546 +:1042D0004CF42A3031056CF422503109223031057A +:1042E00088F407C02C30310549F02F30310531F00A +:1042F00009C0803E48F0803F29F406C093FB882720 +:1043000080F9089580E0089581E00895CF93DF93C8 +:1043100000D000D01F92CDB7DEB70F900F900F9056 +:104320000F900F90DF91CF910895CF93DF9300D03E +:1043300000D000D0CDB7DEB726960FB6F894DEBF1A +:104340000FBECDBFDF91CF9108951F93CF93DF9321 +:10435000C091E90316E08091EA03C81799F0D0E014 +:104360001C9FF0011D9FF00D1124E551FC4F408171 +:10437000518162817381848195810E94952121966A +:10438000C770E9CFDF91CF911F91089540911B0431 +:1043900050911C0460911D0470911E0480911F04B3 +:1043A000909120040C9495218091200482958F7027 +:1043B00009F054C080911D04882309F44FC08091F6 +:1043C000E903A091EA0360911B0470911C044091E1 +:1043D0001E0450911F04B6E08A1709F43FC090E014 +:1043E00041155105C1F17F3F11F46F3FA1F1B89F15 +:1043F000F001B99FF00D1124E551FC4F218172139A +:104400002AC02081621327C02281211124C0238168 +:1044100034812417350710F421503109241B350B42 +:10442000283C3105C0F4209120042F702061209396 +:10443000200426E0289FF001299FF00D1124E0516F +:10444000FC4F80818F70806180838BE194E00E94BB +:10445000A41D0C94A52101968770BECF0895CF921C +:10446000DF92EF92FF920F931F93CF93DF93CDB71D +:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA +:1044800085E0F801DE011D9601900D928A95E1F715 +:10449000D8014C9111965C91119712966C911297DC +:1044A0001396CD90DC90149730911B0470911C04EE +:1044B00080911E0490911F04009709F46BC17F3F07 +:1044C00019F43F3F09F466C1E0901D04EE2009F4A1 +:1044D000C0C020912004C816D90628F0F601E81BB8 +:1044E000F90BCF0104C0809590958C0D9D1DFF2484 +:1044F000F394883C910578F0F12C207F09F0C6C038 +:104500007C2DD98AC88A89890E9486218BE194E012 +:104510000E94A41DB1C0822F807F09F046C0751390 +:1045200014C0341312C0611110C02F702061209389 +:1045300020040E94C6218BE194E00E94A41D80917A +:104540002004D80115968C932EC0CD2819F15F3F19 +:1045500011F44F3FF9F0F62E61111CC08091E90370 +:104560002091EA0336E0821709F45AC090E0389FA0 +:10457000F001399FF00D1124E551FC4F7181571363 +:1045800006C07081471303C07281711103C0019688 +:104590008770E9CFF62E662309F418C180912004B4 +:1045A000816080932004F12C11C1751308C034136D +:1045B00006C0611104C080912004D801C3C04D879A +:1045C0005E878D859E856A8B0E9460216A8988231B +:1045D000E1F16623D1F120912004822F82958F7022 +:1045E00090E0029774F080911B0490911C049887CE +:1045F0008F831986DB86CA862C87CE0107960E9498 +:10460000A41D86E0F801ABE1B4E001900D928A951B +:10461000E1F70E94D4210E94C621FF24F394D6C062 +:104620004D875E878D859E850E949026292F229535 +:104630002F7030E0223031050CF0BCC09F7009F0C3 +:10464000B6C0805E883008F4C1C0C8010E94A41DB5 +:10465000E4CFC816D90608F453C0F601E81BF90BDD +:10466000CF01883C910508F450C0F12C7C2DD98AEB +:10467000C88A89890E948621EBE1F4E086E0DF01A7 +:104680001D928A95E9F70E94C621A0C0751314C037 +:10469000341312C0611110C080912004F801858389 +:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249 +:1046B0008A95E9F7FE2C8AC04D875E878D859E8599 +:1046C0006A8B0E9460216A89882309F4BECF662321 +:1046D00009F4BBCF20912004822F82958F7090E047 +:1046E00002970CF48ECF80911B0490911C049A8346 +:1046F00089831B82DD82CC822E83CE0101967FCFFF +:10470000809590958C0D9D1DACCFF62E662309F4F7 +:104710009CCF75132EC034132CC02091200420FD93 +:104720001FC0822F82958F70D9F0D80115962C93D7 +:1047300015978F3049F08F5F982F9295907F822F39 +:104740008F70892B15968C93C8010E94A41D86E05A +:10475000F801ABE1B4E001900D928A95E1F793CFB7 +:1047600086E0F801ABE1B4E001900D928A95E1F7A3 +:104770002DC04D875E878D859E850E9460218111A9 +:1047800040CF80912004816080932004C8010E9462 +:10479000A41D1CC0662309F458CF4D875E878D8504 +:1047A0009E850E946021882309F44FCF2ACF811172 +:1047B00048CF0CC0243031050CF047CF9F7009F46E +:1047C00040CFF8019581907F09F03BCF8F2D629605 +:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112 +:1047E0000F91FF90EF90DF90CF9008951F93CF939C +:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0 +:10480000CDBF4F83588769877A878B879C87CE0176 +:1048100007960E942F22882369F08F8198852A8528 +:104820003B85232BF1F19F3F09F063C08F3F09F0D7 +:1048300060C037C086E0FE013796DE011196019018 +:104840000D928A95E1F76F817885EA85FB8530972F +:1048500041F17F3F11F46F3F21F12091EA0330E0F5 +:10486000C9010196877099274091E90350E08417A8 +:10487000950709F447C069837A83FD83EC8396E04A +:10488000929FD001939FB00D1124A551BC4FFE0102 +:10489000319601900D929A95E1F78093EA030E9478 +:1048A000A52116E08091E9039091EA038917C1F1EF +:1048B000189FC001112485519C4F0E942F228823EC +:1048C00079F1E091E9031E9FF0011124E551FC4FBD +:1048D0004081518162817381848195810E949521FB +:1048E0008091E90390E00196877099278093E9030E +:1048F000D9CF4F81588569857A858B859C850E94A3 +:104900009521CFCF0E945C211092EA031092E90317 +:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73 +:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE +:104930001F910895EF92FF920F931F93CF93DF93F0 +:104940008C01009709F46CC0F12CEE24E394E8018B +:104950002196F8018491843740F4843008F051C0E6 +:10496000813081F0823019F15BC0853709F444C091 +:10497000A8F19CE7980F903708F052C08F770E94FB +:10498000471D41C00E5F1F4FFE01C49180E28C0F96 +:10499000883048F4C7708E2D01C0880FCA95EAF799 +:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3 +:1049B0001F4FFE01C49180E28C0F883058F4C770FD +:1049C0008E2D01C0880FCA95EAF70E944B270E94DE +:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8 +:1049E000FE01C491CC2381F08FE99FE00197F1F79C +:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3 +:104A000003C00E947F1C8E018F2D882309F49FCF45 +:104A1000EFE9FFE03197F1F700C000008150F5CFDA +:104A2000DF91CF911F910F91FF90EF90089508951E +:104A300060932504709326048093270490932804A0 +:104A40000C9448210F931F93009125041091260484 +:104A50002091270430912804DC01CB01802B912B7D +:104A6000A22BB32B8093250490932604A0932704B4 +:104A7000B09328041F910F910C9448210F931F931A +:104A800000912504109126042091270430912804D8 +:104A9000DC01CB0180239123A223B323809325043F +:104AA00090932604A0932704B09328041F910F919C +:104AB0000C9448210F931F93009125041091260414 +:104AC0002091270430912804DC01CB018027912715 +:104AD000A227B3278093250490932604A09327044C +:104AE000B09328041F910F910C9448211092210437 +:104AF0001092220410922304109224040C94482152 +:104B000041E050E060E070E004C0440F551F661FB4 +:104B1000771F8A95D2F74093210450932204609323 +:104B20002304709324040C94482141E050E060E099 +:104B300070E004C0440F551F661F771F8A95D2F797 +:104B40008091210490912204A0912304B091240427 +:104B5000482B592B6A2B7B2B409321045093220422 +:104B600060932304709324040C94482141E050E0A6 +:104B700060E070E004C0440F551F661F771F8A95E0 +:104B8000D2F7409550956095709580912104909151 +:104B90002204A0912304B0912404482359236A23BA +:104BA0007B23409321045093220460932304709349 +:104BB00024040C94482141E050E060E070E004C01F +:104BC000440F551F661F771F8A95D2F780912104E5 +:104BD00090912204A0912304B091240448275927DE +:104BE0006A277B2740932104509322046093230477 +:104BF000709324040C9448210F931F930091210477 +:104C0000109122042091230430912404DC01CB0173 +:104C1000802B912BA22BB32B809321049093220401 +:104C2000A0932304B09324041F910F910C94482166 +:104C30000F931F93009121041091220420912304CB +:104C400030912404DC01CB0180239123A223B323E0 +:104C50008093210490932204A0932304B09324040E +:104C60001F910F910C9448210F931F9300912104E1 +:104C7000109122042091230430912404DC01CB0103 +:104C800080279127A227B3278093210490932204A1 +:104C9000A0932304B09324041F910F910C944821F6 +:104CA0000895CF92DF92EF92FF920F931F93CF93CD +:104CB000DF938C01C0902504D0902604E090270457 +:104CC000F09028048091210490912204A091230463 +:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD +:104CE000D701C6010C2E04C0B695A7959795879558 +:104CF0000A94D2F780FF06C0B8018C2F0E94D30916 +:104D0000019721F4219760F780E001C08C2FDF919B +:104D1000CF911F910F91FF90EF90DF90CF9008956A +:104D2000CF93DF93EC010E945126BE010E94D3096C +:104D3000DF91CF910895CB010E9490260895909124 +:104D40008402992321F090918502911109C020914C +:104D5000860230918702F90132969FEF40E01FC032 +:104D6000982F9695969596959F3050F5E0918602EE +:104D7000F0918702E90FF11D877021E030E0A90171 +:104D800002C0440F551F8A95E2F7CA019181892B11 +:104D9000818308959F3F39F04F5F4E3041F051912C +:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77 +:104DB00039F0F901E90FF11D97FDFA958283089505 +:104DC000089590918402992321F090918502911188 +:104DD00009C02091860230918702F9013296205F46 +:104DE0003F4F1FC0982F9695969596959F30F0F45B +:104DF000E0918602F0918702E90FF11D877021E0B2 +:104E000030E0A90102C0440F551F8A95E2F7CA019C +:104E1000809591818923818308953196E217F30764 +:104E200029F090819813F9CF1082F7CF089581E08F +:104E300090E0E0918602F0918702E80FF91F10825E +:104E4000019680319105A9F7089590913C04892B32 +:104E500080933C040895809590913C04892380932D +:104E60003C04089510923C04089590913B04892BD2 +:104E700080933B040895809590913B04892380930F +:104E80003B04089510923B04089590913A04892BB5 +:104E900080933A040895809590913A0489238093F1 +:104EA0003A04089510923A040895809329040895CD +:104EB0001092290408958091860290918702FC0146 +:104EC00031969C01205F3F4F80E0919191118F5F5F +:104ED000E217F307D1F70895E0918602F091870277 +:104EE00080913C048083E0918602F091870290815A +:104EF00080913B04892B8083E0918602F0918702A8 +:104F0000908180913A04892B8083809129048823A1 +:104F100061F0E0918602F09187029081892B808375 +:104F20000E945B2781111092290480918602909142 +:104F300087020C944B1B80915E04843039F11092EF +:104F40003E0420E488E190E00FB6F894A8958093A1 +:104F500060000FBE2093600080E00E94300580E07A +:104F60000E94AE0A83B7817F846083BF83B781606C +:104F700083BF7894889583B78E7F83BF88E10FB60F +:104F8000F89480936000109260000FBE0895089519 +:104F90000895CF9380E00E9430050E94C7270E94A9 +:104FA000650C0E94C827C0E08C2F0E94AE0D892B93 +:104FB00029F4CF5FC430C1F780E001C081E0CF9118 +:104FC00008950E945C2180E00E9430050E94562DC9 +:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5 +:104FE00011248F939F93AF93BF9380913E048111BF +:104FF00013C080913F0490914004A0914104B0916E +:1050000042044196A11DB11D80933F04909340043A +:10501000A0934104B0934204BF91AF919F918F91AF +:105020000F900FBE0F901F90189582E084BD93E003 +:1050300095BD9AEF97BD80936E0008952FB7F894B1 +:1050400080913F0490914004A0914104B0914204AA +:105050002FBF0895CF92DF92EF92FF920F931F938D +:105060002FB7F89440913F0450914004609141045F +:10507000709142042FBF6A017B01EE24FF248C0152 +:1050800020E030E0C016D106E206F30610F44150ED +:1050900051099A01281B390BC9011F910F91FF90EB +:1050A000EF90DF90CF9008951F920F920FB60F925E +:1050B00011248F939F93AF93BF9380913F0490915E +:1050C0004004A0914104B09142040196A11DB11D7C +:1050D00080933F0490934004A0934104B093420412 +:1050E000BF91AF919F918F910F900FBE0F901F9026 +:1050F00018950E943C18F8942FEF87EA91E621500A +:1051000080409040E1F700C0000087E090EBDC01B8 +:105110008093690490936A04A0936B04B0936C0429 +:105120009CE088E10FB6F894A895809360000FBECC +:1051300090936000FFCF0E94DA28811102C00E9484 +:10514000B6280E94E52880933D040E94F2288093AF +:10515000670487FB882780F9809385020E94E928ED +:10516000682F70E080E090E00C9418256DEE7EEFE3 +:1051700080E090E00E94093260E082E090E00E94CE +:10518000F73160E083E090E00E94F73160E084E076 +:1051900090E00E94F73160E085E090E00E94F731F6 +:1051A00060E086E090E00E94F7316FEF87E090E0EA +:1051B0000C94F73180E090E00E94F13121E08D3EC7 +:1051C0009E4F09F020E0822F089582E090E00C9439 +:1051D000E93183E090E00C94E931682F83E090E0BE +:1051E0000C94F73184E090E00C94E931682F84E06E +:1051F00090E00C94F73186E090E00C94E931682F50 +:1052000086E090E00C94F73187E090E00C94E9316F +:10521000682F87E090E00C94F7318091450480FF7F +:105220000BC060918B0285E0689FB00111247595D9 +:105230006795759567952BC081FF09C060918B02BA +:1052400085E0689FB00111247595679520C082FFA5 +:1052500007C060918B0285E0689FB001112417C0E0 +:10526000909146049923D1F060918A02961788F7AD +:1052700020918B0285E0289F90011124929FA0012C +:10528000939F500D112470E0CA010E94CF31603805 +:10529000710540F46115710539F002C065E070E0F8 +:1052A000862F08958FE7089581E008958091450441 +:1052B00080FF08C06091890270E0759567957595CB +:1052C000679521C081FF06C06091890270E07595E5 +:1052D000679519C082FF04C06091890270E010C018 +:1052E000909146049923C1F0609188029617A0F727 +:1052F00080918902899FC001112470E00E94CF3102 +:105300006038710528F46115710521F0862F089524 +:105310008FE7089581E0089561E070E0F4CF803F69 +:1053200021F40E940D29819504C0813F29F40E9437 +:105330000D29809349040895823F21F40E940D298C +:10534000819504C0833F29F40E940D29809348046D +:105350000895893F19F40E94562905C08A3F31F407 +:105360000E945629819580934A0408958B3F21F429 +:105370000E945629819504C08C3F29F40E94562929 +:1053800080934B040895843F21F480914704816009 +:1053900017C0853F21F480914704826011C0863F89 +:1053A00021F48091470484600BC0873F21F48091F1 +:1053B0004704886005C0883F31F4809147048061CC +:1053C0008093470408958D3F21F4809145048160C6 +:1053D0000BC08E3F21F480914504826005C08F3F51 +:1053E00029F4809145048460809345040895803FAA +:1053F00039F48091490487FF6CC01092490469C058 +:10540000813F29F4809149041816BCF362C0909141 +:105410004804823F29F497FF5CC01092480459C0A9 +:10542000833F19F41916CCF354C0893F41F480919D +:105430004A0418160CF04DC010924A044AC08A3F24 +:1054400029F480914A0487FF44C0F6CF8B3F39F49A +:1054500080914B0487FF3DC010924B043AC08C3FB3 +:1054600029F480914B041816BCF333C0843F21F417 +:10547000809147048E7F17C0853F21F480914704B7 +:105480008D7F11C0863F21F4809147048B7F0BC034 +:10549000873F21F480914704877F05C0883F31F41E +:1054A000809147048F7E8093470413C08D3F21F481 +:1054B000809145048E7F0BC08E3F21F4809145047E +:1054C0008D7F05C08F3F29F4809145048B7F8093A9 +:1054D00045048091480481110EC0809149048111D6 +:1054E0000AC080914A04811106C080914B04811149 +:1054F00002C010924604089587E494E00E94561B6F +:105500000E941E28909344048093430408951F939F +:10551000CF93DF9380914304909144040E942A2802 +:10552000AC0190914604992321F020918C0230E047 +:1055300006C020918D028AE0289F90011124421715 +:10554000530708F486C080914804C0914904D09163 +:105550004A0410914B04811107C0C11176C0D111CA +:1055600074C0111172C075C09F3F19F09F5F909376 +:105570004604181624F40E940D2980934804809153 +:10558000480487FF05C00E940D2981958093480437 +:105590001C1624F40E940D2980934904809149042B +:1055A00087FF05C00E940D29819580934904609171 +:1055B0004804662339F1C0914904CC2319F17727B7 +:1055C00067FD7095872F972F0E94F12E23E333E319 +:1055D00043E35FE30E9401300E94BE2E60934804C3 +:1055E0006C2F772767FD7095872F972F0E94F12EDC +:1055F00023E333E343E35FE30E9401300E94BE2EC6 +:10560000609349041D1624F40E94562980934A048D +:1056100080914A0487FF05C00E9456298195809396 +:105620004A04111624F40E94562980934B04809159 +:105630004B0487FF05C00E945629819580934B0437 +:10564000DF91CF911F910C947C2A9F3F09F08ECF60 +:1056500096CFDF91CF911F910895E7E4F4E085E0C4 +:10566000DF011D928A95E9F71092460410924504D5 +:105670000895833081F128F4813059F08230D1F0DF +:105680000895853009F449C0B8F1863009F456C050 +:10569000089580918D02262F30E0280F311D2F3F75 +:1056A000310524F4680F60938D0208958FEF809385 +:1056B0008D02089580918C02262F30E0280F311D35 +:1056C0002F3F310524F4680F60938C0208958FEF0B +:1056D00080938C02089580918B02262F30E0280F52 +:1056E000311D2F3F310524F4680F60938B0208951C +:1056F0008FEF80938B02089580918A02262F30E0ED +:10570000280F311D2F3F310524F4680F60938A0262 +:1057100008958FEF80938A02089580918902262F41 :1057200030E0280F311D2F3F310524F4680F6093BE -:105730008A0208958FEF80938A020895833011F1D1 -:1057400028F4813049F0823091F00895853081F15C -:1057500020F18630C1F1089580918F02681720F4FE -:10576000861B80938F02089510928F020895809176 -:105770008E02681720F4861B80938E020895109283 -:105780008E02089580918D02681720F4861B809305 -:105790008D02089510928D02089580918C026817F1 -:1057A00020F4861B80938C02089510928C02089539 -:1057B00080918B02681720F4861B80938B020895DA -:1057C00010928B02089580918A02681720F4861B3C -:1057D00080938A02089510928A0208950F931F936E -:1057E000873208F048C08E3108F094C0803109F447 -:1057F0007EC008F5873009F468C068F4863009F087 -:10580000A4C08091ED03817F8E7F8093ED0381E0C2 -:105810008093FD039BC08B3009F490C08E3009F05B -:1058200094C08091ED0382FB222720F991E092271A -:1058300090FB82F965C0863109F480C060F4813143 -:1058400009F083C00E944B219091870281E0892753 -:105850008093870273C0893109F470C08B3109F0DD -:1058600074C08091ED0381FB222720F991E09227FB -:1058700090FB81F945C0883309F460C050F4893247 -:1058800009F45EC0853309F45BC0873209F458C05F -:105890005CC0833409F454C028F48A3308F455C03A -:1058A000895339C0883409F050C00E944B210E94AE -:1058B00090060FEF13ED20E3015010402040E1F778 -:1058C00000C000000E94682839C09091ED03892F24 -:1058D0008095817080FB90F929F096609860909394 -:1058E000ED0334C0997F977F9093ED0327C080919B -:1058F000ED0383FB222720F991E0922790FB83F9A7 -:105900008093ED039923D1F08091ED038160809322 -:10591000ED0314C08D5141E050E060E070E08A0179 -:105920009B0104C0000F111F221F331F8A95D2F75D -:10593000C901B8010E9407250E944B2181E006C0E1 -:1059400061E070E080E090E0F5CF80E01F910F9182 -:10595000089580E0089580E00895CF93C82F809146 -:10596000FD03813069F018F08230C9F184C0E09104 -:105970008802F09189028081823209F07EC007C0DE -:10598000E0918802F09189028081823261F48C2F4B -:105990000E94A92C811104C08C2F0E94EE2B1DC0E7 -:1059A00081E090E01AC08C2F0E94AB2C811114C0B2 -:1059B000C43179F048F4CB3079F0C03109F061C0DE -:1059C00082E08093FD0308C0C93219F0C83321F08A -:1059D00058C01092FD0355C081E0817054C0C93297 -:1059E00091F120F5C43179F1B0F4C73009F047C026 -:1059F0008EE180938F0282E380938E028AE080930F -:105A00008D0284E180938C0288E080938B0288E28F -:105A100080938A0234C0CE51C63088F5EC2FF0E076 -:105A2000E65FFC4F80818093FC0329C0CE34E9F00F -:105A300020F4CB3421F56AE013C0C13579F0C235CA -:105A4000F1F461E00DC08091FC03882319F01092FD -:105A5000FC0315C081E08093FD0315C061E006C022 -:105A60008091FC030E94282B0AC06AE08091FC030D -:105A70000E949E2B04C01092FD0380E004C081E0D0 -:105A800002C080E0AACFCF9108950E94C928811159 -:105A900002C00E94A5280E94EA288093180480FF73 -:105AA00002C0869501C080E00C94540580911804D2 -:105AB000982F9695292F30E0233031054CF49F5FC5 -:105AC000990F8170892B8160809318040E94EE28C1 -:105AD0008091180486950C94540580911804982F91 -:105AE000969591F09158990F8170892B80931804A5 -:105AF0008E7F91E009F490E08091180490FB80F98A -:105B0000809318040E94EE288091180486950C94C6 -:105B1000540580911804982F909590FB80F98093FC -:105B200018040E94EE288091180480FF02C0869518 -:105B300001C080E00C94540590911804892F86953B -:105B40008F5F8F779170843028F4880F892B809332 -:105B5000180402C090931804809118048E7F91E07D -:105B600009F490E08091180490FB80F98093180468 -:105B70000E94EE288091180486950C94540520917B -:105B80001804922F96958927982F990F822F81704C -:105B9000892B809318048E7F91E009F490E0809126 -:105BA000180490FB80F9809318040E94EE288091DD -:105BB000180486950C9454055058BB27AA270ED07C -:105BC00075C166D130F06BD120F031F49F3F11F4F4 -:105BD0001EF45BC10EF4E095E7FB51C1E92F77D1CC -:105BE00080F3BA17620773078407950718F071F4FA -:105BF0009EF58FC10EF4E0950B2EBA2FA02D0B0150 -:105C0000B90190010C01CA01A0011124FF27591B01 -:105C100099F0593F50F4503E68F11A16F040A22F07 -:105C2000232F342F4427585FF3CF46953795279578 -:105C3000A795F0405395C9F77EF41F16BA0B620B77 -:105C4000730B840BBAF09150A1F0FF0FBB1F661FBE -:105C5000771F881FC2F70EC0BA0F621F731F841F01 -:105C600048F4879577956795B795F7959E3F08F027 -:105C7000B3CF9395880F08F09927EE0F97958795E6 -:105C80000895D9D008F481E008950CD00FC107D150 -:105C900040F0FED030F021F45F3F19F0F0C0511118 -:105CA00039C1F3C014D198F39923C9F35523B1F343 -:105CB000951B550BBB27AA2762177307840738F07B -:105CC0009F5F5F4F220F331F441FAA1FA9F333D0DA -:105CD0000E2E3AF0E0E830D091505040E695001C8E -:105CE000CAF729D0FE2F27D0660F771F881FBB1F4A -:105CF000261737074807AB07B0E809F0BB0B802D24 -:105D0000BF01FF2793585F4F2AF09E3F510568F06F -:105D1000B6C000C15F3FECF3983EDCF38695779503 -:105D20006795B795F7959F5FC9F7880F911D969571 -:105D3000879597F90895E1E0660F771F881FBB1FCD -:105D4000621773078407BA0720F0621B730B840B7A -:105D5000BA0BEE1F88F7E095089504D06894B1114E -:105D6000D9C00895BCD088F09F5790F0B92F9927DB -:105D7000B751A0F0D1F0660F771F881F991F1AF056 -:105D8000BA95C9F712C0B13081F0C3D0B1E008951F -:105D9000C0C0672F782F8827B85F39F0B93FCCF3A0 -:105DA000869577956795B395D9F73EF4909580954C -:105DB000709561957F4F8F4F9F4F0895E89409C06C -:105DC00097FB3EF490958095709561957F4F8F4F2E -:105DD0009F4F9923A9F0F92F96E9BB279395F69544 -:105DE000879577956795B795F111F8CFFAF4BB0FC2 -:105DF00011F460FF1BC06F5F7F4F8F4F9F4F16C026 -:105E0000882311F096E911C0772321F09EE8872FAF -:105E1000762F05C0662371F096E8862F70E060E06B -:105E20002AF09A95660F771F881FDAF7880F9695E4 -:105E3000879597F90895990F0008550FAA0BE0E888 -:105E4000FEEF16161706E807F907C0F0121613063C -:105E5000E407F50798F0621B730B840B950B39F47C -:105E60000A2661F0232B242B252B21F408950A26E2 -:105E700009F4A140A6958FEF811D811D089597F922 -:105E80009F6780E870E060E008959FEF80EC0895E0 -:105E900000240A9416161706180609060895002409 -:105EA0000A9412161306140605060895092E039483 -:105EB000000C11F4882352F0BB0F40F4BF2B11F4F7 -:105EC00060FF04C06F5F7F4F8F4F9F4F089557FD56 -:105ED0009058440F551F59F05F3F71F04795880F58 -:105EE00097FB991F61F09F3F79F0879508951216EF -:105EF00013061406551FF2CF4695F1DF08C016169B -:105F000017061806991FF1CF86957105610508944B -:105F10000895E894BB2766277727CB0197F9089562 -:105F20008ADF08F48FEF08950BD0C0CFB1DF28F0DF -:105F3000B6DF18F0952309F0A2CFA7CF1124EACF3E -:105F4000C6DFA0F3959FD1F3950F50E0551F629FD8 -:105F5000F001729FBB27F00DB11D639FAA27F00DC2 -:105F6000B11DAA1F649F6627B00DA11D661F829FE9 -:105F70002227B00DA11D621F739FB00DA11D621FCE -:105F8000839FA00D611D221F749F3327A00D611DEB -:105F9000231F849F600D211D822F762F6A2F1124CD -:105FA0009F5750408AF0E1F088234AF0EE0FFF1F20 -:105FB000BB1F661F771F881F91505040A9F79E3F57 -:105FC000510570F05CCFA6CF5F3FECF3983EDCF359 -:105FD000869577956795B795F795E7959F5FC1F794 -:105FE000FE2B880F911D9695879597F90895FA01D4 -:105FF000EE0FFF1F30962105310599F161157105EE -:1060000061F48038BFE39B0749F1689490388105BB -:1060100061F08038BFEF9B0741F0992342F5FF3FC5 -:10602000E1053105210511F1E8940894E795D901BE -:10603000AA2329F4AB2FBE2FF85FD0F310C0FF5F67 -:1060400070F4A695E0F7F73950F019F0FF3A38F4FC -:106050009F779F930CD00F9007FC905808953EF0C7 -:1060600014CF60E070E080E89FE308954FE79F77EA -:106070005F934F933F932F939ED02F913F914F91DA -:106080005F9152DF05C019F40EF0F9CE42CFFDCE7C -:1060900026DFC8F39638C0F707F80F92E8942BE391 -:1060A0003AEA48EB5FE74EDF0F920F920F924DB73F -:1060B0005EB70F92C0D0E4E4F1E016D04F915F914B -:1060C000EF91FF91E595EE1FFF1F49F0FE57E06845 -:1060D0004427EE0F441FFA95E1F74195550B32D056 -:1060E0000F9007FE26C00895DF93CF931F930F9361 -:1060F000FF92EF92DF927B018C01689405C0DA2E4B -:10610000EF011EDFFE01E894A5912591359145919F -:106110005591AEF3EF0162DDFE019701A801DA941B -:1061200079F7DF90EF90FF900F911F91CF91DF9162 -:1061300008959B01AC0160E070E080E89FE3A5CD8D -:106140009ECEACC0CCDEE8F39923D9F3940F511D59 -:10615000BBF39150504094F059F0882332F0660F11 -:10616000771F881F91505040C1F79E3F510544F75B -:10617000880F911D9695879597F908955F3FACF02C -:10618000983E9CF0BB27869577956795B79508F460 -:10619000B1609395C1F7BB0F58F711F460FFE8CFDA -:1061A0006F5F7F4F8F4F9F4FE3CFB4CE0EF076C01F -:1061B0006CCE689464CE93DEC8F39923D1F3C6F312 -:1061C000DF93CF931F930F93FF92C92FDD2788236F -:1061D0002AF02197660F771F881FDAF720E030E05A -:1061E00040E85FEB9FE3883920F0803E30F0219655 -:1061F0008F77E3DCECE6F1E003C0DFDCE9E9F1E016 -:1062000073DF8B01BE01EC01FB2E6F577109759591 -:10621000771F880B990BD4DD28E132E741E35FE378 -:106220008FDEAF2D9801AE01FF900F911F91CF919E -:10623000DF91D4DC3BCEFA01DC01AA0FBB1F9B012E -:10624000AC01BF5728F422273327442750781FC0BA -:10625000B75188F4AB2F0024469537952795011C3C -:10626000A395D2F3002069F0220F331F441FB3958A -:10627000DAF30DD0A1CC61307105A0E88A07B946E8 -:1062800030F49B01AC0166277727882790783096F9 -:1062900021F0208331834283538308959F3F31F05F -:1062A000915020F4879577956795B795880F911D44 -:1062B0009695879597F90895AA1BBB1B51E107C0D6 -:1062C000AA1FBB1FA617B70710F0A61BB70B881F86 -:1062D000991F5A95A9F780959095BC01CD01089515 -:1062E00097FB072E16F4009407D077FD09D00E9483 -:1062F0005C3107FC05D03EF4909581959F4F089541 -:10630000709561957F4F0895EE0FFF1F0590F491F2 -:10631000E02D0994F999FECF92BD81BDF89A992795 -:1063200080B50895A8E1B0E042E050E00C94B231AD -:10633000262FF999FECF92BD81BDF89A019700B43E -:10634000021639F01FBA20BD0FB6F894FA9AF99ADE -:106350000FBE08950196272F0E9499310C94983111 -:10636000DC01CB01FC01F999FECF06C0F2BDE1BD15 -:10637000F89A319600B40D9241505040B8F7089504 -:04638000F894FFCFBF -:1063840007000C52D02445000000410000DC44000A -:1063940000004152D0A4440000404100005C44008D -:1063A40000004148F17644000000415C978A4400B3 -:1063B4000000411FD592440000004152D0A4440083 -:1063C4000000415CFFB844000000410AA7CF44002C -:1063D4000000410000DC44000000410AA7CF440053 -:1063E4000000410000DC4400000041000000000007 -:1063F40000804000005C45000040410000000000B7 -:1064040000804052D02445000040410AA7CF4400F8 -:106414000000410000DC44000000410000000000D6 -:1064240000804052D024450000404100000000009C -:1064340000804000005C45000040410AA7CF4400B2 -:106444000000410000DC44000000410000000000A6 -:1064540000804052D024450000404100000000006C -:106464000080400AA74F45000040410AA7CF4400DE -:106474000000410000DC4400000041000000000076 -:1064840000804052D024450000004100000000007C -:106494000080405CFF38450000004100000000001F -:1064A40000804052D02445000000410AA7CF440098 -:1064B4000000410000DC4400000041000000000036 -:1064C40000804052D024450000804153D024450030 -:1064D40000404160970A450000004154D0A44400A4 -:1064E4000000410000DC440000004160970A4500C0 -:1064F40000A041050000003F0000C8423214C0144F -:106504009D14691435140101DA032808140A321E93 -:106514000000020004000500070009000B000C0045 -:106524000E001000110013001500170018001A00C7 -:106534001C001D001F002100230024002600280049 -:1065440029002B002D002F003000320034003500CC -:10655400370039003B00400045002500260061005B -:106564006000200037006400650066006700440096 -:106574004600240047003F4D3639BD0970093A09E9 -:1065840001099408AD08C608DF08010203040506E2 -:0465940007080900EB +:10573000890208958FEF80938902089580918802ED +:10574000262F30E0280F311D2F3F310524F4680F3C +:105750006093880208958FEF8093880208958330C4 +:1057600011F128F4813049F0823091F008958530AC +:1057700081F120F18630C1F1089580918D02681782 +:1057800020F4861B80938D02089510928D02089557 +:1057900080918C02681720F4861B80938C020895F8 +:1057A00010928C02089580918B02681720F4861B5A +:1057B00080938B02089510928B02089580918A0243 +:1057C000681720F4861B80938A02089510928A023B +:1057D000089580918902681720F4861B80938902BE +:1057E000089510928902089580918802681720F424 +:1057F000861B8093880208951092880208950F9363 +:105800001F93873208F048C08E3108F094C0803171 +:1058100009F47EC008F5873009F468C068F4863062 +:1058200009F0A4C080913D04817F8E7F80933D0468 +:1058300081E080934D049BC08B3009F490C08E3082 +:1058400009F094C080913D0482FB222720F991E069 +:10585000922790FB82F965C0863109F480C060F41C +:10586000813109F083C00E945C219091850281E022 +:1058700089278093850273C0893109F470C08B3108 +:1058800009F074C080913D0481FB222720F991E04A +:10589000922790FB81F945C0883309F460C050F429 +:1058A000893209F45EC0853309F45BC0873209F49C +:1058B00058C05CC0833409F454C028F48A3308F417 +:1058C00055C0895339C0883409F050C00E945C210A +:1058D0000E946C060FEF13ED20E3015010402040B2 +:1058E000E1F700C000000E94792839C090913D0482 +:1058F000892F8095817080FB90F929F096609860DF +:1059000090933D0434C0997F977F90933D0427C0C6 +:1059100080913D0483FB222720F991E0922790FBA0 +:1059200083F980933D049923D1F080913D048160F7 +:1059300080933D0414C08D5141E050E060E070E080 +:105940008A019B0104C0000F111F221F331F8A957B +:10595000D2F7C901B8010E9418250E945C2181E09C +:1059600006C061E070E080E090E0F5CF80E01F913C +:105970000F91089580E0089580E00895CF93C82F97 +:1059800080914D04813069F018F08230C9F184C0F3 +:10599000E0918602F09187028081823209F07EC018 +:1059A00007C0E0918602F09187028081823261F423 +:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7 +:1059C0001DC081E090E01AC08C2F0E94BC2C811178 +:1059D00014C0C43179F048F4CB3079F0C03109F00B +:1059E00061C082E080934D0408C0C93219F0C83309 +:1059F00021F058C010924D0455C081E0817054C010 +:105A0000C93291F120F5C43179F1B0F4C73009F011 +:105A100047C08EE180938D0282E380938C028AE0FE +:105A200080938B0284E180938A0288E080938902CC +:105A300088E28093880234C0CE51C63088F5EC2FBE +:105A4000F0E0E85AFC4F808180934C0429C0CE34AA +:105A5000E9F020F4CB3421F56AE013C0C13579F0C8 +:105A6000C235F1F461E00DC080914C04882319F037 +:105A700010924C0415C081E080934D0415C061E084 +:105A800006C080914C040E94392B0AC06AE08091C4 +:105A90004C040E94AF2B04C010924D0480E004C05F +:105AA00081E002C080E0AACFCF9108950E94DA2859 +:105AB000811102C00E94B6280E94FB2880936804CE +:105AC00080FF02C0869501C080E00C943005809173 +:105AD0006804982F9695292F30E0233031054CF437 +:105AE0009F5F990F8170892B8160809368040E9469 +:105AF000FF288091680486950C9430058091680495 +:105B0000982F969591F09158990F8170892B8093D9 +:105B100068048E7F91E009F490E08091680490FB26 +:105B200080F9809368040E94FF288091680486951C +:105B30000C94300580916804982F909590FB80F923 +:105B4000809368040E94FF288091680480FF02C04F +:105B5000869501C080E00C94300590916804892FEF +:105B600086958F5F8F779170843028F4880F892B0A +:105B70008093680402C090936804809168048E7FCB +:105B800091E009F490E08091680490FB80F98093A3 +:105B900068040E94FF288091680486950C94300563 +:105BA00020916804922F96958927982F990F822F1C +:105BB0008170892B809368048E7F91E009F490E0D6 +:105BC0008091680490FB80F9809368040E94FF280C +:105BD0008091680486950C9430055058BB27AA27FD +:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7 +:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45 +:105C0000D3D180F3BA17620773078407950718F09A +:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A +:105C20000B01B90190010C01CA01A0011124FF2749 +:105C3000591B99F0593F50F4503E68F11A16F04044 +:105C4000A22F232F342F4427585FF3CF4695379543 +:105C50002795A795F0405395C9F77EF41F16BA0B08 +:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6 +:105C7000661F771F881FC2F70EC0BA0F621F731FFF +:105C8000841F48F4879577956795B795F7959E3F5C +:105C900008F0B3CF9395880F08F09927EE0F9795EA +:105CA0008795089527D108F481E008950CD06BC141 +:105CB00063D140F05AD130F021F45F3F19F03EC17A +:105CC000511195C14FC170D198F39923C9F3552350 +:105CD000B1F3951B550BBB27AA27621773078407DF +:105CE00038F09F5F5F4F220F331F441FAA1FA9F395 +:105CF00033D00E2E3AF0E0E830D091505040E69587 +:105D0000001CCAF729D0FE2F27D0660F771F881FE7 +:105D1000BB1F261737074807AB07B0E809F0BB0BD6 +:105D2000802DBF01FF2793585F4F2AF09E3F5105FA +:105D300068F004C15CC15F3FECF3983EDCF38695EC +:105D400077956795B795F7959F5FC9F7880F911D70 +:105D50009695879597F90895E1E0660F771F881F5C +:105D6000BB1F621773078407BA0720F0621B730B0F +:105D7000840BBA0BEE1F88F7E095089504D0689461 +:105D8000B11135C1089518D188F09F5790F0B92FFF +:105D90009927B751A0F0D1F0660F771F881F991F80 +:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035 +:105DB00008951CC1672F782F8827B85F39F0B93F45 +:105DC000CCF3869577956795B395D9F73EF4909582 +:105DD0008095709561957F4F8F4F9F4F0895E89400 +:105DE00009C097FB3EF490958095709561957F4F23 +:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1 +:105E0000F695879577956795B795F111F8CFFAF4E0 +:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11 +:105E200016C0882311F096E911C0772321F09EE86F +:105E3000872F762F05C0662371F096E8862F70E0D5 +:105E400060E02AF09A95660F771F881FDAF7880FAF +:105E50009695879597F9089588D018F011F08CD011 +:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4 +:105E7000E7FB6217730784079507A8F199F3E92FE9 +:105E8000FF2788232AF03197660F771F881FDAF7DC +:105E9000952F5527442332F091505040220F331F45 +:105EA000441FD2F7BB27E91BF50B621B730B840B56 +:105EB000B109C1F222F4620F731F841FB11D319723 +:105EC0002AF0660F771F881FBB1FEFCF91505040FD +:105ED0005AF041F0882332F0660F771F881F9150E7 +:105EE0005040C1F7939530C08695779567959F5F31 +:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D +:105F000016161706E807F907C0F012161306E4077D +:105F1000F50798F0621B730B840B950B39F40A2676 +:105F200061F0232B242B252B21F408950A2609F454 +:105F3000A140A6958FEF811D811D089597F99F6758 +:105F400080E870E060E008959F3F31F0915020F4C8 +:105F5000879577956795B795880F911D9695879545 +:105F600097F908959FEF80EC089500240A9416167F +:105F7000170618060906089500240A941216130637 +:105F8000140605060895092E0394000C11F48823C5 +:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1 +:105FA0007F4F8F4F9F4F089557FD9058440F551FB7 +:105FB00059F05F3F71F04795880F97FB991F61F08B +:105FC0009F3F79F087950895121613061406551F02 +:105FD000F2CF4695F1DF08C0161617061806991F6E +:105FE000F1CF86957105610508940895E894BB2763 +:105FF00066277727CB0197F908957CDF08F48FEFA8 +:1060000008950BD0C0CFB1DF28F0B6DF18F095238C +:1060100009F094CFA7CF1124EACFC6DFA0F3959F54 +:10602000D1F3950F50E0551F629FF001729FBB277F +:10603000F00DB11D639FAA27F00DB11DAA1F649F2B +:106040006627B00DA11D661F829F2227B00DA11DDE +:10605000621F739FB00DA11D621F839FA00D611D64 +:10606000221F749F3327A00D611D231F849F600D85 +:10607000211D822F762F6A2F11249F5750408AF0BE +:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A +:10609000881F91505040A9F79E3F510570F04ECF98 +:1060A000A6CF5F3FECF3983EDCF386957795679536 +:1060B000B795F795E7959F5FC1F7FE2B880F911D68 +:1060C0009695879597F90895FA01EE0FFF1F309680 +:1060D0002105310599F16115710561F48038BFE33F +:1060E0009B0749F168949038810561F08038BFEFD3 +:1060F0009B0741F0992342F5FF3FE105310521055A +:1061000011F1E8940894E795D901AA2329F4AB2F5B +:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4 +:10612000F73950F019F0FF3A38F49F779F930CD06D +:106130000F9007FC905808953EF014CF60E070E097 +:1061400080E89FE308954FE79F775F934F933F93D6 +:106150002F939ED02F913F914F915F9152DF05C0B9 +:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801 +:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1 +:106180004EDF0F920F920F924DB75EB70F92C0D0B5 +:10619000ECEFF0E016D04F915F91EF91FF91E59514 +:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23 +:1061B000FA95E1F74195550B32D00F9007FE26C0B6 +:1061C0000895DF93CF931F930F93FF92EF92DF9287 +:1061D0007B018C01689405C0DA2EEF011EDFFE0101 +:1061E000E894A5912591359145915591AEF3EF0134 +:1061F00006DDFE019701A801DA9479F7DF90EF90B0 +:10620000FF900F911F91CF91DF9108959B01AC01F9 +:1062100060E070E080E89FE349CD90CE95CECCDE83 +:10622000E8F39923D9F3940F511DBBF391505040DB +:1062300094F059F0882332F0660F771F881F915031 +:106240005040C1F79E3F510544F7880F911D969528 +:10625000879597F908955F3FACF0983E9CF0BB2777 +:10626000869577956795B79508F4B1609395C1F7D2 +:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70 +:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67 +:1062900093DEC8F39923D1F3C6F3DF93CF931F9313 +:1062A0000F93FF92C92FDD2788232AF02197660FCD +:1062B000771F881FDAF720E030E040E85FEB9FE3CC +:1062C000883920F0803E30F021968F7787DCE4E239 +:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197 +:1062E000EC01FB2E6F5771097595771F880B990B81 +:1062F00078DD28E132E741E35FE38FDEAF2D9801DF +:10630000AE01FF900F911F91CF91DF9178DC3BCED2 +:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497 +:1063200022273327442750781FC0B75188F4AB2F5A +:106330000024469537952795011CA395D2F300209C +:1063400069F0220F331F441FB395DAF30DD045CC0B +:1063500061307105A0E88A07B94630F49B01AC01B1 +:106360006627772788279078309621F0208331831D +:10637000428353830895AA1BBB1B51E107C0AA1F88 +:10638000BB1FA617B70710F0A61BB70B881F991FD6 +:106390005A95A9F780959095BC01CD01089597FB7A +:1063A000072E16F4009407D077FD09D00E94BB3168 +:1063B00007FC05D03EF4909581959F4F0895709508 +:1063C00061957F4F0895EE0FFF1F0590F491E02D2A +:1063D0000994F999FECF92BD81BDF89A992780B5AD +:1063E0000895A8E1B0E042E050E00C941132262F6D +:1063F000F999FECF92BD81BDF89A019700B40216BB +:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68 +:1064100008950196272F0E94F8310C94F731DC0182 +:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F +:10643000319600B40D9241505040B8F70895F89449 +:02644000FFCF8C +:106442000C52D02445000000410000DC4400000052 +:106452004152D0A4440000404100005C44000000CE +:106462004148F17644000000415C978A44000000F4 +:10647200411FD592440000004152D0A444000000C4 +:10648200415CFFB844000000410AA7CF440000006D +:10649200410000DC44000000410AA7CF4400000094 +:1064A200410000DC440000004100000000000080C8 +:1064B2004000005C450000404100000000000080F8 +:1064C2004052D02445000040410AA7CF44000000BA +:1064D200410000DC44000000410000000000008098 +:1064E2004052D024450000404100000000000080DE +:1064F2004000005C45000040410AA7CF4400000074 +:10650200410000DC44000000410000000000008067 +:106512004052D024450000404100000000000080AD +:10652200400AA74F45000040410AA7CF440000009F +:10653200410000DC44000000410000000000008037 +:106542004052D024450000004100000000000080BD +:10655200405CFF3845000000410000000000008060 +:106562004052D02445000000410AA7CF4400000059 +:10657200410000DC440000004100000000000080F7 +:106582004052D024450000804153D02445000040B1 +:106592004160970A450000004154D0A44400000025 +:1065A200410000DC440000004160970A450000A061 +:1065B20041050000003F0000C8424314D114AE144C +:1065C2007A14461401012A042808140A321E000013 +:1065D200020004000500070009000B000C000E0079 +:1065E2001000110013001500170018001A001C00FB +:1065F2001D001F002100230024002600280029007E +:106602002B002D002F0030003200340035003700FF +:1066120039003B0040004500250026006100600073 +:1066220020003700640065006600670044004600F1 +:10663200240047003149803F5D8B803FF8BF803F97 +:10664200CAE1803F73ED803FCAE1803FF8BF803FDF +:106652005D8B803F3149803F0000803FF16D7F3F7D +:1066620075EA7E3F4C827E3F833F7E3F84287E3F99 +:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6 +:106682000000803F3F4D363975092809F208B908E4 +:106692004C0865087E0897080102030405060708EE +:0266A2000900ED :00000001FF diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 95b971876..b3aa14dcb 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -319,7 +319,7 @@ void matrix_init_user(void) { #ifdef AUDIO_ENABLE uint8_t starting_note = 0x0C; -int offset = 7; +int offset = 0; void process_action_user(keyrecord_t *record) { diff --git a/keyboard/preonic/preonic_pcb_r1.hex b/keyboard/preonic/preonic_pcb_r1.hex index 5bdc190e1..eda1b1979 100644 --- a/keyboard/preonic/preonic_pcb_r1.hex +++ b/keyboard/preonic/preonic_pcb_r1.hex @@ -1,1702 +1,1628 @@ -:100000000C94D4020C9418030C9418030C94180349 -:100010000C9418030C9418030C9418030C941803F4 -:100020000C9418030C9418030C94E8160C94BA174B -:100030000C946C290C9418030C9418030C9418035A -:100040000C9418030C9418030C9418030C941803C4 -:100050000C9418030C94D9290C9418030C941803CD -:100060000C9418030C9418030C9418030C941803A4 -:100070000C9418030C9418030C9418030C94180394 -:100080000C941C0E0C9418030C9418030C94180375 -:100090000C9418030C9418030C9418030C94180374 -:1000A0000C9418030C9418030C941803076342363D -:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9 -:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD -:1000D0000000803F08000000BE922449123EABAAF7 -:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52 -:1000F000AA3E00000000BF000000803F000000009A -:1001000000084178D3BB4387D1133D190E3CC3BDD2 -:100110004282AD2B3E68EC8276BED98FE1A93E4C7F -:1001200080EFFFBE01C4FF7F3F00000000003500EC -:100130001E001F00200021002200230024002500B3 -:10014000260027002A002B0014001A0008001500C2 -:1001500017001C0018000C00120013002A002900D0 -:1001600004001600070009000A000B000D000E0035 -:100170000F0033003400E1001D001B0006001900D1 -:10018000050011001000360037003800280000304C -:10019000E000E200E30003522C002C000452500067 -:1001A000510052004F0035001E001F0020002100AA -:1001B0002200230024002500260027002A002B000F -:1001C00014001A00090013000A000D000F001800A7 -:1001D0001C0033002A002900040015001600170037 -:1001E00007000B00110008000C0012003400E100B1 -:1001F0001D001B000600190005000E00100036004F -:100200003700380028000030E000E200E30003522D -:100210002C002C0004525000510052004F003500B9 -:100220001E001F00200021002200230024002500C2 -:10023000260027002A002B00340036003700130068 -:100240001C0009000A00060015000F002A00290002 -:1002500004001200080018000C0007000B00170033 -:10026000110016003800E100330014000D000E00EC -:100270001B00050010001A0019001D0028000030A6 -:10028000E000E200E30003522C002C000452500076 -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00350212 -:1002B0001E021F0220022102220223022402250222 -:1002C000260227022A0001003A003B003C003D00C4 -:1002D0003E003F002D022E022F02300231020100AB -:1002E00040004100420043004400450000530153D8 -:1002F0000253005001000100010001000100010053 -:10030000010001000100AB00AA00A900AE00350009 -:100310001E001F00200021002200230024002500D1 -:10032000260027002A0035001E001F0020002100A3 -:100330002200230024002500260027002A000100B7 -:100340003A003B003C003D003E003F002D002E00E7 -:100350002F00300031000100400041004200430006 -:1003600044004500005301530253005001000100B6 -:100370000100010001000100010001000100AB00CB -:10038000AA00A900AE002A035400680065002000FE -:100390005000720065006F006E006900630020006D -:1003A0004B006500790062006F006100720064001C -:1003B00000002C034F007200740068006F006C0096 -:1003C00069006E0065006100720020004B0065004E -:1003D000790062006F006100720064007300000029 -:1003E000040309040902D000060100A0FA09040070 -:1003F000000103010100092111010001223F000752 -:1004000005810308000A0904010001030102000933 -:100410002111010001224D000705820308000A098D -:10042000040200010300000009211101000122362D -:10043000000705830308000A090403000203000003 -:10044000000921110100012220000705840320007A -:100450000107050403200001090404000001010054 -:100460000009240100010900010509040500020139 -:1004700003000007240100014100062402010100DD -:1004800006240202020009240301030102010009FB -:1004900024030204010101000905060240000500D1 -:1004A0000005250101010905850240000500000540 -:1004B000250101031201100100000008EDFE61603A -:1004C0000100010200010631FF0974A1010975153F -:1004D0000025FF9520750881020976150025FF95F6 -:1004E0002075089102C005010980A101850216014D -:1004F0000026B7001A01002AB70075109501810087 -:10050000C0050C0901A1018503160100269C021AF1 -:1005100001002A9C02751095018100C005010902A5 -:10052000A1010901A10005091901290515002501ED -:100530009505750181029501750381010501093059 -:1005400009311581257F95027508810609381581C5 -:10055000257F950175088106050C0A38021581254D -:100560007F950175088106C0C005010906A1010536 -:100570000719E029E7150025019508750181029505 -:100580000175088101050819012905950575019175 -:10059000029501750391010507190029FF15002532 -:1005A000FF950675088100C011241FBECFEFDAE069 -:1005B000DEBFCDBF04B603FE24C080910404909139 -:1005C0000504A0910604B09107048730904BA74022 -:1005D000B04BB9F410920404109205041092060472 -:1005E0001092070414BE84B7877F84BF88E10FB6DA -:1005F000F89480936000109260000FBEE0E0F8E392 -:10060000099512E0A0E0B1E0EEE1F9E602C0059044 -:100610000D92A832B107D9F714E0A8E2B2E001C008 -:100620001D92A430B107E1F70E94A0130C948D3401 -:100630000C94000061110DC0FC018281882331F00F -:1006400085EE0E94671E0E94683003C085EE0E94FE -:100650002F1F80E090E008950E940F0E40E050E0D0 -:1006600069E070E080E091E00C94600F08950E94D2 -:1006700049036E9A769A8CE293E0892B11F00C94E0 -:100680002C03089586E393E0892B11F00C94360334 -:100690000895279A2F988FEF9FEF9093870080936C -:1006A00086008AE08093800089E1809381000C9429 -:1006B000113081110BC080918000877F8093800072 -:1006C00010928D0010928C002F9808952F988330EF -:1006D00041F4809180008860809380008FEF9FEFCD -:1006E00012C09091800098609093800023E030E0E9 -:1006F000281B3109220F331F8FEF9FEF02C0969501 -:1007000087952A95E2F790938D0080938C00089549 -:100710008B3B910568F4883A910530F5853A91054F -:10072000C0F48430910598F4019709F06FC071C04E -:10073000803E910508F46AC0883E910540F09C0116 -:10074000205F31092031310508F060C05CC09C0198 -:10075000A1C0853A910509F45FC0863A910509F474 -:100760005EC023E830E496C0883A910509F45AC087 -:10077000893A910509F459C08A3A910509F458C09B -:100780008B3A910509F457C08C3A910509F456C08B -:100790008D3A910509F455C0803B910509F454C088 -:1007A0008E3A910509F453C08F3A910509F452C06D -:1007B000813B910509F451C0823B910509F450C079 -:1007C000833B910509F44FC0843B910509F44EC069 -:1007D000853B910509F44DC0863B910509F44CC059 -:1007E000873B910509F44BC0883B910509F44AC049 -:1007F000893B910509F449C08A3B910509F048C03D -:100800002AE236E447C09C01306544C020E030E075 -:1008100041C021E030E03EC021E830E43BC022E8A6 -:1008200030E438C022EE34E435C029EE34E432C07E -:100830002AEE34E42FC025EB34E42CC026EB34E45C -:1008400029C027EB34E426C02CEC34E423C02DEC83 -:1008500034E420C023E835E41DC02AE835E41AC09A -:1008600022E935E417C024E935E414C021E236E476 -:1008700011C023E236E40EC024E236E40BC025E2C8 -:1008800036E408C026E236E405C027E236E402C0BA -:1008900020E034E4C90108959CE0799FF00111241F -:1008A0009CE3899FE00DF11D1124E60FF11DEE0F71 -:1008B000FF1FE25DFE4F25913491C9010895880F15 -:1008C000991F82559040FC0125913491C9010895EA -:1008D000880F991F825D9E4FFC0125913491C901BB -:1008E00008950E944C049C019A9581159F4110F433 -:1008F000C9010895C90190528115904128F4C90198 -:100900009F700E9468040895C90190538115904119 -:1009100020F4C9019927906C0895C901905440971B -:1009200028F4C9018F709927946D0895203180E4CF -:10093000380719F480E091ED0895213190E43907EA -:1009400019F480E090ED0895223140E4340719F461 -:1009500080E092ED0895233180E4380719F480E0B7 -:1009600093ED0895211590E5390799F40E945623D7 -:1009700040E065E088E491E00E94600F2FEF44E3DF -:100980008CE0215040408040E1F700C000000C9412 -:10099000FE29213090E5390731F48091F002816021 -:1009A0008093F0020895C90190558115904108F097 -:1009B00062C0432F55274F70552741305105F9F438 -:1009C000C90174E0880F991F7A95E1F78827937021 -:1009D000B901E3E0660F771FEA95E1F760767727C4 -:1009E000862B972B9C682370332702C0440F551F1A -:1009F0002A95E2F74F715527842B952B08954230A5 -:100A0000510529F4922F8827816F906A0895433009 -:100A10005105B9F4C90153E0880F991F5A95E1F7C0 -:100A2000807E97702370332741E050E002C0440F6E -:100A3000551F2A95E2F74F715527842B952B9C68FB -:100A400008954430510589F5C90143E0880F991F85 -:100A50004A95E1F7807E97702370332741E050E09C -:100A600002C0440F551F2A95E2F74F715527842B7A -:100A7000952B9A680895C90190568115904118F4F4 -:100A8000C901906F0895C90190578115904120F4D4 -:100A9000C9019F7090620895C901905881159041D5 -:100AA00020F4C9019F70906A0895203E3105E0F45A -:100AB000203C310568F52133310509F475C048F44F -:100AC0002932310509F46BC02A32310509F07BC0A7 -:100AD00075C02933310501F122383105E9F025339C -:100AE000310509F070C051C0233E3105B1F140F429 -:100AF000203E3105D1F0223E310509F064C01CC012 -:100B0000263E310579F1273E310509F05CC038C039 -:100B1000C9010E945F0408958091010380FD02C015 -:100B200081FF51C080EE90E04FC08091010380FFB3 -:100B3000F9CF89E390E048C08091010382FF0AC0A9 -:100B40008091010384FF03C080E090E03DC083EE0C -:100B500090E03AC082EE90E037C08091010382FFBE -:100B6000EFCFF8CF8091010383FF07C0809101038D -:100B700084FDEACF87EE90E027C086EE90E024C0A7 -:100B80008091010383FFF2CFF8CF8091010385FFAD -:100B900003C089E290E018C085E390E015C0809121 -:100BA000010385FDF9CFF5CF8091010386FF03C0D6 -:100BB0008AE290E009C081E390E006C080910103E1 -:100BC00086FDF9CFF5CFC9010E94880308950895E5 -:100BD0005F926F927F928F929F92AF92BF92CF92CD -:100BE000DF92EF92FF920F931F93CF93DF93CDB7D6 -:100BF000DEB72A970FB6F894DEBF0FBECDBF9E01B9 -:100C00002F5F3F4F4E018BE0880E911C60E070E03B -:100C100000E010E0E12CF12CC12CD12CA12CB12C46 -:100C20008AE0782E622E532E41E050E0E3E9F1E0B5 -:100C3000A62DB52D872D01900D928A95E1F7F9012A -:100C4000819191919F01FC01E07FFF27E032F10546 -:100C500059F48F709927FA0102C0EE0FFF1F8A9591 -:100C6000E2F7AE2ABF2A37C0E033F10559F48F709E -:100C70009927FA0102C0EE0FFF1F8A95E2F7CE2AEC -:100C8000DF2A29C0E034F10559F48F709927FA0161 -:100C900002C0EE0FFF1F8A95E2F7EE2AFF2A1BC063 -:100CA000E035F10559F48F709927FA0102C0EE0F73 -:100CB000FF1F8A95E2F70E2B1F2B0DC0E036F105C2 -:100CC00051F48F709927FA0102C0EE0FFF1F8A9529 -:100CD000E2F76E2B7F2B2815390509F0A7CF94B1C9 -:100CE0008A2D8095892384B985B18A2985B997B1E0 -:100CF0008C2D8095892387B988B18C2988B99AB1C0 -:100D00008E2D809589238AB98BB18E298BB99DB19F -:100D1000802F809589238DB98EB1802B8EB990B3A9 -:100D2000862F8095892380BB81B3862B81BB2A9631 -:100D30000FB6F894DEBF0FBECDBFDF91CF911F91EC -:100D40000F91FF90EF90DF90CF90BF90AF909F906A -:100D50008F907F906F905F9008955F926F927F92D7 -:100D60008F929F92AF92BF92CF92DF92EF92FF92BB -:100D70000F931F93CF93DF93CDB7DEB768970FB66E -:100D8000F894DEBF0FBECDBF85B7806885BF85B73D -:100D9000806885BF0E94E8059E012F5F3F4F4E018E -:100DA00089E1880E911C60E070E000E010E0E12C29 -:100DB000F12CC12CD12CA12CB12C98E1792E622ED2 -:100DC000532E41E050E0EDE9F1E0A62DB52D872D41 -:100DD00001900D928A95E1F7F901819191919F011E -:100DE000FC01E07FFF27E032F10559F48F7099276D -:100DF000FA0102C0EE0FFF1F8A95E2F7AE2ABF2A62 -:100E000037C0E033F10559F48F709927FA0102C019 -:100E1000EE0FFF1F8A95E2F7CE2ADF2A29C0E034C1 -:100E2000F10559F48F709927FA0102C0EE0FFF1FE8 -:100E30008A95E2F7EE2AFF2A1BC0E035F10559F446 -:100E40008F709927FA0102C0EE0FFF1F8A95E2F713 -:100E50000E2B1F2B0DC0E036F10551F48F70992732 -:100E6000FA0102C0EE0FFF1F8A95E2F76E2B7F2B6F -:100E70002815390509F0A7CF94B18A2D80958923CB -:100E800084B985B18A2985B997B18C2D809589233C -:100E900087B988B18C2988B99AB18E2D809589231C -:100EA0008AB98BB18E298BB99DB1802F809589230A -:100EB0008DB98EB1802B8EB990B3862F8095892302 -:100EC00080BB81B3862B81BB10922902109228022D -:100ED000109233021092320210922B0210922A02C8 -:100EE000109235021092340210922D0210922C02B0 -:100EF000109237021092360210922F0210922E0298 -:100F0000109239021092380210923102109230027F -:100F100010923B0210923A0287E393E0892BB9F0DA -:100F200068960FB6F894DEBF0FBECDBFDF91CF91AC -:100F30001F910F91FF90EF90DF90CF90BF90AF90F7 -:100F40009F908F907F906F905F900C94370368967E -:100F50000FB6F894DEBF0FBECDBFDF91CF911F91CA -:100F60000F91FF90EF90DF90CF90BF90AF909F9048 -:100F70008F907F906F905F9008955F926F927F92B5 -:100F80008F929F92AF92BF92CF92DF92EF92FF9299 -:100F90000F931F93CF93DF93CDB7DEB7A2970FB612 -:100FA000F894DEBF0FBECDBF7E0149E1E40EF11C17 -:100FB00022E3C22E22E0D22E5E0153E2A50EB11C26 -:100FC0003AE0532E470101E010E048E1642E55E07D -:100FD000752EE3E9F1E0D401852D01900D928A95FB -:100FE000E1F7F701819191917F019C01207F3327E7 -:100FF0002032310589F424B18F709927A80102C0ED -:10100000440F551F8A95E2F7CA01242B24B995B1E4 -:101010008095892385B94FC02033310589F427B1E4 -:101020008F709927F80102C0EE0FFF1F8A95E2F733 -:10103000CF012E2B27B998B18095892388B93BC061 -:101040002034310589F42AB18F709927A80102C094 -:10105000440F551F8A95E2F7CA01242B2AB99BB188 -:10106000809589238BB927C02035310589F42DB1AE -:101070008F709927F80102C0EE0FFF1F8A95E2F7E3 -:10108000CF012E2B2DB99EB1809589238EB913C027 -:101090002036310581F420B38F709927A80102C052 -:1010A000440F551F8A95E2F7CA01242B20BB91B348 -:1010B0008095892381BB50EA5A95F1F7BE016F5F95 -:1010C0007F4F80E090E020E030E0EDE9F1E0DE01EC -:1010D0001196462D01900D924A95E1F7FB01419141 -:1010E0005191BF01FA01E07FFF27E032F10511F4D1 -:1010F000E3B113C0E033F10511F4E6B10EC0E03402 -:10110000F10511F4E9B109C0E035F10511F4ECB1D4 -:1011100004C0E036F105B9F4EFB1F0E04F705527A7 -:1011200002C0F595E7954A95E2F7E0FD08C0A801F1 -:10113000022E02C0440F551F0A94E2F702C040E09D -:1011400050E0842B952B2F5F3F4F2C30310509F059 -:10115000BCCFF601208131812817390721F0918316 -:101160008083709270010E94E805F2E0CF0ED11CDE -:10117000EA14FB0409F02DCF809170018823A1F1BE -:10118000815080937001882339F08FE99FE00197A7 -:10119000F1F700C0000028C0809132029091330224 -:1011A0009093290280932802809134029091350215 -:1011B00090932B0280932A028091360290913702FD -:1011C00090932D0280932C028091380290913902E5 -:1011D00090932F0280932E0280913A0290913B02CD -:1011E000909331028093300282E493E0892B11F0D6 -:1011F0000E94420381E0A2960FB6F894DEBF0FBEB4 -:10120000CDBFDF91CF911F910F91FF90EF90DF90B5 -:10121000CF90BF90AF909F908F907F906F905F9096 -:101220000895E82FF0E0EE0FFF1FE85DFD4F80818D -:10123000918108950895CF92DF92EF92FF920F93DC -:101240001F93CF93DF93CDB7DEB7CC5BD2400FB601 -:10125000F894DEBF0FBECDBF8C01862F642F88238C -:1012600079F0F80192812FE7482F992329F083E044 -:1012700093E00E94C41904C083E093E00E94D41953 -:10128000F80180818B3091F59181943009F0A8C2EA -:101290009281809173019923B1F08F5F80937301E4 -:1012A00096E4E5EBF1E0DE01A958BD4F01900D9207 -:1012B0009A95E1F7E0917101F0917201EE0FFF1F35 -:1012C00027E732E036C096E4E5EBF1E0DE01AF5C03 -:1012D000BD4F01900D929A95E1F7E0917101F09167 -:1012E0007201EE0FFF1F21E332E093C08A3009F054 -:1012F000CBC0F8019181943009F072C29281809143 -:101300007301992309F473C081508093730196E4AB -:10131000E5EBF1E0DE01A551BE4F01900D929A95EB -:10132000E1F7E0917101F0917201EE0FFF1F2BEEDA -:1013300031E02C0F3D1FE20FF31F60817181680FB8 -:10134000711D882777FD8095982F0E94AC3120E091 -:1013500030E040E451E40E94113120E030E040E808 -:1013600050E40E94A9309B01AC0160E070E080E095 -:1013700090E40E94C33221E230ED42E053E40E9447 -:1013800060324CE050E00E94BB0F20E04BE760E091 -:1013900083E093E00E94B41920E04BE761E083E032 -:1013A00093E00E94B41920E04BE762E083E093E011 -:1013B0000E94B41920E04BE763E083E093E00E94D1 -:1013C000B41920E04BE764E083E093E0C454DD4FC0 -:1013D0000FB6F894DEBF0FBECDBFDF91CF911F9146 -:1013E0000F91FF90EF90DF90CF900C94B41996E49A -:1013F000E5EBF1E0DE01AB55BE4F01900D929A9501 -:10140000E1F7E0917101F0917201EE0FFF1F25EA03 -:1014100031E02C0F3D1FE20FF31F60817181680FD7 -:10142000711D882777FD8095982F0E94AC3120E0B0 -:1014300030E040E451E40E94113120E030E040E827 -:1014400050E40E94A9309B01AC0160E070E080E0B4 -:1014500090E40E94C33221E230ED42E053E40E9466 -:1014600060320E94EB0CC454DD4F0FB6F894DEBF1F -:101470000FBECDBFDF91CF911F910F91FF90EF90E5 -:10148000DF90CF900C94BE0C893009F0D3C0F801E6 -:101490009181943009F0A4C19281992309F4A0C1EB -:1014A00080917101909172010196909372018093E5 -:1014B000710120E04BE760E083E093E00E94B41903 -:1014C00020E04BE761E083E093E00E94B41920E064 -:1014D0004BE762E083E093E00E94B41920E04BE721 -:1014E00063E083E093E00E94B41920E04BE764E0FE -:1014F00083E093E00E94B4190E94BE0C00E010E06B -:10150000E6E4FE2E80917301E5EBF1E0DE01A15AE5 -:10151000BE4F9F2D01900D929A95E1F7E0917101D8 -:10152000F0917201E00FF11FEE0FFF1F2FE531E088 -:101530002C0F3D1FE20FF31F60817181680F711D39 -:10154000882777FD8095982F0E94AC3120E030E00D -:1015500040E451E40E94113120E030E040E850E4E2 -:101560000E94A9309B01AC0160E070E080E090E453 -:101570000E94C33221E230ED42E053E40E94603227 -:101580004CE050E00E94BB0F3FEF87EE93E03150FC -:1015900080409040E1F700C0000080917301E5EBCE -:1015A000F1E0DE01A75EBE4F9F2D01900D929A954E -:1015B000E1F7E0917101F0917201E00FF11FEE0F80 -:1015C000FF1F29E131E02C0F3D1FE20FF31F608167 -:1015D0007181680F711D882777FD8095982F0E9473 -:1015E000AC3120E030E040E451E40E94113120E0D1 -:1015F00030E040E850E40E94A9309B01AC0160E07B -:1016000070E080E090E40E94C33221E230ED42E0DD -:1016100053E40E9460320E94EB0C8FEF9CE701972D -:10162000F1F700C000000F5F1F4F0830110509F0EF -:1016300069CF94C1883009F0D3C0F801918194300A -:1016400009F0CEC09281992309F4CAC0809171013A -:10165000909172010197909372018093710120E043 -:101660004BE760E083E093E00E94B41920E04BE791 -:1016700061E083E093E00E94B41920E04BE762E070 -:1016800083E093E00E94B41920E04BE763E083E03D -:1016900093E00E94B41920E04BE764E083E093E01C -:1016A0000E94B4190E94BE0C00E010E056E4F52E32 -:1016B00080917301E5EBF1E0DE01AD52BF4F9F2D4C -:1016C00001900D929A95E1F7E0917101F09172010C -:1016D000E00FF11FEE0FFF1F23ED30E02C0F3D1F39 -:1016E000E20FF31F60817181680F711D882777FDFC -:1016F0008095982F0E94AC3120E030E040E451E426 -:101700000E94113120E030E040E850E40E94A9300E -:101710009B01AC0160E070E080E090E40E94C33285 -:1017200021E230ED42E053E40E9460324CE050E0B0 -:101730000E94BB0F3FEF87EE93E031508040904016 -:10174000E1F700C0000080917301E5EBF1E0DE01FC -:10175000A357BF4F9F2D01900D929A95E1F7E0910D -:101760007101F0917201E00FF11FEE0FFF1F2DE8E4 -:1017700030E02C0F3D1FE20FF31F60817181680F75 -:10178000711D882777FD8095982F0E94AC3120E04D -:1017900030E040E451E40E94113120E030E040E8C4 -:1017A00050E40E94A9309B01AC0160E070E080E051 -:1017B00090E40E94C33221E230ED42E053E40E9403 -:1017C00060320E94EB0C8FEF9CE70197F1F700C0AD -:1017D00000000F5F1F4F0830110509F069CFBEC030 -:1017E000F801228190917301222309F45DC026E45F -:1017F000E5EBF1E0DE01A95BBF4F01900D922A9568 -:10180000E1F7E0917101F0917201E80FF11DEE0F27 -:10181000FF1F27E430E02C0F3D1FE20FF31F608114 -:101820007181690F711D882777FD8095982F0E941F -:10183000AC3120E030E040E451E40E9411316B0112 -:101840007C01F801818165E070E0681B71098827DF -:1018500077FD8095982F0E94AC319B01AC01C701A8 -:10186000B6010E94A9309B01AC0160E070E080E00D -:1018700090E40E94C33221E230ED42E053E40E9442 -:1018800060324FE050E0C454DD4F0FB6F894DEBF35 -:101890000FBECDBFDF91CF911F910F91FF90EF90C1 -:1018A000DF90CF900C94BB0F26E4E5EBF1E0DE0176 -:1018B000119601900D922A95E1F7E0917101F09156 -:1018C0007201E80FF11DEE0FFF1F21E030E02C0F39 -:1018D0003D1FE20FF31F60817181690F711D882721 -:1018E00077FD8095982F0E94AC3120E030E040E4F5 -:1018F00051E40E9411316B017C01F801818165E0A6 -:1019000070E0681B7109882777FD8095982F0E94E9 -:10191000AC319B01AC01C701B6010E94A9309B010B -:10192000AC0160E070E080E090E40E94C33221E20C -:1019300030ED42E053E40E946032C454DD4F0FB6F4 -:10194000F894DEBF0FBECDBFDF91CF911F910F91F5 -:10195000FF90EF90DF90CF900C94EB0CC454DD4FD0 -:101960000FB6F894DEBF0FBECDBFDF91CF911F91B0 -:101970000F91FF90EF90DF90CF9008951092870223 -:1019800010928602809171008D7F8093710080910A -:1019900090008F7780939000109248021092470237 -:1019A00010928002109281021092820210928302A1 -:1019B00010927F0210927E02EEE5F2E0AEE4B2E019 -:1019C00011921192119211921D921D9282E0EE37A6 -:1019D000F807B1F708956F927F928F929F92AF921E -:1019E000BF92CF92DF92EF92FF920F931F93CF930C -:1019F000DF936B017C010EE712E04CE5A42E42E080 -:101A0000B42EC7E0D0E0A7019601F801929182912F -:101A1000729162918F010E940D31882349F02197C4 -:101A2000F2E0AF1AB108CF3F8FEFD80761F734C0AB -:101A3000F8011082118212821382F5011182108244 -:101A4000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01FA -:101A5000AA0FBB1FA25BBD4FCE011AC001964481E5 -:101A600055816681778140835183628373831482B9 -:101A700015821682178212962D913C91139711961A -:101A80003C932E9313961C921E92129734961296A4 -:101A90008730910519F7C3CF809186029091870214 -:101AA000019797FD05C0909387028093860204C03A -:101AB0001092870210928602E0918602F0918702CE -:101AC0003097C9F4809171008D7F8093710080916F -:101AD00090008F7780939000109280021092810284 -:101AE000109282021092830210927F0210927E0264 -:101AF0001092470285C03197DF01AA0FBB1FAA0FC2 -:101B0000BB1FA25ABD4FCD90DD90ED90FC90EE0F23 -:101B1000FF1FE25BFD4FC081D18160908002709019 -:101B200081028090820290908302A7019601662D27 -:101B3000772D882D992D0E940D3187FF25C0262DE8 -:101B4000372D482D592DC701B6010E94A83020E03D -:101B500030E04AEF54E40E9411315B018C012A2DE0 -:101B60003B2D402F512F662D772D882D992D0E94CA -:101B7000A9303B014C01A7019601772D992D0E94B8 -:101B80000D31181664F72EC0A7019601662D772D2A -:101B9000882D992D0E945C32181634F5A701960104 -:101BA000662D772D882D992D0E94A83020E030E0F9 -:101BB0004AEF54E40E9411315B018C012A2D3B2D28 -:101BC000402F512F662D772D882D992D0E94A830FA -:101BD0003B014C01A7019601772D992D0E945C32A3 -:101BE00087FFECCF10924D02C0928002D09281020A -:101BF000E0928202F0928302D0937F02C0937E0231 -:101C0000DF91CF911F910F91FF90EF90DF90CF90D8 -:101C1000BF90AF909F908F907F906F9008953E9A65 -:101C2000E1E7F0E080818D7F808382E08093900007 -:101C30008AE18093910008951F920F920FB60F9240 -:101C40001124CF92DF92EF92FF922F933F934F9305 -:101C50005F936F937F938F939F93AF93BF93CF9334 -:101C6000DF93EF93FF9380914702882309F479C0B3 -:101C700020E030E0A90160918002709181028091A2 -:101C80008202909183020E945C3218160CF069C0A7 -:101C900020E030E040E251E46091490270914A0254 -:101CA00080914B0290914C020E945C321816BCF459 -:101CB00080918402909185020196609186027091D4 -:101CC00087020E9448349093850280938402109288 -:101CD000490210924A0210924B0210924C02C0919B -:101CE0008402D0918502CC0FDD1FCC0FDD1FC25ABC -:101CF000DD4F288139814A815B8160E074E284E7AD -:101D00009BE40E9411310E94793170939700609397 -:101D10009600288139814A815B8160E074E284E722 -:101D20009BE40E9411310E947931759567957093FB -:101D300099006093980020E030E040E85FE3609114 -:101D4000490270914A0280914B0290914C020E948C -:101D5000A9306093490270934A0280934B0290939A -:101D60004C0280914802882309F493C0C09043023A -:101D7000D0904402E0904502F090460220E030E02E -:101D8000A901C701B6010E945C321816F4F4A7013C -:101D9000960160E074E284E79BE40E9411310E94A6 -:101DA00079317093970060939600A701960160E0E7 -:101DB00074E284E79BE40E9411310E9479317595A9 -:101DC0006795709399006093980060913D027091BF -:101DD0003E026F5F7F4F70933E0260933D0280E052 -:101DE00090E00E94AA3120913F0230914002409140 -:101DF0004102509142020E945C3287FD4AC08091AC -:101E00003C028F5F80933C029091F0038917A0F011 -:101E10008091F503882319F010923C020DC0809147 -:101E200071008D7F80937100809190008F778093F7 -:101E30009000109248022DC0E091F103F091F2035E -:101E400080913C0298E0899FE00DF11D1124808172 -:101E50009181A281B3818093430290934402A09325 -:101E60004502B093460220E030E040E85EE3648142 -:101E70007581868197810E94603260933F027093E2 -:101E80004002809341029093420210923E021092CF -:101E90003D02FF91EF91DF91CF91BF91AF919F9163 -:101EA0008F917F916F915F914F913F912F91FF9013 -:101EB000EF90DF90CF900F900FBE0F901F9018956E -:101EC0000F931F93CF93DF9300D0CDB7DEB78C0174 -:101ED00080914702882331F04A8369830E94BE0CB7 -:101EE00069814A8181E0809348021093F203009354 -:101EF000F1036093F0034093F503109249021092AE -:101F00004A0210924B0210924C0210923C02F801CD -:101F10004081518162817381409343025093440216 -:101F2000609345027093460220E030E040E85EE3B3 -:101F300064817581868197810E94603260933F023F -:101F400070934002809341029093420210923E02AD -:101F500010923D02809171008260809371008091A7 -:101F600090008068809390000F900F90DF91CF9148 -:101F70001F910F9108956F927F928F929F92AF92CF -:101F8000BF92CF92DF92EF92FF920F931F93CF9366 -:101F9000DF936B017C01EA018091480281110E946C -:101FA000BE0C81E08093470220E030E0A901C70128 -:101FB000B6010E945C3218160CF09AC06090800244 -:101FC00070908102809082029090830220E030E045 -:101FD000A901662D772D882D992D0E940D31811133 -:101FE00028C0C0928002D0928102E0928202F092D8 -:101FF0008302D0937F02C0937E02809186029091EB -:102000008702FC01EE0FFF1FEE0FFF1FE25AFD4F8C -:10201000C082D182E282F382FC01EE0FFF1FE25BFD -:10202000FD4FD183C08301969093870280938602EF -:102030005FC0A7019601662D772D882D992D0E94EE -:102040000D3187FF25C0262D372D482D592DC7016D -:10205000B6010E94A83020E030E04AEF54E40E942C -:1020600011315B018C012A2D3B2D402F512F662D04 -:10207000772D882D992D0E94A9303B014C01A70195 -:102080009601772D992D0E940D31181664F7A9CF6E -:10209000A7019601662D772D882D992D0E945C321F -:1020A00018160CF09ECFA7019601662D772D882D6E -:1020B000992D0E94A83020E030E04AEF54E40E94BD -:1020C00011315B018C012A2D3B2D402F512F662DA4 -:1020D000772D882D992D0E94A8303B014C01A70136 -:1020E0009601772D992D0E945C3287FFECCF79CF36 -:1020F000809171008260809371008091900080686F -:1021000080939000DF91CF911F910F91FF90EF90FE -:10211000DF90CF90BF90AF909F908F907F906F9007 -:102120000895809191020895CF93DF9300D01F927C -:10213000CDB7DEB72091FA03243021F523E02983BF -:102140009B838A832093E9008FEF06C095ED9A95D3 -:10215000F1F70000882329F09091E800815095FF65 -:10216000F5CF8091E80085FF0DC040E050E063E0CE -:1021700070E0CE0101960E947E148091E8008E7777 -:102180008093E8000F900F900F90DF91CF9108950A -:10219000CF93DF9300D01F92CDB7DEB72091FA0323 -:1021A000243029F522E029839B838A8383E080936E -:1021B000E9008FEF06C095ED9A95F1F700008823AE -:1021C00029F09091E800815095FFF5CF8091E800CB -:1021D00085FF0DC040E050E063E070E0CE01019665 -:1021E0000E947E148091E8008E778093E8000F9023 -:1021F0000F900F90DF91CF9108952091FA03243032 -:10220000F9F422E02093E9002FEF06C035ED3A956E -:10221000F1F70000222329F03091E800215035FF2A -:10222000F5CF2091E80025FF0BC040E050E065E0CD -:1022300070E00E947E148091E8008E778093E80021 -:102240000895CF93DF93EC018091FA03843041F538 -:1022500081E08093E9008FEF06C095ED9A95F1F744 -:102260000000882329F09091E800815095FFF5CF78 -:102270008091E80085FF14C040E050E068E070E025 -:10228000CE010E947E148091E8008E778093E80052 -:1022900088E0FE01A9E8B2E001900D928A95E1F78D -:1022A000DF91CF910895BF92CF92DF92EF92FF928C -:1022B0000F931F93CF93DF937C01B62EE90100E0CB -:1022C00010E0C42ED12C0BC04991202F2B0D2F775D -:1022D0004F776FE0C7010E94B4190F5F1F4F0C15B5 -:1022E0001D0594F3DF91CF911F910F91FF90EF9017 -:1022F000DF90CF90BF90089570E06F5F7F4F6F7059 -:1023000077270C94B4190F931F93CF93C42F633086 -:10231000710509F04AC0842F807F803849F18039E7 -:1023200009F043C0622F6F7770E080E090E00E9478 -:10233000AC3120E030E040E451E40E9411319B01D7 -:10234000AC0160E070E080E090E40E94C3320F775F -:1023500010E023E0159507952A95E1F72DEC3CEC6C -:1023600042E053E40E946032A8010E94BB0F1DC0EE -:10237000622F6F7770E080E090E00E94AC3120E047 -:1023800030E040E451E40E9411319B01AC0160E077 -:1023900070E080E090E40E94C3322DEC3CEC42E01F -:1023A00053E40E9460320E94EB0CCC3F29F4CF91A1 -:1023B0001F910F910C94BE0CCF911F910F91089516 -:1023C0000F931F93CF93DF93CDB7DEB727970FB649 -:1023D000F894DEBF0FBECDBF8C0114C08A810E946D -:1023E0008E199A819D839B819E839C819F838111FD -:1023F0001EC089818430B1F08730A1F08630A1F011 -:102400008530A1F0BE016F5F7F4F84E791E00E94AD -:10241000FB1C8111E3CF84E791E00E94EC1C0E9439 -:1024200067190DC083E003C082E001C081E0AE0106 -:102430004B5F5F4F682FC8010E94211AE3CF279698 -:102440000FB6F894DEBF0FBECDBFDF91CF911F91C5 -:102450000F910895EF92FF920F93CF93DF9300D0E7 -:1024600000D000D0CDB7DEB77B014A832B830C832D -:10247000842F2E834D830E948E192E814D818111D0 -:102480001BC082E0E816F10479F083E0E816F1045D -:1024900021F0EA94EF2821F50BC0073F11F487E003 -:1024A00001C084E089830BC0273FD9F786E0FACFCB -:1024B000473FB9F785E0F6CF42954F704983BE019B -:1024C0006F5F7F4F84E791E00E94B11C84E791E049 -:1024D0000E94CF1C84E791E00E94EC1C0E946719C7 -:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119 -:1024F0000F91FF90EF9008958091F903811109C029 -:102500000E946D160E94CA168091E200846080933A -:10251000E20008951092F9030895089508950C9427 -:102520006129809192028F5F8093920262E30E9400 -:102530002834911135C01092920280919302882321 -:1025400079F18091FA03843049F58091E9008F7028 -:102550009091EC0090FF02C090E801C090E0982BB1 -:1025600084E08093E9008091EB0080FF14C08091AB -:10257000EE0087FD03C00FC01092F1008091E800CB -:1025800085FDFACF8091E80080FF05C08091E800CA -:102590008E778093E8009F709093E90010929302E9 -:1025A000089542E061EC81E00E94E31542E061ECB5 -:1025B00082E00E94E31542E061EC83E00E94E315B3 -:1025C00042E261EC84E00E94E31542E361E885E0C9 -:1025D0000E94E31542E360E886E00C94E3158091E5 -:1025E000FC03833009F454C030F4813071F0823040 -:1025F00009F0A5C08CC08A3009F479C08B3009F489 -:102600005FC0893009F09BC020C08091FB03813AF4 -:1026100009F095C08091E800877F8093E800809161 -:10262000FF0390910004892B21F060E080E090E0AE -:1026300003C068E089E892E070E00E941C15809178 -:10264000E8008B778093E80008958091FB03813246 -:1026500009F075C08091FF0390910004892B09F067 -:102660006EC08091E800877F8093E80005C080916C -:10267000FA03882309F463C08091E80082FFF7CF52 -:102680008091F100809391028091E8008B7753C094 -:102690008091FB03813A09F052C08091FF03909131 -:1026A0000004892B09F04BC08091E800877F80935C -:1026B000E8008091E80080FFFCCF80918A0136C05D -:1026C0008091FB038132D9F58091FF039091000442 -:1026D000892BA9F58091E800877F8093E8000E940C -:1026E0001A168091FD0380938A010C9456238091E1 -:1026F000FB03813221F58091E800877F8093E80019 -:102700000E941A168091FE0380938802089580919A -:10271000FB03813AA1F48091E800877F8093E80071 -:102720008091E80080FFFCCF809188028093F100C7 -:102730008091E8008E778093E8000C941A16089533 -:1027400083E093E00E94F0196AE272E183E093E093 -:102750000E94461A60EE71E183E093E00E944A1AFB -:1027600084B7877F84BF88E10FB6F89480936000B8 -:10277000109260000FBE90E080E80FB6F89480934E -:102780006100909361000FBE0E94741D0E946D163F -:102790000E94CA168091E20084608093E2007894DF -:1027A00063E871E183E093E00E94EC196CE771E16A -:1027B00083E093E00E94E41963E571E183E093E034 -:1027C0000E94E8190E940F0E0E9467190E94761D50 -:1027D00080E891E00E94201D0BC00E941E2980917C -:1027E000F803882329F00E94492981110E94681466 -:1027F0008091FA03853089F383E093E00E94F91B0E -:102800000E94801DF5CF292F332723303105B1F0E9 -:102810004CF42130310509F44DC02230310509F066 -:102820004EC007C02132310541F12232310591F10C -:1028300046C0E0EDF0E084EE93E045C0992781309A -:10284000910569F08230910589F0892B09F037C034 -:10285000E0EEF3E0E491F0E080EE93E034C0E2EBF0 -:10286000F3E0E491F0E082EB93E02DC0E6E8F3E0E2 -:10287000E491F0E086E893E026C0643000F5E62FAE -:10288000F0E0EE0FFF1FE550FE4F80819181E9E0FF -:10289000F0E019C0643098F4E62FF0E0DF01AA0FF1 -:1028A000BB1FAD5FBD4F8D919C91E55FFD4FE081FA -:1028B000F0E009C0E2E1F0E084EB94E004C0E0E085 -:1028C000F0E080E090E0DA018D939C93CF010895D1 -:1028D00080E189BD82E189BD09B400FEFDCF809110 -:1028E000D8008F7D8093D8008091E0008260809333 -:1028F000E0008091E00081FDFCCF0895BF92CF926F -:10290000DF92EF92FF920F931F93CF93DF937C019F -:102910008B01EA010E943B16B82E811133C020972B -:1029200031F028813981021B130BE20EF31EC12CFA -:10293000D12C23C08091E80085FD15C08091E8006E -:102940008E778093E800209749F0888199818C0DDB -:102950009D1D9983888325E0B22E14C00E943B16EA -:10296000882359F00EC0F70181917F018093F10017 -:1029700001501109FFEFCF1ADF0A01151105D1F639 -:1029800001C0B82E8B2DDF91CF911F910F91FF9039 -:10299000EF90DF90CF90BF900895BF92CF92DF92DB -:1029A000EF92FF920F931F93CF93DF937C018B01E4 -:1029B000EA010E943B16B82E811133C0209731F0F6 -:1029C00028813981021B130BE20EF31EC12CD12C7E -:1029D00023C08091E80085FD15C08091E8008B77C9 -:1029E0008093E800209749F0888199818C0D9D1D86 -:1029F0009983888345E0B42E14C00E943B16882337 -:102A000059F00EC08091F100F70181937F010150D0 -:102A10001109FFEFCF1ADF0A01151105D1F601C028 -:102A2000B82E8B2DDF91CF911F910F91FF90EF90DA -:102A3000DF90CF90BF90089540910104509102041F -:102A40004617570748F06115710539F44091E800C1 -:102A50004E774093E80001C0BA01FC0140E033C06A -:102A60008091FA03882309F444C0853009F443C0F7 -:102A70008091E80083FD41C08091E80082FD33C071 -:102A80008091E80080FF1FC09091F3008091F200D8 -:102A9000392F20E0A901482BCA0106C0419140937B -:102AA000F1006150710901966115710519F08830C6 -:102AB0009105A0F341E0089709F040E08091E8001B -:102AC0008E778093E8006115710551F64111C8CFEA -:102AD0000AC08091FA03882361F0853061F080910B -:102AE000E80083FD0AC08091E80082FFF2CF80E019 -:102AF000089582E0089583E0089581E0089540916B -:102B00000104509102044617570748F061157105FA -:102B100039F44091E8004E774093E80001C0BA01D3 -:102B2000FC0140E034C08091FA03882309F445C0D9 -:102B3000853009F444C08091E80083FD42C0809153 -:102B4000E80082FD34C08091E80080FF20C09091B1 -:102B5000F3008091F200392F20E0A901482BCA012F -:102B600007C044914093F10031966150710901967C -:102B70006115710519F08830910598F341E00897C7 -:102B800009F040E08091E8008E778093E8006115BD -:102B9000710549F64111C7CF0AC08091FA03882315 -:102BA00061F0853061F08091E80083FD0AC080917A -:102BB000E80082FFF2CF80E0089582E0089583E08C -:102BC000089581E00895982F2CC09093E9009817FC -:102BD00039F07091EC002091ED005091F00003C0AD -:102BE000242F762F50E021FD02C09F5F1AC0309144 -:102BF000EB003E7F3093EB003091ED003D7F309352 -:102C0000ED003091EB0031603093EB007093EC00FD -:102C10002093ED005093F0002091EE0027FDE5CFCA -:102C200007C0973090F28F708093E90081E008959B -:102C300080E008958091FB0387FD05C08091E80046 -:102C400080FF0EC012C08091E80082FD05C0809117 -:102C5000FA038111F8CF08958091E8008B7708C0BE -:102C60008091FA038111EACF08958091E8008E7770 -:102C70008093E80008958091E4009091E50045E696 -:102C80002091EC0020FD1FC023C02091FA032223D5 -:102C900091F0253091F02091EB0025FD10C020919E -:102CA000E4003091E5002817390751F34150C9017C -:102CB00039F784E0089582E0089583E0089581E083 -:102CC000089580E008952091E80020FFDECFF9CF3D -:102CD0002091E80022FFD9CFF4CF0E94DB160E949A -:102CE000E316E0EEF0E0808181608083E8EDF0E0C3 -:102CF00080818F77808319BCA7EDB0E08C918E7FA7 -:102D00008C9380818F7E80831092F90308950F93B6 -:102D10001F93CF93DF930E94DB160E94E316C8ED4A -:102D2000D0E088818F7788838881806888838881D4 -:102D30008F7D888319BC1092FA031092F6031092CB -:102D4000F8031092F70300EE10E0F80180818B7F0A -:102D5000808388818160888342E060E080E00E9417 -:102D6000E315E1EEF0E080818E7F8083E2EEF0E01B -:102D7000808181608083808188608083F801808188 -:102D80008E7F8083888180618883DF91CF911F91BE -:102D90000F910895E8EDF0E080818F7E8083E7ED6C -:102DA000F0E080818160808384E082BF81E0809355 -:102DB000F9030C948716E8EDF0E080818E7F808324 -:102DC0001092E20008951092DA001092E100089546 -:102DD0001F920F920FB60F9211242F933F934F9390 -:102DE0005F936F937F938F939F93AF93BF93EF9373 -:102DF000FF938091E10082FF0BC08091E20082FF8F -:102E000007C08091E1008B7F8093E1000E949112C6 -:102E10008091DA0080FF1FC08091D80080FF1BC026 -:102E20008091DA008E7F8093DA008091D90080FF54 -:102E30000DC080E189BD82E189BD09B400FEFDCFEE -:102E400081E08093FA030E947C1205C019BC1092A5 -:102E5000FA030E948A128091E10080FF19C08091DC -:102E6000E20080FF15C08091E2008E7F8093E20037 -:102E70008091E20080618093E2008091D8008062BE -:102E80008093D80019BC85E08093FA030E948E12CB -:102E90008091E10084FF30C08091E20084FF2CC06B -:102EA00080E189BD82E189BD09B400FEFDCF80913A -:102EB000D8008F7D8093D8008091E1008F7E809331 -:102EC000E1008091E2008F7E8093E2008091E20039 -:102ED00081608093E2008091F603882311F084E002 -:102EE00007C08091E30087FF02C083E001C081E05A -:102EF0008093FA030E948F128091E10083FF29C022 -:102F00008091E20083FF25C08091E100877F80935C -:102F1000E10082E08093FA031092F6038091E100D1 -:102F20008E7F8093E1008091E2008E7F8093E200AB -:102F30008091E20080618093E20042E060E080E006 -:102F40000E94E3158091F00088608093F0000E9459 -:102F50008D12FF91EF91BF91AF919F918F917F91D2 -:102F60006F915F914F913F912F910F900FBE0F90F6 -:102F70001F9018951F920F920FB60F9211242F9346 -:102F80003F934F935F936F937F938F939F93AF93F1 -:102F9000BF93CF93EF93FF938091E9008F7090914F -:102FA000EC0090FF02C090E801C090E0C92FC82B50 -:102FB0001092E9008091F000877F8093F000789470 -:102FC0000E94FE171092E9008091F00088608093C3 -:102FD000F000CF70C093E900FF91EF91CF91BF91C6 -:102FE000AF919F918F917F916F915F914F913F91A1 -:102FF0002F910F900FBE0F901F9018951F93CF9396 -:10300000DF93CDB7DEB7AC970FB6F894DEBF0FBE37 -:10301000CDBFEBEFF3E08091F100819324E0E3304A -:10302000F207C9F70E94EF128091E80083FF37C1D1 -:103030008091FB039091FC03953009F488C038F42B -:103040009130B1F170F0933009F029C131C098305E -:1030500009F4F8C0993009F404C1963009F01FC191 -:103060009DC0803821F0823809F019C108C08091D4 -:10307000F7039091F803992389F082600FC0809143 -:10308000FF03909100048F7099278093E90080914D -:10309000EB0085FB882780F91092E9009091E80009 -:1030A000977F9093E8008093F1001092F100D5C0D3 -:1030B000882319F0823009F0F2C08F7121F082303C -:1030C00009F0EDC00BC08091FD03813009F0E7C02D -:1030D000933009F080E08093F8032FC08091FD03C6 -:1030E00081112BC08091FF03909100048F7099276C -:1030F000009709F4D4C08093E9002091EB0020FFF1 -:103100001CC02091FC03233021F48091EB008062ED -:1031100012C09091EB0090619093EB0021E030E0C1 -:1031200001C0220F8A95EAF72093EA001092EA0084 -:103130008091EB0088608093EB001092E900809111 -:10314000E800877F8093E8000E941A16A8C08111CA -:10315000A6C08091FD039091FE038F779927182FC9 -:103160009091E3009078982B9093E3008091E80091 -:10317000877F8093E8000E941A168091E80080FF04 -:10318000FCCF8091E30080688093E300112311F06D -:1031900083E001C082E08093FA0381C080588230CE -:1031A00008F07DC08091FD039091FE038C3D23E0EB -:1031B000920779F583E08A838AE289834FB7F8948E -:1031C000DE01139620E03EE051E2E32FF0E0509361 -:1031D0005700E49120FF03C0E295EF703F5FEF706E -:1031E0008E2F90E0EA3010F0C79601C0C0968D9304 -:1031F0009D932F5F243149F74FBF8091E800877F6F -:103200008093E8006AE270E0CE0101960E941C15EE -:1032100013C0AE01455D5F4F6091FF030E94031430 -:103220000097E9F12091E800277F2093E800BC0196 -:103230008BA59CA50E947F158091E8008B778093D9 -:10324000E8002DC0803859F58091E800877F809391 -:10325000E8008091F6038093F1008091E8008E777A -:1032600071CF81111CC09091FD039230C0F4809108 -:10327000E800877F8093E8009093F6030E941A1677 -:103280008091F603811104C08091E30087FF02C0A2 -:1032900084E001C081E08093FA030E94D112809102 -:1032A000E80083FF0AC08091E800877F8093E800F0 -:1032B0008091EB0080628093EB00AC960FB6F8949F -:1032C000DEBF0FBECDBFDF91CF911F910895CF9389 -:1032D0008091FA038823B1F08091E9008F7090917A -:1032E000EC0090FF02C090E801C090E0C92FC82B0D -:1032F0001092E9008091E80083FD0E94FE17CF70D4 -:10330000C093E900CF910895881F8827881F0895EA -:1033100091E0883F08F490E0892F0895982F907FDE -:10332000903B99F038F4903981F0903A71F09038F0 -:10333000C9F40BC0903DA1F018F4903C99F410C072 -:10334000903E19F0903F71F402C083E00895E82F99 -:10335000E15FEF3038F4F0E0E15FFD4F80810895E8 -:1033600082E0089580E008950F932F774F776F7074 -:10337000606BDC01ED91FC91022F242F462F63E05E -:1033800070E009950F9108950F932F774F776F7025 -:103390006069DC01ED91FC91022F242F462F63E040 -:1033A00070E009950F9108950F932F774F776F7005 -:1033B0006068DC01ED91FC91022F242F462F63E021 -:1033C00070E009950F910895FC017383628308955D -:1033D000FC01738F628F0895FC01758F648F0895CF -:1033E000CF93DF93EC011DA21FA21EA2BC01685D5A -:1033F0007F4F40EC88519F4F0E942D1C1B821A82E8 -:103400001D821C821F821E82198618861B861A86C0 -:103410001D861C861F861E86198A188A1B8A1A8A90 -:103420001D8A1C8A1F8A1E8A198E188E1B8E1A8E60 -:103430001D8E1C8E1F8E1E8E19A218A2DF91CF9199 -:103440000895CF92DF92FF920F931F93CF93DF9354 -:103450001F92CDB7DEB7F62E6A018C0108511F4FBF -:1034600008C0F60161916F01C80149830E94341CB4 -:1034700049818C2D841B8F15A0F30F90DF91CF9184 -:103480001F910F91FF90DF90CF900895FC01718301 -:1034900060830895FC0171A360A30895AF92BF9269 -:1034A000CF92DF92EF92FF920F931F93CF93DF9310 -:1034B00000D01F92CDB7DEB77C016B01142FB22E66 -:1034C000A02EDC0195968C9195978430F1F45A9654 -:1034D000ED91FC915B97309709F4D8C0CB0101972F -:1034E00063E070E00E943434DB01AA0FBB1FA60F1B -:1034F000B71F49832A830B834C2D4A1B9E012F5FE4 -:103500003F4FBD01C7010995B1C06230710509F493 -:1035100053C06330710529F06130710509F09CC01A -:1035200083C0842F807F803A01F130F48038B9F075 -:10353000803909F0ABC00DC0803EE9F0803F09F151 -:10354000803B09F0A3C0D7011296ED91FC9113972F -:1035500023C0D7011496ED91FC9115971DC0D7019A -:103560001696ED91FC91179717C0D7011896ED911B -:10357000FC91199711C0D7011A96ED91FC911B97F8 -:103580000BC0423F09F082C0D7011C96ED91FC911F -:103590001D97309731F47AC0309709F477C0123F05 -:1035A00021F42A2D4B2D62EF04C0612F6F702A2D5C -:1035B0004B2DC70109955AC0842F807F803D59F05B -:1035C000803F79F0803C09F061C0D7011E96ED91F3 -:1035D000FC911F9719C0D7015096ED91FC9151971E -:1035E00013C0433F31F4D7015296ED91FC915397AC -:1035F00008C0413F09F04AC0D7015496ED91FC91B3 -:103600005597309741F442C0309709F43FC0133FBB -:1036100011F0113F19F44B2D612F03C0612F6F7012 -:103620004B2DC701099522C0842F0E948819882339 -:1036300031F0D7015696ED91FC91579707C0163F90 -:1036400029F5D7015896ED91FC9159973097F1F0F3 -:10365000612FC70109950AC064307105A8F416C02E -:103660000A2D2B2D412FB601C7010995D7015E9672 -:10367000ED91FC915F97309789F00A2D2B2D412F0A -:10368000B601C70109950AC0C12CD12CD7015C969F -:10369000ED91FC915D97309719F7E8CF0F900F905F -:1036A0000F90DF91CF911F910F91FF90EF90DF90DE -:1036B000CF90BF90AF900895EF92FF920F931F931A -:1036C000CF93DF93EC01162F862F0E948819882351 -:1036D00069F0FDA081E08DA300E020E0412F61E0D2 -:1036E00070E0CE010E944E1AFDA27CC0812F0E9484 -:1036F00084194DA1882309F440C0443029F01AA34D -:1037000021E030E03FA32EA3812F0E948E1981304B -:1037100031F070F0823051F0833059F507C08DA33D -:1037200000E020E0412F61E070E01EC08DA35AC090 -:10373000103F19F0173FE9F404C084E08DA31AA3E9 -:103740003FC02EA13FA1C90163E070E00E94343464 -:103750008C0F9D1FFC0112A3B9016F5F7F4F7FA3E8 -:103760006EA30CA12BA14AA1CE010E944E1A1DA24C -:1037700039C01DA21FA21EA235C0442399F12EA15B -:103780003FA1C90163E070E00E9434347C01FE0176 -:10379000E80FF91F12A3B9016F5F7F4F7FA36EA3DC -:1037A0008130910591F082E0E816F104D9F40CA182 -:1037B0002BA14AA1CE010E944E1A8DA1843091F016 -:1037C00081E090E09FA38EA30DC0423059F400E049 -:1037D0002BA14AA1CE010E944E1A8DA1843011F076 -:1037E000FFA2EEA2DF91CF911F910F91FF90EF907A -:1037F0000895CF92DF92EF92FF920F931F93CF9392 -:10380000DF93EC01E8A1F9A1309709F009958E0149 -:1038100008511F4FC8010E94661CE12CF12CC82ED4 -:10382000D12C0FC060E0C8010E947A1C682FCE0125 -:103830000E945C1B61E0C8010E948B1C8FEFE81A9C -:10384000F80AEC14FD0470F3DF91CF911F910F91F2 -:10385000FF90EF90DF90CF900895FC014283748336 -:1038600063831182108208950F931F93CF93DF9388 -:10387000EC01062F0E94AC1C182F298130E0C901F1 -:1038800001966A8170E00E944834488150E08417B4 -:10389000950729F4812F0E94AF1C80E012C0EB81B4 -:1038A000FC81E20FF31F00832981822F90E00196B3 -:1038B0006A8170E00E9448348983812F0E94AF1C86 -:1038C00081E0DF91CF911F910F910895CF93DF9306 -:1038D000EC010E94AC1C29819881291710F0C22F9D -:1038E00002C0CA81C20FC91B0E94AF1C8C2FDF917E -:1038F000CF910895FC012081862F90E0820F911DC9 -:10390000628170E00E9448340380F481E02DE80F6A -:10391000F91F808108950F931F93CF93DF931F9218 -:10392000CDB7DEB78C0169830E94AC1C482FF8012B -:1039300080816981262F30E0280F311D6281C90105 -:1039400070E00E9448348083842F0F90DF91CF91E4 -:103950001F910F910C94AF1C8FB7F89408958FBFEF -:103960000895FC01CB012091FA032430B1F42181A8 -:103970002F702093E90040E050E064E070E00E9486 -:103980007E1481110BC09091E80095FD07C09091C5 -:10399000E8009E779093E800089582E008952091D2 -:1039A000FA032430A9F4FC0181818F708093E9002F -:1039B0003091F3002091F200932F80E0822B892B2D -:1039C00049F08091E8008E778093E8000C943B16D4 -:1039D00082E0089580E008952091FA03243051F4A4 -:1039E000FC0121812F702093E9002091E80020FD47 -:1039F0000C94CF1C0895FC01CB012091FA032430D4 -:103A000011F080E0089526812F702093E900209125 -:103A1000E80022FFF6CF2091E80025FFF2CF40E03A -:103A200050E064E070E00E94CD148091E80085FDD4 -:103A300005C08091E8008B778093E80081E00895CD -:103A400090939502809394020895E0919402F091EE -:103A50009502309721F00190F081E02D099480E0EB -:103A60000895E0919402F0919502309721F0028040 -:103A7000F381E02D09940895E0919402F09195026C -:103A8000309721F00480F581E02D0994089520916C -:103A90009602309197028217930771F090939702E4 -:103AA00080939602E0919402F0919502309721F074 -:103AB0000680F781E02D09940895209198023091B5 -:103AC00099028217930771F090939902809398025C -:103AD000E0919402F0919502309721F00084F185F5 -:103AE000E02D0994089508950C94731D0E94952962 -:103AF0000E94AD060E94692A0C9411300C94E705CF -:103B00005F926F927F928F929F92AF92BF92CF926D -:103B1000DF92EF92FF920F931F93CF93DF93CDB776 -:103B2000DEB72A970FB6F894DEBF0FBECDBF0E9456 -:103B3000BD079AE9C92E92E0D92E00E010E0AA2430 -:103B4000A394B12C502E802F0E9411093C01F60144 -:103B5000E190F1906F01E826F926E114F10431F4C7 -:103B60000F5F1F4F0530110569F73AC08091F002D1 -:103B700081FD0E941A0920E030E04501022E02C0BA -:103B8000880C991C0A94E2F7C4018E219F21892B8D -:103B900009F12E835F826820792081E0672809F48B -:103BA00080E088870E949E298160782F9A87898784 -:103BB0004E815F8168858A850E94391EF801EE0F6B -:103BC000FF1FE656FD4F80819181882599259183BD -:103BD000808316C02F5F3F4F2C30310571F6C0CF68 -:103BE0008FEF89838A831B820E949E298160782FB0 -:103BF0009D838C8349815A816B818D810E94391EFE -:103C00000E94562D1091A4020E94251D1817D9F06C -:103C10000E94251D8093A4022A960FB6F894DEBF59 -:103C20000FBECDBFDF91CF911F910F91FF90EF900D -:103C3000DF90CF90BF90AF909F908F907F906F90CC -:103C40005F900C947E1D2A960FB6F894DEBF0FBECF -:103C5000CDBFDF91CF911F910F91FF90EF90DF903B -:103C6000CF90BF90AF909F908F907F906F905F901C -:103C70000895CF93DF93CDB7DEB72B970FB6F894A7 -:103C8000DEBF0FBECDBF4F83588769877A878B878A -:103C9000DE01119686E0FD0111928A95E9F785E033 -:103CA000FE01379601900D928A95E1F749815A817C -:103CB0006B817C818D819E810E9415262B960FB68B -:103CC000F894DEBF0FBECDBFDF91CF910895CF93A3 -:103CD000C82F882309F4C1C0823859F40E94251DD9 -:103CE00081FDBBC089E30E947C280E94F82889E3FB -:103CF0000CC0833879F40E94251D80FDAEC083E599 -:103D00000E947C280E94F82883E50E949E28CF917B -:103D10000C94F828843859F40E94251D82FD9DC01A -:103D200087E40E947C280E94F82887E4EECF845024 -:103D3000813A48F48C2F0E94732F81118EC08C2FF2 -:103D40000E947C28E4CF8C2F805E883050F4C770AE -:103D500081E090E001C0880FCA95EAF70E94BF2871 -:103D6000D6CF8C2F855A833078F4C53A29F0C63ADD -:103D700031F482E890E005C081E890E002C083E879 -:103D800090E0CF910C94471D8C2F885A833108F016 -:103D900064C0C83A39F1C93A41F1CA3A49F1CB3A5B -:103DA00051F1CC3A59F1CD3A61F1C03B69F1CE3ACB -:103DB00071F1CF3A79F1C13B81F1C23B89F1C33B4B -:103DC00091F1C43B99F1C53BA1F1C63BA9F1C73BB9 -:103DD000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2AF -:103DE00092E038C082EE90E035C089EE90E032C0BB -:103DF0008AEE90E02FC085EB90E02CC086EB90E03F -:103E000029C087EB90E026C08CEC90E023C08DECBD -:103E100090E020C083E891E01DC08AE891E01AC0DC -:103E200082E991E017C084E991E014C081E292E058 -:103E300011C083E292E00EC084E292E00BC085E202 -:103E400092E008C086E292E005C087E292E002C0FC -:103E500080E090E0CF910C945D1DCF910895882370 -:103E600009F44DC0823859F40E94251D81FF47C0D6 -:103E700089E30E947C280E94F82889E30CC08338DB -:103E800071F40E94251D80FF3AC083E50E947C28C2 -:103E90000E94F82883E50E949E280C94F828843814 -:103EA00059F40E94251D82FF2AC087E40E947C28C5 -:103EB0000E94F82887E4EFCF982F9450913A08F4A5 -:103EC000EACF982F905E983058F4282F277081E021 -:103ED00090E001C0880F2A95EAF70E94C528DDCF3F -:103EE000982F955A933020F480E090E00C94471D71 -:103EF000885A833120F480E090E00C945D1D089591 -:103F0000882321F00E94BF280C94F8280895882364 -:103F100021F00E94C5280C94F8280895BF92CF92F2 -:103F2000DF92EF92FF920F931F93CF93DF93CDB762 -:103F3000DEB727970FB6F894DEBF0FBECDBF8C015A -:103F400085E0F801DE01119601900D928A95E1F766 -:103F5000F80130812181F280558152955F70838113 -:103F60009481892B39F02F3F41F481E090E03F3F6D -:103F700031F003C081E090E002C080E090E080FD7D -:103F800073C339832A8389819A815E830E94392889 -:103F9000B92E8F830E9438280E9460272B2D2295EE -:103FA0002F7030E05E816F812530310509F4E6C065 -:103FB0006CF4243031050CF0A2C04B2D407F8B2DCA -:103FC0008F70223031050CF045C017C02C30310500 -:103FD0004CF42A3031050CF0E7C12830310509F0E6 -:103FE00043C3E5C02D30310509F4BAC20CF4A2C2B6 -:103FF0002F30310509F038C323C3182F411101C0F8 -:1040000002C01295107FFF2059F0112309F46BC2F2 -:10401000812F6F830E94CF280E94F8286F8163C28E -:10402000862F0E942F1F112309F41EC3812F0E9487 -:10403000D52827960FB6F894DEBF0FBECDBFDF910F -:10404000CF911F910F91FF90EF90DF90CF90BF9095 -:104050000C94F828403211F08295807F662319F085 -:10406000613071F523C0FF20B1F0511101C032C0A1 -:10407000513081F527960FB6F894DEBF0FBECDBF45 -:10408000DF91CF911F910F91FF90EF90DF90CF9034 -:10409000BF900C94DF28511101C003C0513009F4C6 -:1040A000E3C28E830E94E2288E819AC1FF2021F014 -:1040B000563008F0D9C20EC0553008F0D5C290C1B4 -:1040C000FF20C9F0552331F0F801958190FF0BC214 -:1040D0009F70958327960FB6F894DEBF0FBECDBFB5 -:1040E000DF91CF911F910F91FF90EF90DF90CF90D4 -:1040F000BF900C94801F552309F472C109C22B2D67 -:1041000026952695237030E02115310529F02130C0 -:10411000310509F0A9C219C0FF2021F0862F9B2D7F -:10412000937002C080E090E027960FB6F894DEBF4F -:104130000FBECDBFDF91CF911F910F91FF90EF90F8 -:10414000DF90CF90BF900C94471DFF2021F0862F69 -:104150009B2D937002C080E090E027960FB6F894F4 -:10416000DEBF0FBECDBFDF91CF911F910F91FF90AA -:10417000EF90DF90CF90BF900C945D1D862FFF20B5 -:1041800019F00E945C2C02C00E94C42C27960FB626 -:10419000F894DEBF0FBECDBFDF91CF911F910F917D -:1041A000FF90EF90DF90CF90BF900C944B2D8B2D14 -:1041B000837009F079C0F11057C2262F22952695F9 -:1041C0002770220F220F862F8F70C82ED12CE12C42 -:1041D000F12C022E04C0CC0CDD1CEE1CFF1C0A943A -:1041E000D2F764FF10C06FE070E080E090E004C0A0 -:1041F000660F771F881F991F2A95D2F760957095D3 -:104200008095909503C060E070E0CB012B2D269542 -:1042100026952370422F50E042305105D9F04330AB -:10422000510569F16C297D298E299F29413051055D -:1042300051F127960FB6F894DEBF0FBECDBFDF91C8 -:10424000CF911F910F91FF90EF90DF90CF90BF9093 -:104250000C9475276C297D298E299F2927960FB6E6 -:10426000F894DEBF0FBECDBFDF91CF911F910F91AC -:10427000FF90EF90DF90CF90BF900C9487270E9423 -:104280007527C701B60127960FB6F894DEBF0FBE9B -:10429000CDBFDF91CF911F910F91FF90EF90DF90F5 -:1042A000CF90BF900C946327FF2019F08B2D817065 -:1042B00001C08695882309F4D7C1262F229526951B -:1042C0002770220F220F862F8F70C82ED12CE12C41 -:1042D000F12C022E04C0CC0CDD1CEE1CFF1C0A9439 -:1042E000D2F764FF10C06FE070E080E090E004C09F -:1042F000660F771F881F991F2A95D2F760957095D2 -:104300008095909503C060E070E0CB012B2D269541 -:1043100026952370422F50E042305105D9F04330AA -:10432000510569F16C297D298E299F29413051055C -:1043300051F127960FB6F894DEBF0FBECDBFDF91C7 -:10434000CF911F910F91FF90EF90DF90CF90BF9092 -:104350000C9414286C297D298E299F2927960FB645 -:10436000F894DEBF0FBECDBFDF91CF911F910F91AB -:10437000FF90EF90DF90CF90BF900C9426280E9482 -:104380001428C701B60127960FB6F894DEBF0FBEFA -:10439000CDBFDF91CF911F910F91FF90EF90DF90F4 -:1043A000CF90BF900C940228603F59F120F4603EFA -:1043B00008F494C008C0623F09F467C0F0F1633F9D -:1043C00009F08CC065C0162F1F708B2D8F71FF20D8 -:1043D00021F00E94AD27812F7DCE0E94C827812F1A -:1043E00027960FB6F894DEBF0FBECDBFDF91CF91F9 -:1043F0001F910F91FF90EF90DF90CF90BF900C94A2 -:10440000871FFF20B1F0553008F02EC18B2D8F7122 -:1044100027960FB6F894DEBF0FBECDBFDF91CF91C8 -:104420001F910F91FF90EF90DF90CF90BF900C9471 -:10443000E727563008F018C1E9CFFF2099F08B2DFF -:104440008F7127960FB6F894DEBF0FBECDBFDF91F8 -:10445000CF911F910F91FF90EF90DF90CF90BF9081 -:104460000C94AD278B2D8F7127960FB6F894DEBF75 -:104470000FBECDBFDF91CF911F910F91FF90EF90B5 -:10448000DF90CF90BF900C94C827F110EBCFD7CF1F -:10449000FF2099F08B2D8F7127960FB6F894DEBF11 -:1044A0000FBECDBFDF91CF911F910F91FF90EF9085 -:1044B000DF90CF90BF900C949E2727960FB6F8946C -:1044C000DEBF0FBECDBFDF91CF911F910F91FF9047 -:1044D000EF90DF90CF90BF900C949927FF20A9F028 -:1044E000552309F4ACCF862F27960FB6F894DEBF7C -:1044F0000FBECDBFDF91CF911F910F91FF90EF9035 -:10450000DF90CF90BF900C94671E552309F4AACF7B -:10451000862F27960FB6F894DEBF0FBECDBFDF9172 -:10452000CF911F910F91FF90EF90DF90CF90BF90B0 -:104530000C942F1F4B2D4F70C8010E941A03279611 -:104540000FB6F894DEBF0FBECDBFDF91CF911F91A4 -:104550000F91FF90EF90DF90CF90BF900C94CB26FF -:10456000F11082C09B2D9F70492F50E042305105C1 -:1045700099F144F44115510569F04130510509F0B4 -:1045800073C019C043305105C1F14430510509F0E1 -:104590006BC044C027960FB6F894DEBF0FBECDBFE8 -:1045A000DF91CF911F910F91FF90EF90DF90CF900F -:1045B000BF900C94223027960FB6F894DEBF0FBE42 -:1045C000CDBFDF91CF911F910F91FF90EF90DF90C2 -:1045D000CF90BF900C94393027960FB6F894DEBF79 -:1045E0000FBECDBFDF91CF911F910F91FF90EF9044 -:1045F000DF90CF90BF900C94553027960FB6F8946B -:10460000DEBF0FBECDBFDF91CF911F910F91FF9005 -:10461000EF90DF90CF90BF900C946830862F279654 -:104620000FB6F894DEBF0FBECDBFDF91CF911F91C3 -:104630000F91FF90EF90DF90CF90BF900C948C3053 -:104640004B2D4F70C80127960FB6F894DEBF0FBEF2 -:10465000CDBFDF91CF911F910F91FF90EF90DF9031 -:10466000CF90BF900C941B0927960FB6F894DEBF2D -:104670000FBECDBFDF91CF911F910F91FF90EF90B3 -:10468000DF90CF90BF9008950E94DC280E94B1284F -:104690000E94F8280E94F72D0E944B2D80E090E0A8 -:1046A0000E94471D80E090E00C945D1D0E94CC2884 -:1046B0000C9444230E943928292F22952F7030E032 -:1046C0002C3031054CF42A3031056CF4225031097C -:1046D0002230310590F407C02C30310551F02F30D5 -:1046E000310559F406C0803E10F0803F31F481E07E -:1046F000089593FB882780F9089580E00895CF936B -:10470000DF9300D000D01F92CDB7DEB70F900F908F -:104710000F900F900F90DF91CF910895CF93DF937B -:1047200000D000D000D0CDB7DEB726960FB6F894F3 -:10473000DEBF0FBECDBFDF91CF9108951F93CF9302 -:10474000DF93C091DB0216E012C0D0E01C9FF001A5 -:104750001D9FF00D1124E555FD4F4081518162816F -:104760007381848195810E948E232196C7708091E8 -:10477000DC02C813EACFDF91CF911F9108954091D9 -:10478000A5025091A6026091A7027091A8028091A3 -:10479000A9029091AA020C948E230F931F93CF939A -:1047A000DF938091AA0282958F7009F069C0809191 -:1047B000A702882309F464C0A091DB02D091DC0237 -:1047C000B091A502C091A6028091A8029091A90281 -:1047D00021E030E0BF3F11F020E030E0122FBC01BB -:1047E0006095709506E04AC0009721F0CF3F29F40C -:1047F000212F05C021E030E002C020E030E020FDA4 -:104800003BC04A2F50E0049FF001059FF00D11249A -:10481000E555FD4F2181C2132FC02081B2132CC05A -:104820002281211129C0238134812817390718F0EA -:10483000281B390B02C0260F371F283C3105E0F436 -:104840008091AA028F7080618093AA0286E0849F83 -:10485000F001859FF00D1124E055FD4F80818F7090 -:104860008061808385EA92E00E948E1FDF91CF9164 -:104870001F910F910C949E23AF5FA770AD13B4CF1F -:10488000DF91CF911F910F910895EF92FF920F93B7 -:104890001F93CF93DF93CDB7DEB762970FB6F8942F -:1048A000DEBF0FBECDBF8C0185E0F801DE011D9695 -:1048B00001900D928A95E1F7D8014C9111965C9187 -:1048C000119712966C9112971396ED90FC90149795 -:1048D0007091A502E091A6028091A8029091A90290 -:1048E000009739F0EF3F41F421E030E07F3F31F0B5 -:1048F00003C021E030E002C020E030E020FD5CC1D8 -:104900002091A702222309F4F1C0E816F90628F045 -:104910009701281B390BC90104C0809590958E0D15 -:104920009F1D883C910508F098C08091AA02982F9D -:10493000907F09F064C0E51314C0741312C06111B4 -:1049400010C08F7080618093AA020E94BF2385EA05 -:1049500092E00E948E1F8091AA02D80115968C9336 -:1049600043C1EF2839F05F3F41F481E090E04F3FD1 -:1049700031F003C081E090E002C080E090E080FD73 -:1049800003C081E0862702C080E090E080FF2EC057 -:104990008091DB022091DC0236E013C090E0389F6A -:1049A000F001399FF00D1124E555FD4F718157132A -:1049B00006C07081471303C07281671317C0019648 -:1049C00087708213EBCF12C19F7059F0882309F4CE -:1049D0000BC107C09F7029F0F8019581907F09F401 -:1049E00003C1805E883008F4FFC0D2C0662309F49A -:1049F000FBC08091AA0281608093AA02F5C0E513F2 -:104A000008C0741306C0611104C0D80115968C93B8 -:104A10009DC04D875E878D859E856A8B0E945A2337 -:104A20006A89882309F4B4C0662309F4B1C02091CF -:104A3000AA02822F82958F7090E002970CF4C6C074 -:104A40008091A5029091A60298878F831986FB8694 -:104A5000EA862C87CE01079646C08091AA02982F3D -:104A6000907F59F47E2DF98AE88A89890E947F23F4 -:104A700085EA92E00E948E1F95C0E51311C0741361 -:104A80000FC061110DC0F8018583C8010E948E1FFF -:104A9000E5EAF2E086E0DF011D928A95E9F7A2C01F -:104AA0004D875E878D859E856A8B0E945A236A8911 -:104AB000882309F46DC0662309F46AC02091AA0214 -:104AC000822F82958F7090E002970CF47FC08091C6 -:104AD000A5029091A6029A8389831B82FD82EC82B3 -:104AE0002E83CE0101960E948E1F70C0E816F90633 -:104AF00028F09701281B390BC90104C080959095B7 -:104B00008E0D9F1D883C910508F046C0662309F470 -:104B10003FC0E51330C074132EC02091AA0220FDBF -:104B200021C0322F32953F70832F90E00097D1F053 -:104B3000D80115962C9315970F9741F0832F8F5F0F -:104B40008295807F2F70282B15962C93C8010E9488 -:104B50008E1F86E0F801A5EAB2E001900D928A95D9 -:104B6000E1F73EC086E0F801A5EAB2E001900D92BF -:104B70008A95E1F737C04D875E878D859E850E94B7 -:104B80005A23811123C08091AA0281608093AA02D6 -:104B9000C8010E948E1F26C07E2DF98AE88A898965 -:104BA0000E947F23E5EAF2E086E0DF011D928A950C -:104BB000E9F70E94BF2318C0662351F34D875E8733 -:104BC0008D859E850E945A23882311F386E0F80183 -:104BD000A5EAB2E001900D928A95E1F70E94CD23FB -:104BE0000E94BF2381E014C080E012C04D875E8721 -:104BF0008D859E850E943928292F22952F7030E0BF -:104C0000223031050CF4E0CE243031050CF6E2CE32 -:104C100062960FB6F894DEBF0FBECDBFDF91CF9185 -:104C20001F910F91FF90EF9008951F93CF93DF9303 -:104C3000CDB7DEB72C970FB6F894DEBF0FBECDBF51 -:104C40004F83588769877A878B879C87CE01079621 -:104C50000E9445248823D9F02F8138858A859B8539 -:104C6000892B39F03F3F19F080E090E004C02F3FDE -:104C7000D9F781E090E0892B09F06DC04F8158850C -:104C800069857A858B859C850E948E2364C086E029 -:104C9000FE013796DE01119601900D928A95E1F79B -:104CA000FF81E8854A855B854115510539F0EF3F65 -:104CB00041F481E090E0FF3F31F003C081E090E0FB -:104CC00002C080E090E080FD46C02091DC0230E030 -:104CD000C9010196877099276091DB0270E0861701 -:104CE000970709F440C0F983EA835D834C8396E01B -:104CF000929FD001939FB00D1124A555BD4FFE0189 -:104D0000319601900D929A95E1F78093DC020E9412 -:104D10009E2321C0189FC001112485559D4F0E94DC -:104D20004524882371F1E091DB021E9FF0011124DC -:104D3000E555FD4F40815181628173818481958168 -:104D40000E948E238091DB0290E001968770992764 -:104D50008093DB0201C016E08091DB029091DC02BF -:104D60008913D8CF0EC00E9456231092DC021092F5 -:104D7000DB02E5EAF2E086E0DF011D928A95E9F7C1 -:104D8000EACF2C960FB6F894DEBF0FBECDBFDF91F1 -:104D9000CF911F910895DF92EF92FF920F931F938F -:104DA000CF93DF93EC01009709F46EC0D12CEE2471 -:104DB000E394F12C8E010F5F1F4FFE018491843725 -:104DC00048F4843008F04CC0813071F0823009F032 -:104DD0005BC01EC0853709F43FC080F1982F9458FE -:104DE000903708F051C03FC02296F8018491982F67 -:104DF000905E983050F48770FE2D01C0FF0F8A95A9 -:104E0000EAF78F2F0E94CF2813C00E94671E2FC081 -:104E10002296F8018491982F905E983060F4877004 -:104E2000FE2D01C0FF0F8A95EAF78F2F0E94D5282B -:104E30000E94F8281CC00E942F1F19C02296F8015A -:104E4000049107C08FE99FE00197F1F700C00000CF -:104E500001500111F7CF0BC02296F801D49007C082 -:104E60000E94671E03C08F770E942F1FE8018D2DBF -:104E700007C08150EFE9FFE03197F1F700C0000073 -:104E8000882309F497CFF5CFDF91CF911F910F9130 -:104E9000FF90EF90DF9008956093E1027093E2023B -:104EA0008093E3029093E4020C9444236093DD0228 -:104EB0007093DE028093DF029093E0020C9444230F -:104EC00008950C944C270F931F930091E1021091C9 -:104ED000E2022091E3023091E402602B712B822BDD -:104EE000932B1F910F910C944C270F931F930091BC -:104EF000E1021091E2022091E3023091E40260238A -:104F00007123822393231F910F910C944C270F93AD -:104F10001F930091E1021091E2022091E30230918F -:104F2000E40260277127822793271F910F910C9429 -:104F30004C2760E070E0CB010C94562741E050E034 -:104F400060E070E004C0440F551F661F771F8A950C -:104F5000D2F7CB01BA010C94562741E050E060E053 -:104F600070E004C0440F551F661F771F8A95D2F763 -:104F70008091DD029091DE02A091DF02B091E0020B -:104F8000482B592B6A2B7B2BCB01BA010C9456274B -:104F900041E050E060E070E004C0440F551F661F20 -:104FA000771F8A95D2F740955095609570958091BE -:104FB000DD029091DE02A091DF02B091E002482371 -:104FC00059236A237B23CB01BA010C94562741E075 -:104FD00050E060E070E004C0440F551F661F771F6B -:104FE0008A95D2F78091DD029091DE02A091DF02D6 -:104FF000B091E002482759276A277B27CB01BA01E5 -:105000000C9456270F931F930091DD021091DE023E -:105010002091DF023091E002602B712B822B932BC9 -:105020001F910F910C9456270F931F930091DD024F -:105030001091DE022091DF023091E00260237123A3 -:10504000822393231F910F910C9456270F931F9344 -:105050000091DD021091DE022091DF023091E0022A -:1050600060277127822793271F910F910C94562751 -:105070000895CF92DF92EF92FF920F931F93CF93F9 -:10508000DF93EC01C090E102D090E202E090E302F5 -:10509000F090E4028091DD029091DE02A091DF02A7 -:1050A000B091E002C82AD92AEA2AFB2A0FE110E0CF -:1050B000B701A601002E04C07695679557954795D0 -:1050C0000A94D2F740FF08C0BE01802F0E947104ED -:1050D0008130910509F007C00150110948F7BE0160 -:1050E00080E00E947104DF91CF911F910F91FF909A -:1050F000EF90DF90CF90089540918B0150918C01FB -:1051000020E030E09FEFFA01E20FF31F62816817A1 -:10511000A1F09F3F19F4611101C0922F2F5F3F4F03 -:105120002630310581F707C0FA01E90FF11D97FD1F -:10513000FA95828308959F3FB9F7089540918B01B6 -:1051400050918C0120E030E0FA01E20FF31F9281D0 -:10515000981301C012822F5F3F4F26303105A1F70F -:10516000089581E090E0E0918B01F0918C01E80FCF -:10517000F91F1082019688309105A9F70895909142 -:10518000E502982B9093E502089580959091E502B1 -:1051900098239093E50208951092E5020895909166 -:1051A000E602982B9093E602089580959091E6028E -:1051B00098239093E60208951092E6020895809352 -:1051C000E70208951092E702089540918B015091F3 -:1051D0008C0120E030E080E0FA01E20FF31F9181C2 -:1051E00091118F5F2F5F3F4F27303105A9F7089549 -:1051F000E0918B01F0918C018091E5028083E09138 -:105200008B01F0918C0180819091E602892B808343 -:105210009091E702992361F0E0918B01F0918C016C -:105220008081892B80830E94E52881110E94E228D9 -:1052300080918B0190918C010C94311D8091FA0327 -:10524000843021F11092F10220E488E190E00FB661 -:10525000F894A895809360000FBE2093600080E0D2 -:105260000E94590383B7817F846083BF83B78160C5 -:1052700083BF7894889583B78E7F83BF88E10FB60C -:10528000F89480936000109260000FBE0895089516 -:105290000895CF9380E00E9459030E9447290E94FD -:1052A000BD070E944829C0E08C2F0E941109892B5C -:1052B00029F4CF5FC530C1F780E001C081E0CF9114 -:1052C00008950E94562380E00E9459030E941130E5 -:1052D0000E94251D0C94E7051F920F920FB60F92A6 -:1052E00011248F939F93AF93BF938091F10281110B -:1052F00013C08091F2029091F302A091F402B09158 -:10530000F5024196A11DB11D8093F2029093F30224 -:10531000A093F402B093F502BF91AF919F918F914A -:105320000F900FBE0F901F90189582E084BD93E000 -:1053300095BD9AEF97BD80936E0008958FB7F8944E -:105340004091F2025091F3026091F4027091F502E3 -:105350008FBFCA010895CF92DF92EF92FF920F9311 -:105360001F932FB7F8944091F2025091F30260918D -:10537000F4027091F5022FBF6A017B01EE24FF2435 -:105380008C0120E030E0C016D106E206F30620F0E2 -:105390009A01281B390B05C09C0120953095240FDC -:1053A000351FC9011F910F91FF90EF90DF90CF90B3 -:1053B00008951F920F920FB60F9211248F939F930F -:1053C000AF93BF938091F2029091F302A091F40207 -:1053D000B091F5020196A11DB11D8093F202909348 -:1053E000F302A093F402B093F502BF91AF919F91A5 -:1053F0008F910F900FBE0F901F9018950E946D1601 -:10540000F8942FEF87EA91E6215080409040E1F731 -:1054100000C0000087E090EBDC01809304049093CF -:105420000504A0930604B09307042CE088E190E003 -:105430000FB6F894A895809360000FBE209360008B -:10544000FFCFCF92DF92EF92FF920F931F93CF93F4 -:10545000DF93C82ED12C01E010E08D2D0E941109A0 -:105460007C01C0E0D0E098010C2E02C0220F331F57 -:105470000A94E2F72E213F21232B29F42196CC30E8 -:10548000D10589F708C06C2F7D2D80E00E944C0467 -:10549000C812F4CF06C0D39485E0D812DECF80E0E6 -:1054A00001C081E0DF91CF911F910F91FF90EF90AC -:1054B000DF90CF900895CF93C82F8CE20E94212ACD -:1054C000882321F08C2FCF910C94212A80E0CF915A -:1054D0000895CF930E94AC2B811102C00E948D2BA6 -:1054E000C5E608C00E94BD078FE39CE90197F1F76C -:1054F00000C00000C150B1F789E20E945B2A81110F -:105500000AC18AE20E945B2A81110E948D2B85E0EC -:105510000E945B2A81110E94FE290E94B72B809372 -:10552000F00287E00E945B2A882399F18BE10E94B8 -:105530005B2A882351F09091F00291FB882780F933 -:1055400021E0822780FB91F922C08EE00E945B2A35 -:10555000882351F09091F00292FB882780F921E096 -:10556000822780FB92F913C080E10E945B2A909110 -:10557000F002882341F093FB882780F921E08227FD -:1055800080FB93F904C0892F809580FB90F990935C -:10559000F0028091F0020E94BB2B0E94C92B8093E5 -:1055A000010380EE0E945B2A882341F08091010371 -:1055B000982F909590FB80F98093010389E30E94D6 -:1055C0005B2A882359F09091010391FB882780F989 -:1055D00021E0822780FB91F99093010382EE0E94E3 -:1055E0005B2A882359F09091010392FB882780F968 -:1055F00021E0822780FB92F99093010386EE0E94BE -:105600005B2A882359F09091010393FB882780F946 -:1056100021E0822780FB93F99093010383EE0E949F -:105620005B2A882359F09091010394FB882780F925 -:1056300021E0822780FB94F99093010385E30E9487 -:105640005B2A882359F09091010395FB882780F904 -:1056500021E0822780FB95F99093010381E30E946A -:105660005B2A882359F09091010396FB882780F9E3 -:1056700021E0822780FB96F99093010381E10E944B -:105680005B2A882359F09091010397FB882780F9C2 -:1056900021E0822780FB97F9909301038091010319 -:1056A0000E94CD2B87E20E945B2AC82F8EE10E94C8 -:1056B0005B2A8111C2608FE10E945B2A8111C46064 -:1056C00080E20E945B2A8111C86081E20E945B2A0D -:1056D0008111C06182E20E945B2A8111C06283E273 -:1056E0000E945B2A8111C06484E20E945B2A8823A5 -:1056F00011F0C06802C0CC2329F08C2F0E94C42B6B -:105700006C2F03C00E94C02B682F70E080E090E0F7 -:10571000CF910C946127CF9108956DEE7EEF80E0DC -:1057200090E00E94783460E082E090E00E946A3469 -:1057300060E083E090E00E946A3460E084E090E002 -:105740000E946A3460E085E090E00E946A3460E084 -:1057500086E090E00C946A3480E090E00E9464342B -:1057600021E08D3E9E4F09F020E0822F089582E0D7 -:1057700090E00C945C34682F82E090E00C946A34E2 -:1057800083E090E00C945C34682F83E090E00C940C -:105790006A3484E090E00C945C34682F84E090E0FC -:1057A0000C946A3486E090E00C945C34682F86E0B8 -:1057B00090E00C946A348091FE0280FF0BC06091EF -:1057C000900185E0689FB0011124759567957595E6 -:1057D00067952AC081FF09C06091900185E0689FAC -:1057E000B0011124759567951FC082FF07C06091B5 -:1057F000900185E0689FB001112416C04091F80225 -:105800004423C9F060918F01461788F720919001D9 -:1058100085E0289F90011124429FC001439F900D75 -:10582000112470E00E9448346038710540F461151D -:10583000710539F002C065E070E0862F08958FE7AA -:10584000089581E008958091FE0280FF08C0609174 -:105850008E0170E0759567957595679521C081FFFC -:1058600006C060918E0170E07595679519C082FF42 -:1058700004C060918E0170E010C08091F80288230E -:10588000C1F060918D018617A0F790918E01989FCD -:10589000C001112470E00E9448346038710528F47A -:1058A0006115710521F0862F08958FE7089581E035 -:1058B000089561E070E0F4CF803F21F40E94DB2B7B -:1058C000819504C0813F29F40E94DB2B8093FB0269 -:1058D0000895823F21F40E94DB2B819504C0833F11 -:1058E00029F40E94DB2B8093FA020895893F19F472 -:1058F0000E94232C05C08A3F31F40E94232C8195FD -:105900008093FC0208958B3F21F40E94232C819503 -:1059100004C08C3F29F40E94232C8093FD0208953B -:10592000843F21F48091F902816017C0853F21F402 -:105930008091F902826011C0863F21F48091F902C2 -:1059400084600BC0873F21F48091F902886005C014 -:10595000883F31F48091F90280618093F9020895C3 -:105960008D3F21F48091FE0281600BC08E3F21F4B7 -:105970008091FE02826005C08F3F29F48091FE0273 -:1059800084608093FE020895803F29F48091FB0299 -:1059900087FF6EC007C0813F41F48091FB0218165B -:1059A0000CF066C01092FB0263C09091FA02823F35 -:1059B00019F497FF5DC005C0833F31F419160CF050 -:1059C00057C01092FA0254C0893F31F48091FC0212 -:1059D00018160CF04DC006C08A3F39F48091FC02C5 -:1059E00087FF46C01092FC0243C08B3F29F4809190 -:1059F000FD0287FF3DC006C08C3F39F48091FD0257 -:105A00001816B4F51092FD0233C0843F21F4809142 -:105A1000F9028E7F05C0853F31F48091F9028D7FB8 -:105A20008093F90225C0863F21F48091F9028B7F93 -:105A3000F7CF873F21F48091F902877FF1CF883F2C -:105A400021F48091F9028F7EEBCF8D3F21F480917C -:105A5000FE028E7F0BC08E3F21F48091FE028D7F6F -:105A600005C08F3F29F48091FE028B7F8093FE0258 -:105A70008091FA0281110EC08091FB0281110AC04F -:105A80008091FC02811106C08091FD02811102C04B -:105A90001092F802089589EF92E00E943C1D0E9446 -:105AA0009E299093F7028093F6020895CF938091F8 -:105AB000F6029091F7020E94AB294091F80244232C -:105AC00021F02091910130E006C0209192015AE02E -:105AD000259F900111248217930708F486C08091B6 -:105AE000FA0281110DC09091FB02911109C09091B1 -:105AF000FC02911105C09091FD02992309F475C033 -:105B00004F3F19F04F5F4093F802181624F40E949B -:105B1000DB2B8093FA028091FA0287FF05C00E9476 -:105B2000DB2B81958093FA028091FB02181624F4F6 -:105B30000E94DB2B8093FB028091FB0287FF05C054 -:105B40000E94DB2B81958093FB026091FA02662311 -:105B500039F1C091FB02CC2319F1772767FD7095CD -:105B6000872F972F0E94AC3123E333E343E35FE3B6 -:105B70000E9460320E9479316093FA026C2F77277D -:105B800067FD7095872F972F0E94AC3123E333E395 -:105B900043E35FE30E9460320E9479316093FB022D -:105BA0008091FC02181624F40E94232C8093FC029E -:105BB0008091FC0287FF05C00E94232C8195809371 -:105BC000FC028091FD02181624F40E94232C80937D -:105BD000FD028091FD0287FF05C00E94232C819564 -:105BE0008093FD02CF910C944B2DCF910895E9EF56 -:105BF000F2E085E0DF011D928A95E9F71092F80244 -:105C00001092FE020895833089F130F4813061F002 -:105C1000823009F06EC019C0853009F449C0B8F16E -:105C2000863009F066C055C020919201862F90E021 -:105C3000820F911D8F3F910520F4620F60939201B6 -:105C400008958FEF80939201089520919101862FFE -:105C500090E0820F911D8F3F910520F4620F6093B9 -:105C6000910108958FEF8093910108952091900103 -:105C7000862F90E0820F911D8F3F910520F4620FD7 -:105C80006093900108958FEF809390010895209183 -:105C90008F01862F90E0820F911D8F3F910520F498 -:105CA000620F60938F0108958FEF80938F010895A5 -:105CB00020918E01862F90E0820F911D8F3F9105DC -:105CC00020F4620F60938E0108958FEF80938E0110 -:105CD000089520918D01862F90E0820F911D8F3FB6 -:105CE000910520F4620F60938D0108958FEF8093EA -:105CF0008D010895833021F130F4813059F08230E4 -:105D000009F049C012C0853089F128F1863009F0C8 -:105D100042C037C080919201681720F4861B80939F -:105D2000920108951092920108958091910168174F -:105D300020F4861B8093910108951092910108959B -:105D400080919001681720F4861B8093900108953C -:105D500010929001089580918F01681720F4861B9E -:105D600080938F01089510928F01089580918E0184 -:105D7000681720F4861B80938E01089510928E017F -:105D8000089580918D01681720F4861B80938D0102 -:105D9000089510928D01089541E050E060E070E0B8 -:105DA00004C0440F551F661F771F8A95D2F7CB0199 -:105DB000BA010E9461270C945623873200F58E3178 -:105DC00008F086C08E3009F466C060F4873009F4AC -:105DD0004DC018F4863049F531C0883041F18B3020 -:105DE00021F57BC0863109F478C018F48031E9F4DC -:105DF0005CC0893109F471C08B31B9F442C0883379 -:105E000009F46BC048F4893209F460C0853309F4A1 -:105E10005DC0873251F45AC0833409F457C018F476 -:105E20008A3318F057C0883499F080E008950E94B2 -:105E3000B72B0E94C92B0E94D22B4FC08091F00239 -:105E4000817F8E7F8093F00281E08093FF0208952E -:105E50000E9456232FEF83ED90E321508040904025 -:105E6000E1F700C000000E94FE2937C08091F002D7 -:105E700080FF03C0817F8E7F01C081608093F0022C -:105E80002CC09091F00291FB882780F921E08227B5 -:105E900080FB91F913C09091F00292FB882780F962 -:105EA00021E0822780FB92F909C09091F00293FBD8 -:105EB000882780F921E0822780FB93F99093F002F4 -:105EC000882359F091609093F00207C080E003C0EE -:105ED0008D5101C089530E94CC2E81E0089580E04D -:105EE000089580E00895CF93C82F8091FF028130FC -:105EF00071F020F0823009F089C037C0A0918B0189 -:105F0000B0918C018C91823209F082C007C0A091BF -:105F10008B01B0918C018C91823249F48C2F0E94BC -:105F20006F2F81111EC08C2F0E94DD2E1CC08C2F64 -:105F30000E94712F811115C0C43169F030F4CB304B -:105F400081F0C03109F068C009C0C93221F0C833FE -:105F500009F062C006C01092FF025EC082E080932A -:105F6000FF0281E090E081705AC0C932C9F060F44C -:105F7000C431B1F020F4C73009F04CC034C0CE5168 -:105F8000C63008F047C017C0CE3439F120F4CB3406 -:105F900009F040C01CC0C135C1F0C235D9F513C0ED -:105FA00080910003882319F01092000333C081E030 -:105FB0008093FF0234C0EC2FF0E0E25EFD4F808161 -:105FC0008093000327C061E003C061E007C06AE07E -:105FD000809100030E94032E1DC06AE0809100039F -:105FE0000E947A2E17C08EE18093920182E3809303 -:105FF00091018AE08093900184E180938F0188E091 -:1060000080938E0188E280938D0104C01092FF027C -:1060100080E005C081E003C080E090E0A4CFCF9194 -:1060200008950E94AC2B811102C00E948D2B0E940A -:10603000D22B8093030480FF02C0869501C080E0CC -:106040000C94590380910304982F9695292F30E0E2 -:10605000233031054CF49F5F990F8170892B81604B -:10606000809303040E94D62B8091030486950C94A0 -:10607000590380910304982F969591F09158990FA8 -:106080008170892B809303048E7F91E009F490E066 -:106090008091030490FB80F9809303040E94D62B27 -:1060A0008091030486950C94590380910304982FE2 -:1060B000909590FB80F9809303040E94D62B8091E9 -:1060C000030480FF02C0869501C080E00C94590350 -:1060D00030910304232F26952F5F2F77822F90E096 -:1060E000317004972CF4220F232B2093030402C059 -:1060F0003093030480910304282F2E7F91E009F44C -:1061000090E090FB80F9809303040E94D62B80914D -:10611000030486950C94590320910304922F9695BD -:106120009827990F822F8170892B809303048E7F8B -:1061300091E009F490E08091030490FB80F9809352 -:1061400003040E94D62B8091030486950C94590376 -:106150005058BB27AA270ED075C166D130F06BD13D -:1061600020F031F49F3F11F41EF45BC10EF4E09572 -:10617000E7FB51C1E92F77D180F3BA1762077307A4 -:106180008407950718F071F49EF58FC10EF4E09521 -:106190000B2EBA2FA02D0B01B90190010C01CA01E1 -:1061A000A0011124FF27591B99F0593F50F4503E8C -:1061B00068F11A16F040A22F232F342F4427585F7E -:1061C000F3CF469537952795A795F0405395C9F796 -:1061D0007EF41F16BA0B620B730B840BBAF091504E -:1061E000A1F0FF0FBB1F661F771F881FC2F70EC0ED -:1061F000BA0F621F731F841F48F4879577956795C0 -:10620000B795F7959E3F08F0B3CF9395880F08F0A8 -:106210009927EE0F979587950895D9D008F481E0D6 -:1062200008950CD00FC107D140F0FED030F021F41A -:106230005F3F19F0F0C0511139C1F3C014D198F388 -:106240009923C9F35523B1F3951B550BBB27AA27F7 -:1062500062177307840738F09F5F5F4F220F331F69 -:10626000441FAA1FA9F333D00E2E3AF0E0E830D035 -:1062700091505040E695001CCAF729D0FE2F27D038 -:10628000660F771F881FBB1F261737074807AB0706 -:10629000B0E809F0BB0B802DBF01FF2793585F4F7B -:1062A0002AF09E3F510568F0B6C000C15F3FECF395 -:1062B000983EDCF3869577956795B795F7959F5F40 -:1062C000C9F7880F911D9695879597F90895E1E094 -:1062D000660F771F881FBB1F621773078407BA07F3 -:1062E00020F0621B730B840BBA0BEE1F88F7E0954E -:1062F000089504D06894B111D9C00895BCD088F035 -:106300009F5790F0B92F9927B751A0F0D1F0660FA1 -:10631000771F881F991F1AF0BA95C9F712C0B130BC -:1063200081F0C3D0B1E00895C0C0672F782F8827CF -:10633000B85F39F0B93FCCF3869577956795B395FB -:10634000D9F73EF490958095709561957F4F8F4F6A -:106350009F4F0895E89409C097FB3EF4909580956F -:10636000709561957F4F8F4F9F4F9923A9F0F92F1B -:1063700096E9BB279395F695879577956795B79599 -:10638000F111F8CFFAF4BB0F11F460FF1BC06F5F7F -:106390007F4F8F4F9F4F16C0882311F096E911C091 -:1063A000772321F09EE8872F762F05C0662371F0B2 -:1063B00096E8862F70E060E02AF09A95660F771FC6 -:1063C000881FDAF7880F9695879597F90895990FA2 -:1063D0000008550FAA0BE0E8FEEF16161706E807AF -:1063E000F907C0F012161306E407F50798F0621BD0 -:1063F000730B840B950B39F40A2661F0232B242BA5 -:10640000252B21F408950A2609F4A140A6958FEFC3 -:10641000811D811D089597F99F6780E870E060E015 -:1064200008959FEF80EC089500240A94161617062D -:1064300018060906089500240A9412161306140675 -:1064400005060895092E0394000C11F4882352F0D8 -:10645000BB0F40F4BF2B11F460FF04C06F5F7F4F90 -:106460008F4F9F4F089557FD9058440F551F59F077 -:106470005F3F71F04795880F97FB991F61F09F3F31 -:1064800079F087950895121613061406551FF2CF5A -:106490004695F1DF08C0161617061806991FF1CFAA -:1064A00086957105610508940895E894BB276627D1 -:1064B0007727CB0197F908958ADF08F48FEF0895C5 -:1064C0000BD0C0CFB1DF28F0B6DF18F0952309F06C -:1064D000A2CFA7CF1124EACFC6DFA0F3959FD1F3B7 -:1064E000950F50E0551F629FF001729FBB27F00D82 -:1064F000B11D639FAA27F00DB11DAA1F649F6627D7 -:10650000B00DA11D661F829F2227B00DA11D621F25 -:10651000739FB00DA11D621F839FA00D611D221FDF -:10652000749F3327A00D611D231F849F600D211DC3 -:10653000822F762F6A2F11249F5750408AF0E1F066 -:1065400088234AF0EE0FFF1FBB1F661F771F881FAF -:1065500091505040A9F79E3F510570F05CCFA6CFF7 -:106560005F3FECF3983EDCF3869577956795B7959A -:10657000F795E7959F5FC1F7FE2B880F911D9695C4 -:10658000879597F90895FA01EE0FFF1F30962105C0 -:10659000310599F16115710561F48038BFE39B07FE -:1065A00049F168949038810561F08038BFEF9B070E -:1065B00041F0992342F5FF3FE1053105210511F135 -:1065C000E8940894E795D901AA2329F4AB2FBE2FAC -:1065D000F85FD0F310C0FF5F70F4A695E0F7F739CD -:1065E00050F019F0FF3A38F49F779F930CD00F903A -:1065F00007FC905808953EF014CF60E070E080E80A -:106600009FE308954FE79F775F934F933F932F93B7 -:106610009ED02F913F914F915F9152DF05C019F4A9 -:106620000EF0F9CE42CFFDCE26DFC8F39638C0F784 -:1066300007F80F92E8942BE33AEA48EB5FE74EDF66 -:106640000F920F920F924DB75EB70F92C0D0ECEA47 -:10665000F0E016D04F915F91EF91FF91E595EE1F1D -:10666000FF1F49F0FE57E0684427EE0F441FFA95DC -:10667000E1F74195550B32D00F9007FE26C00895E3 -:10668000DF93CF931F930F93FF92EF92DF927B01E3 -:106690008C01689405C0DA2EEF011EDFFE01E8943C -:1066A000A5912591359145915591AEF3EF0162DDAC -:1066B000FE019701A801DA9479F7DF90EF90FF903F -:1066C0000F911F91CF91DF9108959B01AC0160E084 -:1066D00070E080E89FE3A5CD9ECEACC0CCDEE8F3B1 -:1066E0009923D9F3940F511DBBF39150504094F06E -:1066F00059F0882332F0660F771F881F9150504061 -:10670000C1F79E3F510544F7880F911D96958795D7 -:1067100097F908955F3FACF0983E9CF0BB278695B3 -:1067200077956795B79508F4B1609395C1F7BB0F5E -:1067300058F711F460FFE8CF6F5F7F4F8F4F9F4F87 -:10674000E3CFB4CE0EF076C06CCE689464CE93DE08 -:10675000C8F39923D1F3C6F3DF93CF931F930F931D -:10676000FF92C92FDD2788232AF02197660F771F14 -:10677000881FDAF720E030E040E85FEB9FE38839DC -:1067800020F0803E30F021968F77E3DCE4EDF0E0FE -:1067900003C0DFDCE1E0F1E073DF8B01BE01EC015F -:1067A000FB2E6F5771097595771F880B990BD4DDF8 -:1067B00028E132E741E35FE38FDEAF2D9801AE01C0 -:1067C000FF900F911F91CF91DF91D4DC3BCEFA0166 -:1067D000DC01AA0FBB1F9B01AC01BF5728F4222785 -:1067E0003327442750781FC0B75188F4AB2F0024BB -:1067F000469537952795011CA395D2F3002069F0A3 -:10680000220F331F441FB395DAF30DD0A1CC6130B2 -:106810007105A0E88A07B94630F49B01AC016627F0 -:10682000772788279078309621F020833183428320 -:10683000538308959F3F31F0915020F487957795C9 -:106840006795B795880F911D9695879597F9089547 -:10685000991B79E004C0991F961708F0961B881FB2 -:106860007A95C9F780950895AA1BBB1B51E107C013 -:10687000AA1FBB1FA617B70710F0A61BB70B881FD0 -:10688000991F5A95A9F780959095BC01CD0108955F -:1068900097FB072E16F4009407D077FD09D00E94CD -:1068A000343407FC05D03EF4909581959F4F0895B0 -:1068B000709561957F4F0895F999FECF92BD81BD86 -:1068C000F89A992780B50895A8E1B0E042E050E039 -:1068D0000C947F34262FF999FECF1FBA92BD81BD4B -:1068E00020BD0FB6F894FA9AF99A0FBE0196089552 -:1068F0000E946A34272F0C946B34DC01CB01FC011D -:10690000F999FECF06C0F2BDE1BDF89A319600B408 -:0E6910000D9241505040B8F70895F894FFCF13 -:10691E0055D0A44600001644000000000000484276 -:10692E0061978A460000C8430000000000004842FC -:10693E0055D024460000C843000000000000484225 -:10694E0000005C460000C843000000000000484202 -:10695E0061978A4600007A4455D0A4460000C84389 -:10696E00000000000000484200005C460000C843E2 -:10697E00000000000000484255D024460000164496 -:10698E000507000C058540000001064000000100CF -:10699E0091102111FD10C810941001E8022808145E -:1069AE000A321E42004500250026004300610060A9 -:1069BE000020003700640065006600670044004652 -:1069CE000024004700000002000400050007000933 -:1069DE00000B000C000E0010001100130015001724 -:1069EE000018001A001C001D001F002100230024A7 -:1069FE00002600280029002B002D002F0030003229 -:106A0E000034003500370039003B00F6030F042830 -:106A1E0004410469051C05E604C6043F4D362002F8 -:106A2E000302000001000101010101000101010248 -:086A3E00030405060708090026 +:100000000C947C050C94C0050C94C0050C94C005A0 +:100010000C94C0050C94C0050C94C0050C94C0054C +:100020000C94C0050C94C0050C94C7180C94991935 +:100030000C94B2270C94C0050C94C0050C94C00518 +:100040000C94C0050C94C0050C94C0050C94C0051C +:100050000C94C0050C941A280C94C0050C94C0058F +:100060000C94C0050C94C0050C94C0050C94C005FC +:100070000C94C0050C94C0050C94C0050C94C005EC +:100080000C94E50E0C94C0050C94C0050C94C005AE +:100090000C94C0050C94C0050C94C0050C94C005CC +:1000A0000C94C0050C94C0050C94C0051B062B06CF +:1000B0003D064D06530662066E06730680068806E8 +:1000C00098069D06061A281A161B281A161B6D1A62 +:1000D000901A161BE51AF81AFB1DFB1D381E381E58 +:1000E000921ED01E48214821E91E4821EA1FEA1F1E +:1000F000AD20C4204821332107634236B79BD8A7DF +:100100001A39685618AEBAAB558C1D3CB7CC57633C +:10011000BD6DEDFD753EF6177231BF000000803FEA +:1001200008000000BE922449123EABAAAA2ABECD06 +:10013000CCCC4C3E00000080BEABAAAAAA3E000078 +:100140000000BF000000803F000000000008417870 +:10015000D3BB4387D1133D190E3CC3BD4282AD2BA7 +:100160003E68EC8276BED98FE1A93E4C80EFFFBE9F +:1001700001C4FF7F3F000000000035001E001F008B +:100180002000210022002300240025002600270053 +:100190002A002B0014001A000800150017001C008C +:1001A00018000C00120013004C0029000400160077 +:1001B000070009000A000B000D000E000F003300BD +:1001C0003400E1001D001B000600190005001100AD +:1001D000100036003700380028000530E000E2004B +:1001E000E30003302C002C0004305000510052007A +:1001F0004F0035001E001F002000210022002300B8 +:1002000024002500260027002A002B0014001A00D5 +:10021000090013000A000D000F0018001C00330035 +:100220004C002900040015001600170007000B0001 +:10023000110008000C0012003400E1001D001B003A +:100240000600190005000E001000360037003800C7 +:1002500028000530E000E200E30003302C002C0011 +:1002600004305000510052004F0035001E001F00A6 +:100270002000210022002300240025002600270062 +:100280002A002B0034003600370013001C00090040 +:100290000A00060015000F004C002900040012009F +:1002A000080018000C0007000B00170011001600D2 +:1002B0003800E100330014000D000E001B000500A3 +:1002C00010001A0019001D0028000530E000E200AF +:1002D000E30003302C002C00043050005100520089 +:1002E0004F0035021E021F022002210222022302B9 +:1002F00024022502260227022A0035021E021F02BE +:1003000020022102220223022402250226022702C1 +:100310004C004C003A003B003C003D003E003F00DA +:100320002D022E022F023002310201004000410056 +:1003300042004300440045000100010001000100AB +:1003400001000100010001000100010001000100A5 +:100350000100AB00AA00A900AE0035001E001F007E +:100360002000210022002300240025002600270071 +:100370002A0035001E001F0020002100220023005B +:1003800024002500260027004C004C003A003B00CA +:100390003C003D003E003F002D002E002F003000AD +:1003A000310001004000410042004300440045008C +:1003B0000100010001000100010001000100010035 +:1003C00001000100010001000100AB00AA00A9002A +:1003D000AE0000000000000000000000000000006F +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:100430000000000000000000000003300000000089 +:100440000430000000000000000000000000000078 +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F000000000000000000000003A003B003C0047 +:100900003D003E003F0040004100420043004400E3 +:10091000450001000050010001000100010001003C +:1009200001000100010001004C0001000100010074 +:1009300007300630135012500030013002300100F1 +:10094000010001000B300A300930083001000100BD +:10095000010001000100010001000100010001008F +:10096000010001000100010001000100010001007F +:1009700001002A0354006800650020005000720046 +:1009800065006F006E006900630020004B00650089 +:10099000790062006F0061007200640000002C03A7 +:1009A0004F007200740068006F006C0069006E00F8 +:1009B00065006100720020004B0065007900620054 +:1009C0006F006100720064007300000004030904FA +:1009D00009025400030100A0FA0904000001030108 +:1009E0000100092111010001223F000705810308D0 +:1009F000000A09040100010301020009211101009C +:100A000001224D000705820308000A0904020001C3 +:100A100003000000092111010001223600070583AF +:100A20000308000A1201100100000008EDFE6160D9 +:100A300001000102000105010980A10185021601E2 +:100A40000026B7001A01002AB70075109501810031 +:100A5000C0050C0901A1018503160100269C021A9C +:100A600001002A9C02751095018100C00501090250 +:100A7000A1010901A1000509190129051500250198 +:100A80009505750181029501750381010501093004 +:100A900009311581257F9502750881060938158170 +:100AA000257F950175088106050C0A3802158125F8 +:100AB0007F950175088106C0C005010906A10105E1 +:100AC0000719E029E71500250195087501810295B0 +:100AD0000175088101050819012905950575019120 +:100AE000029501750391010507190029FF150025DD +:100AF000FF950675088100C011241FBECFEFDAE014 +:100B0000DEBFCDBF04B603FE24C08091F3039091F5 +:100B1000F403A091F503B091F6038730904BA74002 +:100B2000B04BB9F41092F3031092F4031092F50352 +:100B30001092F60314BE84B7877F84BF88E10FB696 +:100B4000F89480936000109260000FBEE0E0F8E33C +:100B5000099512E0A0E0B1E0E8EAF3E602C00590F2 +:100B60000D92A63FB107D9F713E0A6EFB2E001C09E +:100B70001D92A33FB107E1F70E940D160C94D231EC +:100B80000C940000279A2F988FEF9FEF9093870087 +:100B9000809386008AE08093800089E180938100C1 +:100BA0000C94092D282F81110BC080918000877F24 +:100BB0008093800010928D0010928C002F980895E1 +:100BC0002F9880918000886080938000233019F4F2 +:100BD0008FEF9FEF0FC083E090E0821B9109880F99 +:100BE000991F2FEF3FEFA90102C0569547958A95AF +:100BF000E2F7CA0190938D0080938C000895CF9303 +:100C0000DF93EC010E94AE28BE0180E090E0DF910E +:100C1000CF910C9428250F931F93462F50E04C3012 +:100C2000510508F098C0DC01FA01EA5AFF4F12960C +:100C30008C910C949631882309F48DC000E010E06B +:100C4000980140E064E070E089EC91E00E9463125A +:100C500081E090E00FC0882309F47DC000E010E03F +:100C6000980140E066E070E089E591E00E9463123F +:100C700082E090E00E94FF056EC0882309F46BC0FB +:100C800000E010E0980140E068E070E089E891E061 +:100C90000E94631284E090E0EDCF882311F083E09E +:100CA00005C083E00CC0882349F084E00E94A5259C +:100CB00040E164E083E00E94C90A4DC084E00E94E4 +:100CC000C625F6CF882331F085EE0E948F1C0E9446 +:100CD000602D41C085EE0E94571D3DC08823D9F18B +:100CE0000E94F70D38C08823B1F10E94F00D00E09A +:100CF00010E0980140E064E070E089EE91E029C0E6 +:100D0000882349F185E00E94C6250E94180E23C061 +:100D1000882309F100E010E0980140E068E070E00D +:100D200089E191E00E94631285E00E94A52513C02D +:100D3000882389F00E94F61204C0882361F00E9483 +:100D4000011300E010E0980140E068E070E089E104 +:100D500091E00E94631280E090E01F910F9108954E +:100D60000F931F932FEF89EF90E021508040904028 +:100D7000E1F700C0000000E010E0980140E064E00E +:100D800070E089EE91E00E9463121F910F91089527 +:100D9000CF92DF92EF92FF920F931F93CF93DF9347 +:100DA000CDB7DEB7CC58D1090FB6F894DEBF0FBE71 +:100DB000CDBF2091B30325FFC5C08C01FC019281FA +:100DC00080910001992309F460C096E4E5E2F2E025 +:100DD000DE01A95BBF4F01900D929A95E1F7F801F2 +:100DE0009081E091F602F091F702E90FF11DEE0F0C +:100DF000FF1F27E430E02C0F3D1FE20FF31F60813F +:100E00007181680F711D882777FD8095982F0E944A +:100E1000A42E20E030E040E451E40E94092E6B0152 +:100E20007C01F801218185E090E0821B9109BC01E1 +:100E3000882777FD8095982F0E94A42E9B01AC01F6 +:100E4000C701B6010E94A12D9B01AC0160E070E0DA +:100E500080E090E40E94173020E030E04CE551E45F +:100E60000E94B42F4FE050E0C457DF4F0FB6F89404 +:100E7000DEBF0FBECDBFDF91CF911F910F91FF90CD +:100E8000EF90DF90CF900C94031296E4E5E2F2E04D +:100E9000DE01119601900D929A95E1F7F80190818B +:100EA000E091F602F091F702E90FF11DEE0FFF1F3E +:100EB00021E030E02C0F3D1FE20FF31F60817181B4 +:100EC000680F711D882777FD8095982F0E94A42EAA +:100ED00020E030E040E451E40E94092E6B017C01E7 +:100EE000F801218185E090E0821B9109BC018827EF +:100EF00077FD8095982F0E94A42E9B01AC01C7011D +:100F0000B6010E94A12D9B01AC0160E070E080E081 +:100F100090E40E94173020E030E04CE551E40E945C +:100F2000B42FC457DF4F0FB6F894DEBF0FBECDBF4E +:100F3000DF91CF911F910F91FF90EF90DF90CF90B5 +:100F40000C944B0EC457DF4F0FB6F894DEBF0FBEA4 +:100F5000CDBFDF91CF911F910F91FF90EF90DF9068 +:100F6000CF9008950F931F9300E010E0980140E0A8 +:100F700063E070E081E091E00E9463122FEF82E570 +:100F800097E0215080409040E1F700C000001F91A1 +:100F90000F91089508950E94C2056E9A769A0C9456 +:100FA000B0060C94CA070C94C8060895880F991FC0 +:100FB000FC01E650F040859194910895880F991FA7 +:100FC000FC01E658FE4F8591949108950F931F936D +:100FD000CF93DF93EC01811520E49207A0F5C115B2 +:100FE00080E3D80708F0E1C0C83ED105D8F4C03E80 +:100FF000D10508F0EEC1C83AD10578F4C53AD1055B +:1010000008F074C0C130D10509F46DC008F4DEC128 +:10101000C430D10508F0DDC1D9C1CB3BD10508F4FE +:1010200070C0D4C1C11590E2D90708F0B9C0C1158C +:1010300021E0D20708F0CDC1C03FD10508F4C6C1F8 +:101040008E01106506C2C13080E5D80709F4BDC025 +:1010500068F5C13120E4D20709F4AEC050F4C031C4 +:1010600090E4D90708F0A5C0CF70DD278E01146D7C +:10107000F0C1C33120E4D20709F4A4C008F49FC032 +:10108000C115D04509F0A2C10E946C210E94180E22 +:101090000E94B2079FEF24E38CE0915020408040F3 +:1010A000E1F700C000000E943F28D3C1C11520E62F +:1010B000D20730F4C11581E5D80708F48CC02DC1E2 +:1010C000C11590E7D90708F481C1C11520E8D207FE +:1010D00008F478C1C11580E9D80708F077C1DF703E +:1010E0008E01106AB6C101E010E0B3C1C53AD10566 +:1010F00009F471C1C63AD10509F070C102E810E4E3 +:10110000A8C1C83AD10509F46CC1C93AD10509F49E +:101110006BC1CA3AD10509F46AC1CB3AD10509F4C9 +:1011200069C1CC3AD10509F468C1CD3AD10509F4B9 +:1011300067C1C03BD10509F466C1CE3AD10509F4B7 +:1011400065C1CF3AD10509F464C1C13BD10509F4A9 +:1011500063C1C23BD10509F462C1C33BD10509F4A7 +:1011600061C1C43BD10509F460C1C53BD10509F497 +:101170005FC1C63BD10509F45EC1C73BD10509F487 +:101180005DC1C83BD10509F45CC1C93BD10509F477 +:101190005BC1CA3BD10509F45AC100E014E459C14E +:1011A000CE019F700E94DE0755C1DD278E01106CB5 +:1011B00050C100E011ED4DC100E010ED4AC100E06A +:1011C00012ED47C100E013ED44C18091C703816077 +:1011D0008093C7033EC10E949B28811102C00E94D8 +:1011E00077280E94B32890E09093F2038093F10354 +:1011F000C23090E5D90721F48091F103816086C067 +:10120000C43020E5D20721F48091F10382607EC0D2 +:10121000C63080E5D80721F48091F103846076C060 +:10122000C83090E5D90719F48091F10327C0CA307E +:1012300020E5D20721F48091F103806167C0CC30B2 +:1012400080E5D80721F48091F10380625FC0CE3041 +:1012500090E5D90721F48091F103806457C0C03133 +:1012600020E5D20721F48091F10380684FC0C2319C +:1012700080E5D80729F48091F1038460886046C036 +:10128000C33090E5D90721F48091F1038E7F3EC0F1 +:10129000C53020E5D20721F48091F1038D7F36C05F +:1012A000C73080E5D80721F48091F1038B7F2EC0F1 +:1012B000C93090E5D90719F48091F10326C0CB30ED +:1012C00020E5D20721F48091F1038F7E1FC0CD303D +:1012D00080E5D80721F48091F1038F7D17C0CF30CE +:1012E00090E5D90721F48091F1038F7B0FC0C131C4 +:1012F00020E5D20721F48091F1038F7707C0C33135 +:10130000D04531F48091F1038B7F877F8093F10387 +:101310008091F1030E94B7289CC08D2F99278F7070 +:10132000992781309105D9F49E012370332702C09B +:10133000880F991F2A95E2F79C688E0144E0000F00 +:10134000111F4A95E1F700271370802B912B53E072 +:10135000CC0FDD1F5A95E1F7C076DD272FC0823014 +:10136000910531F4DC2FCC278E01016F106A71C01A +:101370008330910569F4CE018370992701E010E074 +:1013800002C0000F111F8A95E2F7C8019C680FC0C8 +:10139000049709F05EC0CE018370992701E010E048 +:1013A00002C0000F111F8A95E2F7C8019A6823E076 +:1013B000CC0FDD1F2A95E1F7C07ED7708C010C2B76 +:1013C0001D2B47C0DF708E01106243C000E010E0AB +:1013D00040C08E013EC001E810E43BC003E810E4C9 +:1013E00038C002EE14E435C009EE14E432C00AEE4F +:1013F00014E42FC005EB14E42CC006EB14E429C060 +:1014000007EB14E426C00CEC14E423C00DEC14E448 +:1014100020C003E815E41DC00AE815E41AC002E97B +:1014200015E417C004E915E414C001E216E411C084 +:1014300003E216E40EC004E216E40BC005E216E473 +:1014400008C006E216E405C007E216E402C00AE29C +:1014500016E4C801DF91CF911F910F9108959CE090 +:10146000799FF00111249CE3899FE00DF11D112467 +:10147000E60FF11DEE0FFF1FE658FE4F8591949188 +:10148000803E9105E0F4803C910558F5813391054B +:1014900009F46FC048F48932910509F463C08A32B7 +:1014A000910509F46DC072C089339105E9F0823865 +:1014B0009105D1F08533910509F44DC067C0833E95 +:1014C000910581F138F4803E9105B9F0823E910595 +:1014D000D9F05CC0863E910561F1873E9105A1F18E +:1014E00055C00E94D60708952091F10320FD02C047 +:1014F00021FF4CC080EE90E049C08091F10380FF55 +:10150000F9CF89E390E042C08091F10382FF0EC0E1 +:101510008091F10384FF03C080E090E037C083EE48 +:1015200090E034C08091F10382FFF2CF82EE90E030 +:101530002DC08091F10383FF0BC08091F10384FDE6 +:10154000EBCF87EE90E022C08091F10383FFF5CFCF +:1015500086EE90E01BC08091F10385FF07C089E211 +:1015600090E014C08091F10385FFF9CF85E390E00E +:101570000DC08091F10386FF07C08AE290E006C0AB +:101580008091F10386FFF9CF81E390E00E94E607A6 +:101590000895CF92DF92EF92FF920F931F9301E095 +:1015A00010E020E030E06801790104C0CC0CDD1CC3 +:1015B000EE1CFF1C8A95D2F704C0000F111F221FDA +:1015C000331F6A95D2F70C291D292E293F29C09077 +:1015D000B303D090B403E090B503F090B603C022FB +:1015E000D122E222F322842FC016D106E206F306AE +:1015F00041F41F910F91FF90EF90DF90CF900C94EA +:10160000A5251F910F91FF90EF90DF90CF900C9444 +:10161000C62508950C94090B5F926F927F928F926A +:101620009F92AF92BF92CF92DF92EF92FF920F9371 +:101630001F93CF93DF93CDB7DEB72A970FB6F894F9 +:10164000DEBF0FBECDBFCE0101966C014E019BE007 +:10165000890E911C20E030E040E050E060E070E056 +:1016600000E010E0E12CF12C6C2C5D2C8AE0782E4F +:10167000AA24A394B12CEBE6F2E0A62DB52D872D7C +:1016800001900D928A95E1F7F601819191916F0198 +:10169000FC01E07FFF27E032F10559F48F709927B4 +:1016A000F50102C0EE0FFF1F8A95E2F7EE2AFF2A2E +:1016B00037C0E033F10559F48F709927F50102C066 +:1016C000EE0FFF1F8A95E2F70E2B1F2B29C0E03487 +:1016D000F10559F48F709927F50102C0EE0FFF1F35 +:1016E0008A95E2F76E2B7F2B1BC0E035F10559F48C +:1016F0008F709927F50102C0EE0FFF1F8A95E2F760 +:101700004E2B5F2B0DC0E036F10551F48F709927F9 +:10171000F50102C0EE0FFF1F8A95E2F72E2B3F2B3B +:10172000C814D90409F0A7CF84B19E2D90958923C0 +:1017300084B985B1E82AE5B887B1902F90958923BF +:1017400087B988B1082B08B98AB1962F909589235B +:101750008AB98BB1682B6BB98DB1942F9095892381 +:101760008DB98EB1482B4EB980B3922F90958923B5 +:1017700080BB81B3282B21BB2A960FB6F894DEBF1D +:101780000FBECDBFDF91CF911F910F91FF90EF90D2 +:10179000DF90CF90BF90AF909F908F907F906F9091 +:1017A0005F9008955F926F927F928F929F92AF9217 +:1017B000BF92CF92DF92EF92FF920F931F93CF933E +:1017C000DF93CDB7DEB768970FB6F894DEBF0FBED4 +:1017D000CDBF85B7806885BF85B7806885BF0E940B +:1017E0000C0BCE0101966C014E0199E1890E911C02 +:1017F00020E030E040E050E060E070E000E010E029 +:10180000E12CF12C6C2C5D2C88E1782EAA24A39479 +:10181000B12CE5E7F2E0A62DB52D872D01900D92B4 +:101820008A95E1F7F601819191916F01FC01E07FCA +:10183000FF27E032F10559F48F709927F50102C0B6 +:10184000EE0FFF1F8A95E2F7EE2AFF2A37C0E0333A +:10185000F10559F48F709927F50102C0EE0FFF1FB3 +:101860008A95E2F70E2B1F2B29C0E034F10559F4BD +:101870008F709927F50102C0EE0FFF1F8A95E2F7DE +:101880006E2B7F2B1BC0E035F10559F48F70992723 +:10189000F50102C0EE0FFF1F8A95E2F74E2B5F2B7A +:1018A0000DC0E036F10551F48F709927F50102C0A3 +:1018B000EE0FFF1F8A95E2F72E2B3F2BC814D90499 +:1018C00009F0A7CF84B19E2D9095892384B985B165 +:1018D000E82AE5B887B1902F9095892387B988B118 +:1018E000082B08B98AB1962F909589238AB98BB1B4 +:1018F000682B6BB98DB1942F909589238DB98EB1DA +:10190000482B4EB980B3922F9095892380BB81B329 +:10191000282B21BBE2E0F3E0A8EFB2E01192119294 +:101920001D921D9283E0EC30F807C1F768960FB660 +:10193000F894DEBF0FBECDBFDF91CF911F910F9105 +:10194000FF90EF90DF90CF90BF90AF909F908F90DF +:101950007F906F905F900C94CB075F926F927F9215 +:101960008F929F92AF92BF92CF92DF92EF92FF92AF +:101970000F931F93CF93DF93CDB7DEB7A2970FB628 +:10198000F894DEBF0FBECDBF6E0149E1C40ED11C7D +:1019900088EFA82E82E0B82E75019AE0592E4601F4 +:1019A00001E010E028E1622E35E0732EEBE6F2E074 +:1019B000D401852D01900D928A95E1F7D6018D9184 +:1019C0009D916D019C01207F33272032310591F4D8 +:1019D00024B18F709927F80102C0EE0FFF1F8A957E +:1019E000E2F7CF01922F982B94B995B18095892376 +:1019F00085B953C02033310591F427B18F709927F1 +:101A0000A80102C0440F551F8A95E2F7CA01922F20 +:101A1000982B97B998B18095892388B93EC0203416 +:101A2000310591F42AB18F709927D80102C0AA0F0D +:101A3000BB1F8A95E2F7CD01922F982B9AB99BB1E3 +:101A4000809589238BB929C02035310591F42DB1BA +:101A50008F709927F80102C0EE0FFF1F8A95E2F7F9 +:101A6000CF01922F982B9DB99EB1809589238EB975 +:101A700014C02036310589F420B38F709927A8014E +:101A800002C0440F551F8A95E2F7CA01922F982B86 +:101A900090BB91B38095892381BB50EA5A95F1F7A9 +:101AA000BE016F5F7F4F20E030E040E050E0E5E7AF +:101AB000F2E0DE011196862D01900D928A95E1F7F4 +:101AC000DB018D919D91BD01FC01E07FFF27E0329C +:101AD000F10511F4E3B113C0E033F10511F4E6B1FF +:101AE0000EC0E034F10511F4E9B109C0E035F105AB +:101AF00011F4ECB104C0E036F105B9F4EFB1F0E057 +:101B00008F70992702C0F595E7958A95E2F7E0FD79 +:101B100008C0C801042E02C0880F991F0A94E2F77A +:101B200002C080E090E0282B392B4F5F5F4F4C3094 +:101B3000510509F0BCCFF70180819181821793078D +:101B400021F031832083709209020E940C0BF2E095 +:101B5000EF0EF11C42E0E41643E0F40609F026CF54 +:101B6000809109028823C9F081508093090288235B +:101B700039F08FE99FE00197F1F700C000000DC038 +:101B8000E2E0F3E0D5018D919D915D018193919308 +:101B9000B2E0AB16B3E0BB06A9F70E94D10781E023 +:101BA000A2960FB6F894DEBF0FBECDBFDF91CF91E6 +:101BB0001F910F91FF90EF90DF90CF90BF90AF906B +:101BC0009F908F907F906F905F900895E82FF0E046 +:101BD000EE0FFF1FEE5FFC4F808191810895089505 +:101BE0008091DC0381608093DC030C94C928809190 +:101BF000DC038E7F8093DC030C94C9280E949B2811 +:101C0000811102C00E9477280E94C5288093DC03BE +:101C10003E9A809171008D7F8093710082E0809365 +:101C200090008AE18093910081E080930E030895F3 +:101C300080910E03811102C00E94FE0D10925E037E +:101C400010925D03809171008D7F8093710080916F +:101C500090008F77809390001092200310921F03C2 +:101C600010925703109258031092590310925A037E +:101C70001092560310925503E5E3F3E0A5E2B3E0BA +:101C800011921192119211921D921D9283E0E535ED +:101C9000F807B1F70895CF92DF92EF92FF920F937A +:101CA0001F93CF93DF9320911F03222309F484C055 +:101CB0006B017C0180910E03811102C00E94FE0D18 +:101CC00005E513E0C7E0D0E0A7019601F801929185 +:101CD0008291729162918F010E94052E811131C013 +:101CE000FE01EE0FFF1FEE0FFF1FEB5CFC4F10829B +:101CF000118212821382DE01AA0FBB1FAB5DBC4FA3 +:101D000011961C921E92C730D105E9F021964481AC +:101D10005581668177814083518362837383148206 +:101D200015821682178212968D919C9113971196A7 +:101D30009C938E9313961C921E9212973496129631 +:101D4000E2CF219708F680915D0390915E030197A1 +:101D500097FD05C090935E0380935D0304C01092CD +:101D60005E0310925D0380915D0390915E0320916C +:101D70005B0330915C032817390724F010925C0351 +:101D800010925B03892BC1F4809171008D7F809349 +:101D90007100809190008F7780939000109257038C +:101DA000109258031092590310925A03109256033E +:101DB0001092550310921F03DF91CF911F910F9145 +:101DC000FF90EF90DF90CF9008951F920F920FB683 +:101DD0000F9211244F925F926F927F928F929F92F7 +:101DE000AF92BF92CF92DF92EF92FF922F933F93E9 +:101DF0004F935F936F937F938F939F93AF93BF9313 +:101E0000CF93DF93EF93FF9380911F03882309F40F +:101E10009BC1C0915D03D0915E031C161D060CF0A2 +:101E200093C140900F035090100360901103709085 +:101E3000120320E030E0A901C301B2010E94B02FDB +:101E400018160CF065C0C130D10509F452C080915C +:101E50005B0390915C03BE010E9482317C019093F0 +:101E60005C0380935B038090210390902203A090F9 +:101E70002303B090240320E030E040E85FE3C50195 +:101E8000B4010E94A12D60932103709322038093DB +:101E9000230390932403F701EE0FFF1FEE0FFF1FA4 +:101EA000EB5CFC4FA301920160817181828193817F +:101EB0000E94092E20E030E040E05EE30E94B42F53 +:101EC0009B01AC01C501B4010E94B02F18168CF41F +:101ED000C7010196BE010E94823190935C038093FA +:101EE0005B0310922103109222031092230310929D +:101EF0002403E0915B03F0915C03EE0FFF1FEE0FF4 +:101F0000FF1FEB5CFC4F6081718182819381D0C0A7 +:101F1000C0905703D0905803E0905903F0905A03B3 +:101F200020E030E0A901C701B6010E94052E2197EB +:101F3000882309F4A2C0FE01EE0FFF1FEE0FFF1F62 +:101F4000EB5CFC4F80809180A280B380A50194015E +:101F5000C701B6010E94052E87FF31C0A50194017B +:101F600060E070E08CED93EC0E94092E20E030E000 +:101F700040E451E40E94092E20E030E040E05FE3BD +:101F80000E94B42F9B01AC0160E070E080E090E41F +:101F90000E9417309B01AC01C501B4010E94B42F0F +:101FA0009B01AC01C701B6010E94052E87FF07C047 +:101FB000A701960160E070E08CED93E439C0A501C3 +:101FC0009401C701B6010E94B02F18160CF055C03D +:101FD000A501940160E070E08CED93E40E94092E6D +:101FE00020E030E040E451E40E94092E20E030E09F +:101FF00040E05FE30E94B42F9B01AC0160E070E021 +:1020000080E090E40E9417309B01AC01C501B4014F +:102010000E94B42F9B01AC01C701B6010E94B02FF2 +:1020200018165CF5A701960160E070E08CED93EC6A +:102030000E94092E20E030E040E451E40E94092E85 +:1020400020E030E040E05FE30E94B42F9B01AC0150 +:1020500060E070E080E090E40E9417309B01AC01EA +:10206000C701B6010E94B42F6093570370935803C1 +:102070008093590390935A0313C0FE01EE0FFF1F84 +:10208000EE0FFF1FEB5CFC4F80819181A281B38139 +:102090008093570390935803A0935903B0935A0326 +:1020A00060915703709158038091590390915A039E +:1020B00020910C0330910D032F3F4FEF340731F087 +:1020C0002F5F3F4F30930D0320930C030E940C139E +:1020D0006B017C0120E034E244EF51E40E94052EC4 +:1020E00087FF08C086EFC82E88E2D82E84EFE82E3E +:1020F00081E4F82E20E030E040E051E4C701B60171 +:102100000E94B42F9B01AC0160E074E284E79BE481 +:102110000E94092E6B017C010E94712E7093970022 +:102120006093960020910A0230910B0240910C02BC +:1021300050910D02C701B6010E94B42F0E94712E6A +:10214000709399006093980080912003882309F48C +:1021500033C1C0901B03D0901C03E0901D03F0908E +:102160001E0320E030E0A901C701B6010E94B02F94 +:102170001816D4F580910C0390910D038F3F2FEF2B +:10218000920729F0019690930D0380930C03C701E9 +:10219000B6010E940C1320E030E040E051E40E94C0 +:1021A000B42F9B01AC0160E074E284E79BE40E94E1 +:1021B000092E6B017C010E94712E70939700609331 +:1021C000960020910A0230910B0240910C0250912E +:1021D0000D02C701B6010E94B42F0E94712E7093A8 +:1021E00099006093980008C0109297001092960092 +:1021F0001092990010929800609115037091160347 +:102200006F5F7F4F709316036093150320919600C4 +:102210003091970080E090E0232BF1F0C091960080 +:10222000D09197000E94A22E6B017C01BE0180E03C +:1022300090E00E94A22E9B01AC0160911703709167 +:1022400018038091190390911A030E94092E20E02F +:102250003FEF4FE757E410C00E94A22E6B017C01B4 +:1022600020E030EE4FEF54E46091170370911803B3 +:102270008091190390911A030E94B42F9B01AC0125 +:10228000C701B6010E94B02F87FD96C0809113034D +:102290008F5F8093130390E02091D8033091D9038E +:1022A00082179307A0F08091E303882319F010921E +:1022B00013030DC0809171008D7F80937100809118 +:1022C00090008F7780939000109220037DC08091C2 +:1022D0001403C0911303811128C0C090DD03D09076 +:1022E000DE03E090DF03F090E00320E030E0A9019E +:1022F000C701B6010E94B02F1816BCF481E080938C +:10230000140310921B0310921C0310921D031092D1 +:102310001E03C0921703D0921803E0921903F092A3 +:102320001A03C150C093130343C0109214031092B8 +:102330000D0310920C03E091DA03F091DB0348E007 +:10234000C49FE00DF11D112480819181A281B38190 +:1023500080931B0390931C03A0931D03B0931E0353 +:1023600020E030E040E85EE36481758186819781FA +:102370000E94B42F6B017C0120E030E048EC52E475 +:1023800060910E0270910F028091100290911102E3 +:102390000E94092E9B01AC01C701B6010E94B42F17 +:1023A00060931703709318038093190390931A0393 +:1023B00010921603109215038091DC0380FD04C077 +:1023C0001092200310921F03FF91EF91DF91CF91A4 +:1023D000BF91AF919F918F917F916F915F914F913D +:1023E0003F912F91FF90EF90DF90CF90BF90AF90F3 +:1023F0009F908F907F906F905F904F900F900FBE47 +:102400000F901F901895CF92DF92EF92FF92CF938B +:10241000DF936B017C01EA0180910E03811102C000 +:102420000E94FE0D8091DC0380FF46C080915D0319 +:1024300090915E0308970CF03FC0809171008D7FF2 +:10244000809371008091200381110E94180E81E019 +:1024500080931F0310920D0310920C0320E030E0D4 +:10246000A901C701B6010E94B02F1816DCF48091B3 +:102470005D0390915E03FC01EE0FFF1FEE0FFF1F47 +:10248000EB5CFC4FC082D182E282F382FC01EE0F52 +:10249000FF1FEB5DFC4FD183C083019690935E03D9 +:1024A00080935D03809171008260809371008091C0 +:1024B0009000806880939000DF91CF91FF90EF9023 +:1024C000DF90CF9008958F929F92AF92BF92CF925C +:1024D000DF92EF92FF920F931F93CF93DF93EC0164 +:1024E0007B01D42E4801590180910E03811102C055 +:1024F0000E94FE0D8091DC0380FF6BC08091710013 +:102500008D7F8093710080911F0381110E94180EAE +:1025100081E080932003D093DB03C093DA03F09231 +:10252000D903E092D803D092E3038092DD03909226 +:10253000DE03A092DF03B092E00310922103109219 +:102540002203109223031092240310921303888114 +:102550009981AA81BB8180931B0390931C03A09354 +:102560001D03B0931E0320E030E040E85EE36C8181 +:102570007D818E819F810E94B42F6B017C0120E0C0 +:1025800030E048EC52E460910E0270910F028091AD +:102590001002909111020E94092E9B01AC01C7010B +:1025A000B6010E94B42F60931703709318038093B1 +:1025B000190390931A031092160310921503809139 +:1025C0007100826080937100809190008068809398 +:1025D0009000DF91CF911F910F91FF90EF90DF90CE +:1025E000CF90BF90AF909F908F90089580915F03A0 +:1025F00090E0019666E070E00E94823180935F0374 +:10260000089580915F0390E0019766E070E00E947A +:10261000823180935F0308958F929F92AF92BF9211 +:10262000CF92DF92EF92FF920F931F93CF93DF939E +:102630006B017C01C0910C03D0910D03BE0180E0C1 +:1026400090E00E94A22E4B015C01A701960160E080 +:1026500070E08CE594E40E94092E9B01AC01C50159 +:10266000B4010E94B42F0E94762E20915F03233084 +:1026700009F473C028F4222351F02130E9F02CC171 +:10268000243009F4A0C0253009F4E0C025C180E061 +:1026900090E0A0E0BFE380930A0290930B02A09326 +:1026A0000C02B0930D0210920F03109210031092BF +:1026B00011031092120310C110920F031092100315 +:1026C00010921103109212036431710540F46A30C4 +:1026D000710560F520E030E040E85EE32BC0693C26 +:1026E000710508F0AAC080E090E00E94A22E20E0D0 +:1026F00030E040EA51E40E94A02D20E030E044E3C5 +:1027000053E40E94092E9B01AC010E94B42F20E0EB +:1027100030E040E05EE30E94B42F9B01AC0160E03A +:1027200070E080E09EE30E94A02D44C020E030E0F5 +:1027300040E05FE3C701B6010E94B42F6B017C014A +:1027400080E090E0A0E0BEE380930A0290930B0249 +:10275000A0930C02B0930D02BFC010920F03109211 +:10276000100310921103109212034AE0469F900149 +:10277000479F300D1124C90168EB7BE00E946E3148 +:10278000BC016C5D754077FF03C07195619571095F +:10279000882777FD8095982F0E94A42E2EE333EC96 +:1027A0004EE259E30E94B42F20E030E040EC5EE3BB +:1027B0000E94A12D60930A0270930B0280930C0279 +:1027C00090930D0289C010920F0310921003109283 +:1027D000110310921203CE0183709927892BE1F027 +:1027E000BE016170772780E090E00E94A22E20E079 +:1027F00030E040E05EE30E94B42F20E030E040E4AF +:102800005FE30E94A12D60930A0270930B028093F4 +:102810000C0290930D020CC080E090E0A0E0BFE3BA +:1028200080930A0290930B02A0930C02B0930D02C6 +:10283000C770DD27CD2B09F04FC010920A0210920D +:102840000B0210920C0210920D0246C010920F0360 +:1028500010921003109211031092120300E010E086 +:1028600020E03FE300930A0210930B0220930C0236 +:1028700030930D026739710578F180E090E00E9495 +:10288000A22E20E030E047E153E40E94A02D20E09A +:1028900030E04AE754E40E94092E20E030E048E4AA +:1028A00052E40E94B42F20E030E040EA51E40E945C +:1028B000E62E0E94712E660F771F660F771FFB01B1 +:1028C000E357FD4F2081318142815381C701B60119 +:1028D0000E94B42F6B017C01C701B601DF91CF913B +:1028E0001F910F91FF90EF90DF90CF90BF90AF902E +:1028F0009F908F900895809168030895CF93DF9300 +:1029000000D01F92CDB7DEB79C018091E8038430E0 +:1029100019F593E099833B832A839093E9008FEF25 +:102920009091E800815095FD06C095ED9A95F1F7DC +:1029300000008111F5CF8091E80085FF0DC040E0D7 +:1029400050E063E070E0CE0101960E94B7168091DE +:10295000E8008E778093E8000F900F900F90DF9142 +:10296000CF910895CF93DF9300D01F92CDB7DEB7FC +:102970002091E803243021F522E029839B838A8378 +:1029800083E08093E9008FEF9091E800815095FDFE +:1029900006C095ED9A95F1F700008111F5CF809171 +:1029A000E80085FF0DC040E050E063E070E0CE013C +:1029B00001960E94B7168091E8008E778093E80018 +:1029C0000F900F900F90DF91CF9108952091E80321 +:1029D0002430F1F422E02093E9002FEF3091E80059 +:1029E000215035FD06C035ED3A95F1F70000211173 +:1029F000F5CF2091E80025FF0BC040E050E065E0F6 +:102A000070E00E94B7168091E8008E778093E8000E +:102A10000895CF93DF932091E803243039F521E026 +:102A20002093E9002FEF3091E800215035FD06C0DA +:102A300035ED3A95F1F700002111F5CF2091E8002E +:102A400025FF14C0EC0140E050E068E070E00E9417 +:102A5000B7168091E8008E778093E80088E0FE0149 +:102A6000A0E6B3E001900D928A95E1F7DF91CF9156 +:102A700008958091E703811109C00E944C180E94BB +:102A8000A9188091E20084608093E200089510927A +:102A9000E7030895089508950C94A72742E061EC98 +:102AA00081E00E94C61742E061EC82E00E94C617F6 +:102AB00042E061EC83E00C94C6178091EA03833016 +:102AC00009F453C030F4813071F0823009F48CC0C5 +:102AD00008958A3009F478C08B3009F45EC08930DB +:102AE00009F09AC020C08091E903813A09F094C0AE +:102AF0008091E800877F8093E8008091ED039091BA +:102B0000EE03892B21F468E080E693E003C060E0E7 +:102B100080E090E070E00E9402178091E8008B77DF +:102B20008093E80008958091E903813209F074C030 +:102B30008091ED039091EE03892B09F06DC0809197 +:102B4000E800877F8093E8008091E80082FD05C05F +:102B50008091E8038111F8CF5FC08091F1008093EC +:102B600068038091E8008B7753C08091E903813A34 +:102B700009F052C08091ED039091EE03892B09F08A +:102B80004BC08091E800877F8093E8008091E80047 +:102B900080FFFCCF80911C0236C08091E903813216 +:102BA000D9F58091ED039091EE03892BA9F58091E1 +:102BB000E800877F8093E8000E94FB178091EB0379 +:102BC00080931C020C946C218091E903813221F5E1 +:102BD0008091E800877F8093E8000E94FB17809136 +:102BE000EC038093690308958091E903813AA1F48D +:102BF0008091E800877F8093E8008091E80080FF63 +:102C0000FCCF809169038093F1008091E8008E777A +:102C10008093E8000C94FB17089584B7877F84BFE6 +:102C200088E10FB6F89480936000109260000FBEA8 +:102C300090E080E80FB6F894809361009093610073 +:102C40000FBE0E949E1B0E944C180E94A9188091E2 +:102C5000E20084608093E20078940E942F1B0E941F +:102C6000A01B82E192E00E944A1B8091E80385301C +:102C700069F40E9461278091E6038823B1F30E94E2 +:102C80008F27882391F30E94A116EFCF0E94A81BE3 +:102C9000ECCF292F332723303105C9F064F42130DC +:102CA000310581F02230310509F043C084E590E020 +:102CB00020ED39E042C021323105F1F022323105F8 +:102CC00041F137C082E190E024E23AE036C0992732 +:102CD0008130910541F08230910541F0892B49F511 +:102CE000ECECF9E005C0EEE9F9E002C0E2E7F9E05A +:102CF000849190E09F0121C06330D8F4E62FF0E08A +:102D0000EE0FFF1FEA51FD4F2081318189E090E0F5 +:102D100014C0633070F470E0FB01EE0FFF1FE0524F +:102D2000FD4F20813181FB01E352FD4F808190E016 +:102D300004C080E090E020E030E0FA01318320839D +:102D4000089580E189BD82E189BD09B400FEFDCF0F +:102D50008091D8008F7D8093D8008091E0008260C0 +:102D60008093E0008091E00081FDFCCF0895CF9238 +:102D7000DF92EF92FF920F931F93CF93DF93EC01BB +:102D80008B016A010E941A18811133C0C114D10449 +:102D900039F0F60180819181081B190BC80FD91FEA +:102DA000E12CF12C0115110519F18091E80085FD48 +:102DB00016C08091E8008E778093E800C114D1049A +:102DC00049F0F60180819181E80EF91EF182E082DE +:102DD00085E00FC00E941A18882321F30AC0899148 +:102DE0008093F10001501109FFEFEF1AFF0ADACFCB +:102DF00080E0DF91CF911F910F91FF90EF90DF90D6 +:102E0000CF9008952091EF033091F00326173707F4 +:102E100048F06115710539F42091E8002E77209370 +:102E2000E80001C0B90140E061157105A9F12091E8 +:102E3000E803222309F443C0253009F442C020915D +:102E4000E80023FD40C02091E80022FD32C020911F +:102E5000E80020FFE9CF4091F3002091F20030E03C +:102E6000342BFC01CF016115710559F02830310573 +:102E700040F481918093F100615071092F5F3F4FC1 +:102E8000F1CF41E02830310509F040E02091E80021 +:102E90002E772093E800C8CF4111C9CF0AC0809196 +:102EA000E803882361F0853061F08091E80083FDBC +:102EB0000AC08091E80082FFF2CF80E0089582E0AE +:102EC000089583E0089581E008952091EF03309103 +:102ED000F0032617370748F06115710539F4209182 +:102EE000E8002E772093E80001C0B901FC0120E042 +:102EF0006115710591F18091E803882309F440C0C0 +:102F0000853009F43FC08091E80083FD3DC0809189 +:102F1000E80082FD2FC08091E80080FFE9CF20917A +:102F2000F3008091F20090E0922B6115710559F049 +:102F30008830910540F424912093F100319661503E +:102F400071090196F2CF21E0089709F020E0809105 +:102F5000E8008E778093E800CBCF2111CCCF0AC058 +:102F60008091E803882361F0853061F08091E8006A +:102F700083FD0AC08091E80082FFF2CF80E00895CF +:102F800082E0089583E0089581E00895982F9730B6 +:102F900058F59093E900981739F07091EC00209162 +:102FA000ED005091F00003C0242F762F50E021FF58 +:102FB00019C03091EB003E7F3093EB003091ED0073 +:102FC0003D7F3093ED003091EB0031603093EB00AA +:102FD0007093EC002093ED005093F0002091EE00F0 +:102FE00027FF07C09F5FD3CF8F708093E90081E0F8 +:102FF000089580E008958091E90387FF11C08091D2 +:10300000E80082FD05C08091E8038111F8CF11C06E +:103010008091E8008B770BC08091E803882349F00A +:103020008091E80080FFF8CF8091E8008E77809350 +:10303000E80008952091E4003091E50095E6409184 +:10304000EC00842F817040FF22C08091E80080FD59 +:103050001CC08091E803882391F0853091F0809125 +:10306000EB0085FD10C04091E4005091E50042174F +:10307000530729F39A01915011F784E0089582E0F3 +:10308000089583E0089581E0089580E008954091D7 +:10309000E80042FFDECF08950E94BA180E94C218CD +:1030A000E0EEF0E0808181608083E8EDF0E08081F7 +:1030B0008F77808319BCA7EDB0E08C918E7F8C93C5 +:1030C00080818F7E80831092E70308950F931F9372 +:1030D000CF93DF930E94BA180E94C218C8EDD0E0C7 +:1030E00088818F77888388818068888388818F7DB5 +:1030F000888319BC1092E8031092E4031092E6034F +:103100001092E50300EE10E0F80180818B7F808350 +:1031100088818160888342E060E080E00E94C61779 +:10312000E1EEF0E080818E7F8083E2EEF0E080814E +:1031300081608083808188608083F80180818E7FB8 +:103140008083888180618883DF91CF911F910F9167 +:103150000895E8EDF0E080818F7E8083E7EDF0E078 +:1031600080818160808384E082BF81E08093E70377 +:103170000C946618E8EDF0E080818E7F80831092D9 +:10318000E20008951092DA001092E10008951F9273 +:103190000F920FB60F9211242F933F934F935F938B +:1031A0006F937F938F939F93AF93BF93EF93FF930F +:1031B0008091E10082FF0BC08091E20082FF07C096 +:1031C0008091E1008B7F8093E1000E942E1B809113 +:1031D000DA0080FF1FC08091D80080FF1BC0809163 +:1031E000DA008E7F8093DA008091D90080FF0DC0D5 +:1031F00080E189BD82E189BD09B400FEFDCF81E097 +:103200008093E8030E94391505C019BC1092E803A9 +:103210000E9447158091E10080FF19C08091E20073 +:1032200080FF15C08091E2008E7F8093E200809144 +:10323000E20080618093E2008091D80080628093F8 +:10324000D80019BC85E08093E8030E944B1580915B +:10325000E10084FF30C08091E20084FF2CC080E157 +:1032600089BD82E189BD09B400FEFDCF8091D800FF +:103270008F7D8093D8008091E1008F7E8093E10064 +:103280008091E2008F7E8093E2008091E200816075 +:103290008093E2008091E403882311F084E007C06A +:1032A0008091E30087FD02C081E001C083E080934C +:1032B000E8030E944C158091E10083FF29C08091B2 +:1032C000E20083FF25C08091E100877F8093E100C9 +:1032D00082E08093E8031092E4038091E1008E7F06 +:1032E0008093E1008091E2008E7F8093E2008091E4 +:1032F000E20080618093E20042E060E080E00E94B2 +:10330000C6178091F00088608093F0000E944A15F3 +:10331000FF91EF91BF91AF919F918F917F916F91AD +:103320005F914F913F912F910F900FBE0F901F9083 +:1033300018951F920F920FB60F9211242F933F935F +:103340004F935F936F937F938F939F93AF93BF93AD +:10335000CF93DF93EF93FF93C091E900CF708091FB +:10336000EC00D82FD17080FDD0E81092E900809158 +:10337000F000877F8093F00078940E94DD1910920E +:10338000E9008091F00088608093F000CD2BCF7031 +:10339000C093E900FF91EF91DF91CF91BF91AF9181 +:1033A0009F918F917F916F915F914F913F912F915D +:1033B0000F900FBE0F901F9018951F93CF93DF9320 +:1033C000CDB7DEB7AA970FB6F894DEBF0FBECDBF5C +:1033D000E9EEF3E088E08E0F9091F10091938E1367 +:1033E000FBCF0E945D158091E80083FF1FC1809193 +:1033F000E9039091EA03492F50E04A30510508F063 +:1034000015C1FA01EE59FF4F0C949631803881F0C6 +:10341000823809F00BC18091ED038F708093E90031 +:103420008091EB0085FB882780F91092E90006C0A7 +:103430008091E5039091E603911182609091E800FC +:10344000977F9093E8008093F1001092F100C8C03C +:10345000282F2D7F09F0EAC0882319F0823061F00F +:10346000E5C08091EB03813009F0E0C0933009F0B2 +:1034700080E08093E6032BC08091EB03811127C08D +:103480008091ED038F7009F4D1C08093E900209101 +:10349000EB0020FF1CC0933021F48091EB00806290 +:1034A00014C09091EB0090619093EB0021E030E02C +:1034B000A90102C0440F551F8A95E2F74093EA0024 +:1034C0001092EA008091EB0088608093EB001092EC +:1034D000E9008091E800877F86C08111A7C0109124 +:1034E000EB031F778091E3008078812B8093E300CA +:1034F0008091E800877F8093E8000E94FB1780910D +:10350000E80080FFFCCF8091E30080688093E300B7 +:10351000111102C082E001C083E08093E80386C0FD +:103520008058823008F082C08091EB039091EC03C8 +:103530008C3D53E0950779F583E08A838AE289839D +:103540004FB7F894DE01139620E03EE051E2E32FFE +:10355000F0E050935700E49120FF03C0E295EF7034 +:103560003F5FEF708E2F90E0EA3010F0C79601C0F9 +:10357000C0968D939D932F5F243149F74FBF809163 +:10358000E800877F8093E8006AE270E0CE01019650 +:103590000E94021714C0AE014F5F5F4F6091ED03B0 +:1035A0000E944916BC01009709F440C09091E800C0 +:1035B000977F9093E80089819A810E946517809196 +:1035C000E8008B778093E80031C0803879F58091EE +:1035D000E800877F8093E8008091E4038093F10006 +:1035E0008091E8008E778093E8000E94FB171EC050 +:1035F00081111CC09091EB039230C0F48091E800DF +:10360000877F8093E8009093E4030E94FB178091EA +:10361000E403811106C08091E30087FD02C081E0D0 +:1036200001C084E08093E8030E944E158091E80079 +:1036300083FF0AC08091E800877F8093E800809133 +:10364000EB0080628093EB00AA960FB6F894DEBF81 +:103650000FBECDBFDF91CF911F9108950895CF93F5 +:103660008091E8038823A1F0C091E900CF70909188 +:10367000EC00892F817090FD80E8C82B1092E90042 +:103680008091E80083FD0E94DD19CF70C093E900AE +:10369000CF91089590936F0380936E030895E09106 +:1036A0006E03F0916F03309721F00190F081E02DCF +:1036B000099480E00895E0916E03F0916F033097D4 +:1036C00021F00280F381E02D09940895E0916E03CA +:1036D000F0916F03309721F00480F581E02D09947B +:1036E000089520916C0330916D038217930771F058 +:1036F00090936D0380936C03E0916E03F0916F03E0 +:10370000309721F00680F781E02D099408952091EB +:103710006A0330916B038217930771F090936B03E8 +:1037200080936A03E0916E03F0916F03309721F06C +:103730000084F185E02D0994089508950C949D1B53 +:103740000E94DB270E94D20B0E9461280C94092D55 +:103750004F925F927F928F929F92AF92BF92CF9241 +:10376000DF92EF92FF920F931F93CF93DF93CDB72A +:10377000DEB72A970FB6F894DEBF0FBECDBF0E940A +:10378000AD0C91E7C92E93E0D92E00E010E0AA24F9 +:10379000A394B12C702E802F0E94E60D4C01F601EF +:1037A000419051906F014826592641145104B1F4BB +:1037B0000F5F1F4F0530110569F78FEF89838A83EB +:1037C0001B820E94E4278160782F9D838C8349812E +:1037D0005A816B818D810E94611C3AC08091C70320 +:1037E00081FD0E94EF0D20E030E07501022E02C045 +:1037F000EE0CFF1C0A94E2F7C70184219521892B66 +:1038000009F12E837F828E209F2091E0892809F480 +:1038100090E098870E94E4278160782F9A878987B3 +:103820004E815F8168858A850E94611C000F111F8F +:10383000F801EF58FC4F80819181E826F926F1824A +:10384000E08206C02F5F3F4F2C30310571F6B0CFBC +:103850000E94482A109170030E944F1B1817D9F03C +:103860000E944F1B809370032A960FB6F894DEBF18 +:103870000FBECDBFDF91CF911F910F91FF90EF90C1 +:10388000DF90CF90BF90AF909F908F907F905F9090 +:103890004F900C940A0B2A960FB6F894DEBF0FBE19 +:1038A000CDBFDF91CF911F910F91FF90EF90DF90EF +:1038B000CF90BF90AF909F908F907F905F904F90F0 +:1038C0000895CF93DF93CDB7DEB72B970FB6F8945B +:1038D000DEBF0FBECDBF4F83588769877A878B873E +:1038E000DE01119686E0FD0111928A95E9F785E0E7 +:1038F000FE01379601900D928A95E1F749815A8130 +:103900006B817C818D819E810E9406242B960FB64F +:10391000F894DEBF0FBECDBFDF91CF910895CF9356 +:10392000882309F4C2C0C82F823859F40E944F1B63 +:1039300081FDBBC089E30E94AF260E94322789E344 +:103940000CC0833879F40E944F1B80FDAEC083E524 +:103950000E94AF260E94322783E50E94CC26CF9199 +:103960000C943227843859F40E944F1B82FD9DC06D +:1039700087E40E94AF260E94322787E4EECF8CEFC7 +:103980008C0F813A48F48C2F0E94712C81118DC0CC +:103990008C2F0E94AF26E3CF80E28C0F883048F452 +:1039A000C77081E001C0880FCA95EAF70E94EB2634 +:1039B000D6CF8BE58C0F833078F4C53A29F0C63A20 +:1039C00031F083E890E005C081E890E002C082E831 +:1039D00090E0CF910C94711B88E58C0F833108F037 +:1039E00064C0C83A39F1C93A41F1CA3A49F1CB3A0F +:1039F00051F1CC3A59F1CD3A61F1C03B69F1CE3A7F +:103A000071F1CF3A79F1C13B81F1C23B89F1C33BFE +:103A100091F1C43B99F1C53BA1F1C63BA9F1C73B6C +:103A2000B1F1C83BB9F1C93BC1F1CA3BC9F180E072 +:103A300090E038C082EE90E035C089EE90E032C070 +:103A40008AEE90E02FC085EB90E02CC086EB90E0F2 +:103A500029C087EB90E026C08CEC90E023C08DEC71 +:103A600090E020C083E891E01DC08AE891E01AC090 +:103A700082E991E017C084E991E014C081E292E00C +:103A800011C083E292E00EC084E292E00BC085E2B6 +:103A900092E008C086E292E005C087E292E002C0B0 +:103AA0008AE292E0CF910C94871BCF9108958823EE +:103AB00009F44BC0823859F40E944F1B81FF45C066 +:103AC00089E30E94AF260E94322789E30CC0833825 +:103AD00071F40E944F1B80FF38C083E50E94AF261F +:103AE0000E94322783E50E94CC260C94322784382A +:103AF00059F40E944F1B82FF28C087E40E94AF2622 +:103B00000E94322787E4EFCF9CEF980F913A58F349 +:103B100090E2980F983050F4877091E001C0990FAF +:103B20008A95EAF7892F0E94F126DFCF9BE5980F4F +:103B3000933020F480E090E00C94711B885A83311C +:103B400020F480E090E00C94871B0895882321F0F6 +:103B50000E94EB260C9432270895882321F00E94BE +:103B6000F1260C9432270895BF92CF92DF92EF9204 +:103B7000FF920F931F93CF93DF9300D000D000D01C +:103B8000CDB7DEB725E0FC01DE01119601900D9264 +:103B90002A95E1F7FC01D0801181028125812295CF +:103BA0002F7043815481452B09F472C31F3F21F4C8 +:103BB000FFEFDF1609F46CC37C012E830E94D3074C +:103BC000D9821A8369817A81802F0E94AB26182FAF +:103BD000B92E0E9460260E9427252E81002319F00D +:103BE0000E9408272E81EB2DE295EF70F0E0E4595A +:103BF000FF4F0C9496318B2D807F9B2D9F70F92E5B +:103C0000882319F0F29480EFF822002389F0FF2036 +:103C100009F47CC280E2810F883020F48F2D0E944D +:103C2000EB2603C08F2D0E94FB260E9432276EC216 +:103C3000812F0E94571DFF2009F42AC3105E8F2D8B +:103C4000183018F40E94F12602C00E94012726961F +:103C50000FB6F894DEBF0FBECDBFDF91CF911F919D +:103C60000F91FF90EF90DF90CF90BF900C94322790 +:103C70008B2D807F9B2D9F70803211F4892F03C084 +:103C8000892F8295807F112319F0113011F12BC0FB +:103C90000023A9F0222389F1213079F526960FB669 +:103CA000F894DEBF0FBECDBFDF91CF911F910F9172 +:103CB000FF90EF90DF90CF90BF900C941B272223B2 +:103CC00019F0213009F4E4C28E830E941E278E81F0 +:103CD0009BC1002321F0263008F0DAC20EC0253047 +:103CE00008F0D6C291C10023C9F0222331F0F701B8 +:103CF000958190FF0BC29F70958326960FB6F8941E +:103D0000DEBF0FBECDBFDF91CF911F910F91FF900E +:103D1000EF90DF90CF90BF900C94A61D222309F462 +:103D200073C109C22B2D26952695237030E02115ED +:103D3000310521F021303105D1F0AAC2002321F054 +:103D4000812F9B2D937002C080E090E026960FB6E5 +:103D5000F894DEBF0FBECDBFDF91CF911F910F91C1 +:103D6000FF90EF90DF90CF90BF900C94711B0023D9 +:103D700021F0812F9B2D937002C080E090E0269669 +:103D80000FB6F894DEBF0FBECDBFDF91CF911F916C +:103D90000F91FF90EF90DF90CF90BF900C94871B16 +:103DA000812F002319F00E94502902C00E94B829D7 +:103DB00026960FB6F894DEBF0FBECDBFDF91CF9130 +:103DC0001F910F91FF90EF90DF90CF90BF900C94D8 +:103DD0003D2A8B2D837009F07BC0011159C2812FC0 +:103DE000829586958770880F880F912F9F70C92EB6 +:103DF000D12CE12CF12C082E04C0CC0CDD1CEE1CC7 +:103E0000FF1C0A94D2F714FF12C04FE050E060E0AC +:103E100070E004C0440F551F661F771F8A95D2F7C4 +:103E2000CB01BA01609570958095909503C060E0D4 +:103E300070E0CB012B2D269526952370422F50E064 +:103E400042305105D9F04330510569F16C297D2983 +:103E50008E299F294130510551F126960FB6F894CD +:103E6000DEBF0FBECDBFDF91CF911F910F91FF90AD +:103E7000EF90DF90CF90BF900C944E256C297D2958 +:103E80008E299F2926960FB6F894DEBF0FBECDBFB0 +:103E9000DF91CF911F910F91FF90EF90DF90CF9026 +:103EA000BF900C946A250E944E25C701B601269644 +:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B +:103EC0000F91FF90EF90DF90CF90BF900C94322530 +:103ED000002319F08B2D817001C08695882309F489 +:103EE000D7C1812F829586958770880F880F912F73 +:103EF0009F70C92ED12CE12CF12C082E04C0CC0CC3 +:103F0000DD1CEE1CFF1C0A94D2F714FF12C04FE018 +:103F100050E060E070E004C0440F551F661F771F3B +:103F20008A95D2F7CB01BA016095709580959095EE +:103F300003C060E070E0CB012B2D26952695237001 +:103F4000422F50E042305105D9F04330510569F11C +:103F50006C297D298E299F294130510551F12696E2 +:103F60000FB6F894DEBF0FBECDBFDF91CF911F918A +:103F70000F91FF90EF90DF90CF90BF900C94282688 +:103F80006C297D298E299F2926960FB6F894DEBFCD +:103F90000FBECDBFDF91CF911F910F91FF90EF909A +:103FA000DF90CF90BF900C9444260E942826C70132 +:103FB000B60126960FB6F894DEBF0FBECDBFDF91D7 +:103FC000CF911F910F91FF90EF90DF90CF90BF9016 +:103FD0000C940C26103F49F118F4103E48F491C09F +:103FE000123F09F453C0E8F1133F09F464C089C0DB +:103FF0001F708B2D8F71002321F00E94A525812F2A +:104000007CCE0E94C625812F26960FB6F894DEBF7F +:104010000FBECDBFDF91CF911F910F91FF90EF9019 +:10402000DF90CF90BF900C94AD1D0023B1F02530F0 +:1040300008F02EC18B2D8F7126960FB6F894DEBF37 +:104040000FBECDBFDF91CF911F910F91FF90EF90E9 +:10405000DF90CF90BF900C94EB25263008F018C16C +:10406000E9CF0023A9F08B2D8F7126960FB6F89417 +:10407000DEBF0FBECDBFDF91CF911F910F91FF909B +:10408000EF90DF90CF90BF900C94A525002359F3BB +:104090008B2D8F7126960FB6F894DEBF0FBECDBF65 +:1040A000DF91CF911F910F91FF90EF90DF90CF9014 +:1040B000BF900C94C625002399F08B2D8F71269606 +:1040C0000FB6F894DEBF0FBECDBFDF91CF911F9129 +:1040D0000F91FF90EF90DF90CF90BF900C949025C0 +:1040E00026960FB6F894DEBF0FBECDBFDF91CF91FD +:1040F0001F910F91FF90EF90DF90CF90BF900C94A5 +:1041000086250023A9F0222309F4ADCF812F26961E +:104110000FB6F894DEBF0FBECDBFDF91CF911F91D8 +:104120000F91FF90EF90DF90CF90BF900C948F1C79 +:10413000222309F4ADCF812F26960FB6F894DEBF67 +:104140000FBECDBFDF91CF911F910F91FF90EF90E8 +:10415000DF90CF90BF900C94571D4B2D4F70612F67 +:10416000C7010E940B0626960FB6F894DEBF0FBE5D +:10417000CDBFDF91CF911F910F91FF90EF90DF9016 +:10418000CF90BF900C94AA24011182C09B2D9F70E8 +:10419000492F50E04230510509F443C0C4F44115A1 +:1041A000510571F14130510509F072C026960FB6E4 +:1041B000F894DEBF0FBECDBFDF91CF911F910F915D +:1041C000FF90EF90DF90CF90BF900C94312D433053 +:1041D0005105C1F14430510509F05AC0812F26968E +:1041E0000FB6F894DEBF0FBECDBFDF91CF911F9108 +:1041F0000F91FF90EF90DF90CF90BF900C94832DA4 +:1042000026960FB6F894DEBF0FBECDBFDF91CF91DB +:104210001F910F91FF90EF90DF90CF90BF900C9483 +:104220001A2D26960FB6F894DEBF0FBECDBFDF91D4 +:10423000CF911F910F91FF90EF90DF90CF90BF90A3 +:104240000C944D2D26960FB6F894DEBF0FBECDBF51 +:10425000DF91CF911F910F91FF90EF90DF90CF9062 +:10426000BF900C94602D4B2D4F70612FC701269687 +:104270000FB6F894DEBF0FBECDBFDF91CF911F9177 +:104280000F91FF90EF90DF90CF90BF900C94D507E7 +:1042900026960FB6F894DEBF0FBECDBFDF91CF914B +:1042A0001F910F91FF90EF90DF90CF90BF900895F6 +:1042B0000E9408270E9418270E94DD260E943227AC +:1042C0000E94EE2A0E943D2A80E090E00E94711B2D +:1042D00080E090E00C94871B0E94F8260C945821F3 +:1042E0000E94A026292F22952F7030E02C30310516 +:1042F0004CF42A3031056CF422503109223031055A +:1043000088F407C02C30310549F02F30310531F0E9 +:1043100009C0803E48F0803F29F406C093FB8827FF +:1043200080F9089580E0089581E00895CF93DF93A8 +:1043300000D000D01F92CDB7DEB70F900F900F9036 +:104340000F900F90DF91CF910895CF93DF9300D01E +:1043500000D000D0CDB7DEB726960FB6F894DEBFFA +:104360000FBECDBFDF91CF9108951F93CF93DF9301 +:10437000C0917B0316E080917C03C81799F0D0E0D0 +:104380001C9FF0011D9FF00D1124E358FC4F40814C +:10439000518162817381848195810E94A52121963A +:1043A000C770E9CFDF91CF911F9108954091AD0380 +:1043B0005091AE036091AF037091B0038091B1034F +:1043C0009091B2030C94A5218091B20382958F70D5 +:1043D00009F054C08091AF03882309F44FC0809145 +:1043E0007B03A0917C036091AD037091AE0340917B +:1043F000B0035091B103B6E08A1709F43FC090E0D2 +:1044000041155105C1F17F3F11F46F3FA1F1B89FF4 +:10441000F001B99FF00D1124E358FC4F2181721374 +:104420002AC02081621327C02281211124C0238148 +:1044300034812417350710F421503109241B350B22 +:10444000283C3105C0F42091B2032F7020612093E5 +:10445000B20326E0289FF001299FF00D1124EE57AA +:10446000FC4F80818F70806180838DEA93E00E9491 +:10447000B41D0C94B52101968770BECF0895CF92DC +:10448000DF92EF92FF920F931F93CF93DF93CDB7FD +:10449000DEB762970FB6F894DEBF0FBECDBF8C01BA +:1044A00085E0F801DE011D9601900D928A95E1F7F5 +:1044B000D8014C9111965C91119712966C911297BC +:1044C0001396CD90DC9014973091AD037091AE03AC +:1044D0008091B0039091B103009709F46BC17F3FC5 +:1044E00019F43F3F09F466C1E090AF03EE2009F4F0 +:1044F000C0C02091B203C816D90628F0F601E81B07 +:10450000F90BCF0104C0809590958C0D9D1DFF2463 +:10451000F394883C910578F0F12C207F09F0C6C017 +:104520007C2DD98AC88A89890E9496218DEA93E0D8 +:104530000E94B41DB1C0822F807F09F046C0751360 +:1045400014C0341312C0611110C02F702061209369 +:10455000B2030E94D6218DEA93E00E94B41D80919F +:10456000B203D80115968C932EC0CD2819F15F3F68 +:1045700011F44F3FF9F0F62E61111CC080917B03BE +:1045800020917C0336E0821709F45AC090E0389FEE +:10459000F001399FF00D1124E358FC4F718157133E +:1045A00006C07081471303C07281711103C0019668 +:1045B0008770E9CFF62E662309F418C18091B20303 +:1045C00081608093B203F12C11C1751308C03413BC +:1045D00006C0611104C08091B203D801C3C04D87E9 +:1045E0005E878D859E856A8B0E9470216A898823EB +:1045F000E1F16623D1F12091B203822F82958F7071 +:1046000090E0029774F08091AD039091AE0398878B +:104610008F831986DB86CA862C87CE0107960E9477 +:10462000B41D86E0F801ADEAB3E001900D928A95E1 +:10463000E1F70E94E4210E94D621FF24F394D6C022 +:104640004D875E878D859E850E94A026292F229505 +:104650002F7030E0223031050CF0BCC09F7009F0A3 +:10466000B6C0805E883008F4C1C0C8010E94B41D85 +:10467000E4CFC816D90608F453C0F601E81BF90BBD +:10468000CF01883C910508F450C0F12C7C2DD98ACB +:10469000C88A89890E949621EDEAF3E086E0DF016D +:1046A0001D928A95E9F70E94D621A0C0751314C007 +:1046B000341312C0611110C08091B203F8018583D8 +:1046C000C8010E94B41D86E0EDEAF3E0DF011D920F +:1046D0008A95E9F7FE2C8AC04D875E878D859E8579 +:1046E0006A8B0E9470216A89882309F4BECF6623F1 +:1046F00009F4BBCF2091B203822F82958F7090E096 +:1047000002970CF48ECF8091AD039091AE039A8303 +:1047100089831B82DD82CC822E83CE0101967FCFDE +:10472000809590958C0D9D1DACCFF62E662309F4D7 +:104730009CCF75132EC034132CC02091B20320FDE2 +:104740001FC0822F82958F70D9F0D80115962C93B7 +:1047500015978F3049F08F5F982F9295907F822F19 +:104760008F70892B15968C93C8010E94B41D86E02A +:10477000F801ADEAB3E001900D928A95E1F793CF8D +:1047800086E0F801ADEAB3E001900D928A95E1F779 +:104790002DC04D875E878D859E850E947021811179 +:1047A00040CF8091B20381608093B203C8010E9420 +:1047B000B41D1CC0662309F458CF4D875E878D85D4 +:1047C0009E850E947021882309F44FCF2ACF811142 +:1047D00048CF0CC0243031050CF047CF9F7009F44E +:1047E00040CFF8019581907F09F03BCF8F2D6296E5 +:1047F0000FB6F894DEBF0FBECDBFDF91CF911F91F2 +:104800000F91FF90EF90DF90CF9008951F93CF937B +:10481000DF93CDB7DEB72C970FB6F894DEBF0FBE8F +:10482000CDBF4F83588769877A878B879C87CE0156 +:1048300007960E943F22882369F08F8198852A85F8 +:104840003B85232BF1F19F3F09F063C08F3F09F0B7 +:1048500060C037C086E0FE013796DE0111960190F8 +:104860000D928A95E1F76F817885EA85FB8530970F +:1048700041F17F3F11F46F3F21F120917C0330E043 +:10488000C90101968770992740917B0350E08417F6 +:10489000950709F447C069837A83FD83EC8396E02A +:1048A000929FD001939FB00D1124A358BC4FFE01DD +:1048B000319601900D929A95E1F780937C030E94C6 +:1048C000B52116E080917B0390917C038917C1F19B +:1048D000189FC001112483589C4F0E943F228823B7 +:1048E00079F1E0917B031E9FF0011124E358FC4F06 +:1048F0004081518162817381848195810E94A521CB +:1049000080917B0390E001968770992780937B03C9 +:10491000D9CF4F81588569857A858B859C850E9482 +:10492000A521CFCF0E946C2110927C0310927B03B3 +:10493000EDEAF3E086E0DF011D928A95E9F7C1CF49 +:104940002C960FB6F894DEBF0FBECDBFDF91CF918E +:104950001F910895EF92FF920F931F93CF93DF93D0 +:104960008C01009709F46CC0F12CEE24E394E8016B +:104970002196F8018491843740F4843008F051C0C6 +:10498000813081F0823019F15BC0853709F444C071 +:10499000A8F19CE7980F903708F052C08F770E94DB +:1049A000571D41C00E5F1F4FFE01C49180E28C0F66 +:1049B000883048F4C7708E2D01C0880FCA95EAF779 +:1049C0000E940B2714C08C2F0E948F1C2DC00E5FDD +:1049D0001F4FFE01C49180E28C0F883058F4C770DD +:1049E0008E2D01C0880FCA95EAF70E9411270E94F8 +:1049F00032271AC08C2F0E94571D16C00E5F1F4F02 +:104A0000FE01C491CC2381F08FE99FE00197F1F77B +:104A100000C00000C150F6CF0E5F1F4FFE01F490A2 +:104A200003C00E948F1C8E018F2D882309F49FCF15 +:104A3000EFE9FFE03197F1F700C000008150F5CFBA +:104A4000DF91CF911F910F91FF90EF9008950895FE +:104A50006093B7037093B8038093B9039093BA033C +:104A60000C9458210F931F930091B7031091B80332 +:104A70002091B9033091BA03DC01CB01802B912B3B +:104A8000A22BB32B8093B7039093B803A093B903E1 +:104A9000B093BA031F910F910C9458210F931F9359 +:104AA0000091B7031091B8032091B9033091BA0374 +:104AB000DC01CB0180239123A223B3238093B7038E +:104AC0009093B803A093B903B093BA031F910F91C9 +:104AD0000C9458210F931F930091B7031091B803C2 +:104AE0002091B9033091BA03DC01CB0180279127D3 +:104AF000A227B3278093B7039093B803A093B90379 +:104B0000B093BA031F910F910C9458211092B303E4 +:104B10001092B4031092B5031092B6030C9458216E +:104B200041E050E060E070E004C0440F551F661F94 +:104B3000771F8A95D2F74093B3035093B4036093E1 +:104B4000B5037093B6030C94582141E050E060E047 +:104B500070E004C0440F551F661F771F8A95D2F777 +:104B60008091B3039091B403A091B503B091B603C3 +:104B7000482B592B6A2B7B2B4093B3035093B403E0 +:104B80006093B5037093B6030C94582141E050E054 +:104B900060E070E004C0440F551F661F771F8A95C0 +:104BA000D2F740955095609570958091B3039091A0 +:104BB000B403A091B503B091B603482359236A23E7 +:104BC0007B234093B3035093B4036093B503709376 +:104BD000B6030C94582141E050E060E070E004C05E +:104BE000440F551F661F771F8A95D2F78091B30334 +:104BF0009091B403A091B503B091B603482759270B +:104C00006A277B274093B3035093B4036093B503A3 +:104C10007093B6030C9458210F931F930091B30324 +:104C20001091B4032091B5033091B603DC01CB01A0 +:104C3000802B912BA22BB32B8093B3039093B403BF +:104C4000A093B503B093B6031F910F910C94582114 +:104C50000F931F930091B3031091B4032091B503F8 +:104C60003091B603DC01CB0180239123A223B3232F +:104C70008093B3039093B403A093B503B093B603AA +:104C80001F910F910C9458210F931F930091B30320 +:104C90001091B4032091B5033091B603DC01CB0130 +:104CA00080279127A227B3278093B3039093B4035F +:104CB000A093B503B093B6031F910F910C945821A4 +:104CC0000895CF92DF92EF92FF920F931F93CF93AD +:104CD000DF938C01C090B703D090B803E090B90384 +:104CE000F090BA038091B3039091B403A091B503FF +:104CF000B091B603C82AD92AEA2AFB2ACFE1D0E02C +:104D0000D701C6010C2E04C0B695A7959795879537 +:104D10000A94D2F780FF06C0B8018C2F0E942F0A98 +:104D2000019721F4219760F780E001C08C2FDF917B +:104D3000CF911F910F91FF90EF90DF90CF9008954A +:104D4000CF93DF93EC010E946126BE010E942F0ADF +:104D5000DF91CF910895CB010E94A0260895209164 +:104D60001D0230911E02F90132969FEF40E05191F1 +:104D7000581789F09F3F19F4511101C0942F4F5FCC +:104D80004630A9F79F3F39F0F901E90FF11D97FD72 +:104D9000FA9582830895089520911D0230911E0294 +:104DA000F9013296285F3F4F9081981301C010821D +:104DB0003196E217F307C1F7089581E090E0E091A2 +:104DC0001D02F0911E02E80FF91F10820196883033 +:104DD0009105A9F708959091C603892B8093C60386 +:104DE000089580959091C60389238093C603089502 +:104DF0001092C60308959091C503892B8093C50333 +:104E0000089580959091C50389238093C5030895E3 +:104E10001092C50308959091C403892B8093C40315 +:104E2000089580959091C40389238093C4030895C5 +:104E30001092C40308958093BB0308951092BB039E +:104E4000089580911D0290911E02FC0131969C01F3 +:104E5000285F3F4F80E0919191118F5FE217F30738 +:104E6000D1F70895E0911D02F0911E028091C603D2 +:104E70008083E0911D02F0911E0290818091C50314 +:104E8000892B8083E0911D02F0911E029081809118 +:104E9000C403892B80838091BB03882361F0E09158 +:104EA0001D02F0911E029081892B80830E94212790 +:104EB00081111092BB0380911D0290911E020C94EF +:104EC0005B1B8091E803843039F11092C80320E421 +:104ED00088E190E00FB6F894A895809360000FBE2B +:104EE0002093600080E00E94D20580E00E940A0BBF +:104EF00083B7817F846083BF83B7816083BF7894E9 +:104F0000889583B78E7F83BF88E10FB6F89480932E +:104F10006000109260000FBE089508950895CF9329 +:104F200080E00E94D2050E948D270E94AD0C0E9455 +:104F30008E27C0E08C2F0E94E60D892B29F4CF5FCD +:104F4000C530C1F780E001C081E0CF9108950E9493 +:104F50006C2180E00E94D2050E94092D0E944F1B07 +:104F60000C940A0B1F920F920FB60F9211248F937D +:104F70009F93AF93BF938091C803811113C0809119 +:104F8000C9039091CA03A091CB03B091CC03419681 +:104F9000A11DB11D8093C9039093CA03A093CB03B5 +:104FA000B093CC03BF91AF919F918F910F900FBEA3 +:104FB0000F901F90189582E084BD93E095BD9AEF05 +:104FC00097BD80936E0008952FB7F8948091C90320 +:104FD0009091CA03A091CB03B091CC032FBF089549 +:104FE000CF92DF92EF92FF920F931F932FB7F89417 +:104FF0004091C9035091CA036091CB037091CC03D7 +:105000002FBF6A017B01EE24FF248C0120E030E0F9 +:10501000C016D106E206F30610F4415051099A0178 +:10502000281B390BC9011F910F91FF90EF90DF9062 +:10503000CF9008951F920F920FB60F9211248F9365 +:105040009F93AF93BF938091C9039091CA03A0919E +:10505000CB03B091CC030196A11DB11D8093C90370 +:105060009093CA03A093CB03B093CC03BF91AF91AD +:105070009F918F910F900FBE0F901F9018950E94D7 +:105080004C18F8942FEF87EA91E621508040904029 +:10509000E1F700C0000087E090EBDC018093F303B0 +:1050A0009093F403A093F503B093F6039CE088E19A +:1050B0000FB6F894A895809360000FBE909360009F +:1050C000FFCF0E949B28811102C00E9477280E9476 +:1050D000A6288093C7030E94B3288093F1030E94FF +:1050E000AA28682F70E080E090E00C9428256DEEEF +:1050F0007EEF80E090E00E94BC3160E082E090E0D2 +:105100000E94AA3160E083E090E00E94AA3160E052 +:1051100084E090E00E94AA3160E085E090E00E9487 +:10512000AA3160E086E090E00E94AA316FEF87E04C +:1051300090E00C94AA3180E090E00E94A43121E03C +:105140008D3E9E4F09F020E0822F089582E090E08E +:105150000C949C3183E090E00C949C31682F83E0A8 +:1051600090E00C94AA3184E090E00C949C31682F7C +:1051700084E090E00C94AA3186E090E00C949C319D +:10518000682F86E090E00C94AA3187E090E00C94C0 +:105190009C31682F87E090E00C94AA318091CF0376 +:1051A00080FF0BC06091220285E0689FB00111244E +:1051B00075956795759567952BC081FF09C06091BE +:1051C000220285E0689FB00111247595679520C083 +:1051D00082FF07C06091220285E0689FB001112420 +:1051E00017C09091D0039923D1F0609121029617B6 +:1051F00088F72091220285E0289F90011124929F38 +:10520000A001939F500D112470E0CA010E948231C9 +:105210006038710540F46115710539F002C065E030 +:1052200070E0862F08958FE7089581E008958091BA +:10523000CF0380FF08C06091200270E075956795EC +:105240007595679521C081FF06C06091200270E0CE +:105250007595679519C082FF04C06091200270E0C7 +:1052600010C09091D0039923C1F060911F0296174E +:10527000A0F780912002899FC001112470E00E9454 +:1052800082316038710528F46115710521F0862F8F +:1052900008958FE7089581E0089561E070E0F4CF0C +:1052A000803F21F40E94CE28819504C0813F29F4DB +:1052B0000E94CE288093D3030895823F21F40E9458 +:1052C000CE28819504C0833F29F40E94CE28809384 +:1052D000D2030895893F19F40E94172905C08A3F17 +:1052E00031F40E94172981958093D40308958B3F50 +:1052F00021F40E941729819504C08C3F29F40E9453 +:1053000017298093D5030895843F21F48091D10318 +:10531000816017C0853F21F48091D103826011C064 +:10532000863F21F48091D10384600BC0873F21F434 +:105330008091D103886005C0883F31F48091D1030A +:1053400080618093D10308958D3F21F48091CF0334 +:1053500081600BC08E3F21F48091CF03826005C035 +:105360008F3F29F48091CF0384608093CF03089509 +:10537000803F39F48091D30387FF6CC01092D30330 +:1053800069C0813F29F48091D3031816BCF362C031 +:105390009091D203823F29F497FF5CC01092D20310 +:1053A00059C0833F19F41916CCF354C0893F41F416 +:1053B0008091D40318160CF04DC01092D4034AC04B +:1053C0008A3F29F48091D40387FF44C0F6CF8B3FF6 +:1053D00039F48091D50387FF3DC01092D5033AC0C0 +:1053E0008C3F29F48091D5031816BCF333C0843F59 +:1053F00021F48091D1038E7F17C0853F21F48091E5 +:10540000D1038D7F11C0863F21F48091D1038B7F22 +:105410000BC0873F21F48091D103877F05C0883F6F +:1054200031F48091D1038F7E8093D10313C08D3FDF +:1054300021F48091CF038E7F0BC08E3F21F48091A9 +:10544000CF038D7F05C08F3F29F48091CF038B7FE1 +:105450008093CF038091D20381110EC08091D3033A +:1054600081110AC08091D403811106C08091D503B7 +:10547000811102C01092D003089581ED93E00E9443 +:10548000661B0E94E4279093CE038093CD0308957A +:105490001F93CF93DF938091CD039091CE030E9411 +:1054A000F027AC019091D003992321F020912302A1 +:1054B00030E006C0209124028AE0289F9001112448 +:1054C0004217530708F486C08091D203C091D303DA +:1054D000D091D4031091D503811107C0C11176C0BA +:1054E000D11174C0111172C075C09F3F19F09F5F38 +:1054F0009093D003181624F40E94CE288093D203F0 +:105500008091D20387FF05C00E94CE2881958093A9 +:10551000D2031C1624F40E94CE288093D3038091DA +:10552000D30387FF05C00E94CE2881958093D303C3 +:105530006091D203662339F1C091D303CC2319F1D2 +:10554000772767FD7095872F972F0E94A42E23E35E +:1055500033E343E35FE30E94B42F0E94712E609314 +:10556000D2036C2F772767FD7095872F972F0E94A6 +:10557000A42E23E333E343E35FE30E94B42F0E94AE +:10558000712E6093D3031D1624F40E941729809373 +:10559000D4038091D40387FF05C00E941729819509 +:1055A0008093D403111624F40E9417298093D50305 +:1055B0008091D50387FF05C00E94172981958093AC +:1055C000D503DF91CF911F910C943D2A9F3F09F0A5 +:1055D0008ECF96CFDF91CF911F910895E1EDF3E04B +:1055E00085E0DF011D928A95E9F71092D0031092B1 +:1055F000CF030895833081F128F4813059F082304F +:10560000D1F00895853009F449C0B8F1863009F425 +:1056100056C0089580912402262F30E0280F311DB6 +:105620002F3F310524F4680F6093240208958FEF13 +:1056300080932402089580912302262F30E0280FC2 +:10564000311D2F3F310524F4680F60932302089524 +:105650008FEF80932302089580912202262F30E05D +:10566000280F311D2F3F310524F4680F609322026B +:1056700008958FEF80932202089580912102262FB2 +:1056800030E0280F311D2F3F310524F4680F60935F +:10569000210208958FEF80932102089580912002C6 +:1056A000262F30E0280F311D2F3F310524F4680FDD +:1056B0006093200208958FEF8093200208958091D7 +:1056C0001F02262F30E0280F311D2F3F310524F413 +:1056D000680F60931F0208958FEF80931F02089553 +:1056E000833011F128F4813049F0823091F008952F +:1056F000853081F120F18630C1F108958091240236 +:10570000681720F4861B80932402089510922402C7 +:10571000089580912302681720F4861B809323024A +:10572000089510922302089580912202681720F4B0 +:10573000861B809322020895109222020895809180 +:105740002102681720F4861B80932102089510928D +:105750002102089580912002681720F4861B80930F +:105760002002089510922002089580911F02681768 +:1057700020F4861B80931F02089510921F02089543 +:105780000F931F938732D8F58E3108F087C08E3083 +:1057900009F471C098F4873009F45BC08B3009F4C8 +:1057A00091C0863009F095C08091C703817F8E7FBC +:1057B0008093C70381E08093D7038CC0863109F4BE +:1057C00081C068F4803109F084C08091C70383FBF5 +:1057D000222720F991E0922790FB83F955C0893167 +:1057E00009F470C08B3109F074C08091C70381FB4C +:1057F000222720F991E0922790FB81F945C0883358 +:1058000009F460C050F4893209F45EC0853309F4AC +:105810005BC0873209F458C05CC0833409F454C0BB +:1058200028F48A3308F455C0895339C0883409F004 +:1058300050C00E946C210E94B2070FEF13ED20E3CD +:10584000015010402040E1F700C000000E943F28B6 +:1058500039C09091C703892F8095817080FB90F9A2 +:1058600029F0966098609093C70334C0997F977F22 +:105870009093C70327C08091C70382FB222720F99A +:1058800091E0922790FB82F98093C7039923D1F08E +:105890008091C70381608093C70314C08D5141E09C +:1058A00050E060E070E08A019B0104C0000F111F0E +:1058B000221F331F8A95D2F7C901B8010E942825FB +:1058C0000E946C2181E006C061E070E080E090E021 +:1058D000F5CF80E01F910F91089580E0089580E05A +:1058E0000895CF93C82F8091D703813069F018F0C5 +:1058F0008230C9F184C0E0911D02F0911E028081C6 +:10590000823209F07EC007C0E0911D02F0911E02B4 +:105910008081823261F48C2F0E946D2C811104C031 +:105920008C2F0E94C02B1DC081E090E01AC08C2FEC +:105930000E946F2C811114C0C43179F048F4CB302F +:1059400079F0C03109F061C082E08093D70308C0CC +:10595000C93219F0C83321F058C01092D70355C08E +:1059600081E0817054C0C93291F120F5C43179F1E0 +:10597000B0F4C73009F047C08EE18093240282E37F +:10598000809323028AE08093220284E180932102A3 +:1059900088E08093200288E280931F0234C0CE51B9 +:1059A000C63088F5EC2FF0E0E451FD4F8081809304 +:1059B000D60329C0CE34E9F020F4CB3421F56AE0D7 +:1059C00013C0C13579F0C235F1F461E00DC08091AA +:1059D000D603882319F01092D60315C081E0809376 +:1059E000D70315C061E006C08091D6030E94FA2A51 +:1059F0000AC06AE08091D6030E94702B04C0109206 +:105A0000D70380E004C081E002C080E0AACFCF913C +:105A100008950E949B28811102C00E9477280E944D +:105A2000BC288093F20380FF02C0869501C080E00D +:105A30000C94D2058091F203982F9695292F30E08F +:105A4000233031054CF49F5F990F8170892B816061 +:105A50008093F2030E94C0288091F20386950C94F3 +:105A6000D2058091F203982F969591F09158990F55 +:105A70008170892B8093F2038E7F91E009F490E08E +:105A80008091F20390FB80F98093F2030E94C0287A +:105A90008091F20386950C94D2058091F203982FA1 +:105AA000909590FB80F98093F2030E94C02880912A +:105AB000F20380FF02C0869501C080E00C94D205FD +:105AC0009091F203892F86958F5F8F779170843044 +:105AD00028F4880F892B8093F20302C09093F2037D +:105AE0008091F2038E7F91E009F490E08091F203BF +:105AF00090FB80F98093F2030E94C0288091F2030A +:105B000086950C94D2052091F203922F96958927C1 +:105B1000982F990F822F8170892B8093F2038E7FAB +:105B200091E009F490E08091F20390FB80F980937A +:105B3000F2030E94C0288091F20386950C94D2054E +:105B40005058BB27AA270ED0D1C1C2D130F0C7D13F +:105B500020F031F49F3F11F41EF4B7C10EF4E0952C +:105B6000E7FB9FC1E92FD3D180F3BA176207730710 +:105B70008407950718F071F49EF5EBC10EF4E095DB +:105B80000B2EBA2FA02D0B01B90190010C01CA01F7 +:105B9000A0011124FF27591B99F0593F50F4503EA2 +:105BA00068F11A16F040A22F232F342F4427585F94 +:105BB000F3CF469537952795A795F0405395C9F7AC +:105BC0007EF41F16BA0B620B730B840BBAF0915064 +:105BD000A1F0FF0FBB1F661F771F881FC2F70EC003 +:105BE000BA0F621F731F841F48F4879577956795D6 +:105BF000B795F7959E3F08F0B3CF9395880F08F0BF +:105C00009927EE0F97958795089527D108F481E09D +:105C100008950CD06BC163D140F05AD130F021F41B +:105C20005F3F19F03EC1511195C14FC170D198F33A +:105C30009923C9F35523B1F3951B550BBB27AA270D +:105C400062177307840738F09F5F5F4F220F331F7F +:105C5000441FAA1FA9F333D00E2E3AF0E0E830D04B +:105C600091505040E695001CCAF729D0FE2F27D04E +:105C7000660F771F881FBB1F261737074807AB071C +:105C8000B0E809F0BB0B802DBF01FF2793585F4F91 +:105C90002AF09E3F510568F004C15CC15F3FECF300 +:105CA000983EDCF3869577956795B795F7959F5F56 +:105CB000C9F7880F911D9695879597F90895E1E0AA +:105CC000660F771F881FBB1F621773078407BA0709 +:105CD00020F0621B730B840BBA0BEE1F88F7E09564 +:105CE000089504D06894B11135C1089518D188F091 +:105CF0009F5790F0B92F9927B751A0F0D1F0660FB8 +:105D0000771F881F991F1AF0BA95C9F712C0B130D2 +:105D100081F01FD1B1E008951CC1672F782F88272B +:105D2000B85F39F0B93FCCF3869577956795B39511 +:105D3000D9F73EF490958095709561957F4F8F4F80 +:105D40009F4F0895E89409C097FB3EF49095809585 +:105D5000709561957F4F8F4F9F4F9923A9F0F92F31 +:105D600096E9BB279395F695879577956795B795AF +:105D7000F111F8CFFAF4BB0F11F460FF1BC06F5F95 +:105D80007F4F8F4F9F4F16C0882311F096E911C0A7 +:105D9000772321F09EE8872F762F05C0662371F0C8 +:105DA00096E8862F70E060E02AF09A95660F771FDC +:105DB000881FDAF7880F9695879597F9089588D008 +:105DC00018F011F08CD038F480C0C4C0E92F9FD0F7 +:105DD000B0F35523C9F3E7FB6217730784079507F0 +:105DE000A8F199F3E92FFF2788232AF03197660F4E +:105DF000771F881FDAF7952F5527442332F09150EB +:105E00005040220F331F441FD2F7BB27E91BF50B6D +:105E1000621B730B840BB109C1F222F4620F731F72 +:105E2000841FB11D31972AF0660F771F881FBB1F93 +:105E3000EFCF915050405AF041F0882332F0660F76 +:105E4000771F881F91505040C1F7939530C08695B9 +:105E5000779567959F5FD9F7F8CF990F0008550F91 +:105E6000AA0BE0E8FEEF16161706E807F907C0F0E0 +:105E700012161306E407F50798F0621B730B840BE8 +:105E8000950B39F40A2661F0232B242B252B21F4C2 +:105E900008950A2609F4A140A6958FEF811D811D62 +:105EA000089597F99F6780E870E060E008959F3F4C +:105EB00031F0915020F4879577956795B795880FC5 +:105EC000911D9695879597F908959FEF80EC089519 +:105ED00000240A94161617061806090608950024C9 +:105EE0000A9412161306140605060895092E039443 +:105EF000000C11F4882352F0BB0F40F4BF2B11F4B7 +:105F000060FF04C06F5F7F4F8F4F9F4F089557FD15 +:105F10009058440F551F59F05F3F71F04795880F17 +:105F200097FB991F61F09F3F79F0879508951216AE +:105F300013061406551FF2CF4695F1DF08C016165A +:105F400017061806991FF1CF86957105610508940B +:105F50000895E894BB2766277727CB0197F9089522 +:105F60007CDF08F48FEF08950BD0C0CFB1DF28F0AD +:105F7000B6DF18F0952309F094CFA7CF1124EACF0C +:105F8000C6DFA0F3959FD1F3950F50E0551F629F98 +:105F9000F001729FBB27F00DB11D639FAA27F00D82 +:105FA000B11DAA1F649F6627B00DA11D661F829FA9 +:105FB0002227B00DA11D621F739FB00DA11D621F8E +:105FC000839FA00D611D221F749F3327A00D611DAB +:105FD000231F849F600D211D822F762F6A2F11248D +:105FE0009F5750408AF0E1F088234AF0EE0FFF1FE0 +:105FF000BB1F661F771F881F91505040A9F79E3F17 +:10600000510570F04ECFA6CF5F3FECF3983EDCF326 +:10601000869577956795B795F795E7959F5FC1F753 +:10602000FE2B880F911D9695879597F90895FA0193 +:10603000EE0FFF1F30962105310599F161157105AD +:1060400061F48038BFE39B0749F16894903881057B +:1060500061F08038BFEF9B0741F0992342F5FF3F85 +:10606000E1053105210511F1E8940894E795D9017E +:10607000AA2329F4AB2FBE2FF85FD0F310C0FF5F27 +:1060800070F4A695E0F7F73950F019F0FF3A38F4BC +:106090009F779F930CD00F9007FC905808953EF087 +:1060A00014CF60E070E080E89FE308954FE79F77AA +:1060B0005F934F933F932F939ED02F913F914F919A +:1060C0005F9152DF05C019F40EF0EBCE42CFFDCE4A +:1060D00026DFC8F39638C0F707F80F92E8942BE351 +:1060E0003AEA48EB5FE74EDF0F920F920F924DB7FF +:1060F0005EB70F92C0D0E8EFF0E016D04F915F91FD +:10610000EF91FF91E595EE1FFF1F49F0FE57E06804 +:106110004427EE0F441FFA95E1F74195550B32D015 +:106120000F9007FE26C00895DF93CF931F930F9320 +:10613000FF92EF92DF927B018C01689405C0DA2E0A +:10614000EF011EDFFE01E894A5912591359145915F +:106150005591AEF3EF0106DDFE019701A801DA9437 +:1061600079F7DF90EF90FF900F911F91CF91DF9122 +:1061700008959B01AC0160E070E080E89FE349CDA9 +:1061800090CE95CECCDEE8F39923D9F3940F511D30 +:10619000BBF39150504094F059F0882332F0660FD1 +:1061A000771F881F91505040C1F79E3F510544F71B +:1061B000880F911D9695879597F908955F3FACF0EC +:1061C000983E9CF0BB27869577956795B79508F420 +:1061D000B1609395C1F7BB0F58F711F460FFE8CF9A +:1061E0006F5F7F4F8F4F9F4FE3CFB4CE0EF05FCEE8 +:1061F0006CCE689456CE93DEC8F39923D1F3C6F3E0 +:10620000DF93CF931F930F93FF92C92FDD2788232E +:106210002AF02197660F771F881FDAF720E030E019 +:1062200040E85FEB9FE3883920F0803E30F0219614 +:106230008F7787DCE0E2F1E003C083DCEDE4F1E09E +:1062400073DF8B01BE01EC01FB2E6F577109759551 +:10625000771F880B990B78DD28E132E741E35FE394 +:106260008FDEAF2D9801AE01FF900F911F91CF915E +:10627000DF9178DC3BCEFA01DC01AA0FBB1F9B014A +:10628000AC01BF5728F422273327442750781FC07A +:10629000B75188F4AB2F0024469537952795011CFC +:1062A000A395D2F3002069F0220F331F441FB3954A +:1062B000DAF30DD045CC61307105A0E88A07B94604 +:1062C00030F49B01AC0166277727882790783096B9 +:1062D00021F020833183428353830895AA1BBB1B83 +:1062E00051E107C0AA1FBB1FA617B70710F0A61BD6 +:1062F000B70B881F991F5A95A9F780959095BC01F7 +:10630000CD01089597FB072E16F4009407D077FD72 +:1063100009D00E946E3107FC05D03EF4909581951E +:106320009F4F0895709561957F4F0895EE0FFF1F61 +:106330000590F491E02D0994F999FECF92BD81BDAD +:10634000F89A992780B50895A8E1B0E042E050E0BE +:106350000C94C431262FF999FECF92BD81BDF89AD5 +:10636000019700B4021639F01FBA20BD0FB6F89499 +:10637000FA9AF99A0FBE08950196272F0E94AB3121 +:106380000C94AA31DC01CB01FC01F999FECF06C0C7 +:10639000F2BDE1BDF89A319600B40D9241505040E3 +:0863A000B8F70895F894FFCF4F +:1063A8000C52D02445000000410000DC44000000ED +:1063B8004152D0A4440000404100005C4400000069 +:1063C8004148F17644000000415C978A440000008F +:1063D800411FD592440000004152D0A4440000005F +:1063E800415CFFB844000000410AA7CF4400000008 +:1063F800410000DC44000000410AA7CF440000002F +:10640800410000DC44000000410000000000008062 +:106418004052D024450000404100000000000080A8 +:10642800400AA74F45000040410AA7CF440000009A +:10643800410000DC44000000410000000000008032 +:106448004052D024450000004100000000000080B8 +:10645800405CFF384500000041000000000000805B +:106468004052D02445000000410AA7CF4400000054 +:10647800410000DC440000004100000000000080F2 +:106488004052D024450000804110F176440000A01D +:106498004112F1F6440000004141909B440000A0E5 +:1064A8004112F1F64400000041050000003F0000E1 +:1064B800C8427B140915E614B2147E1401BC0328E3 +:1064C80008140A321E000002000400050007000933 +:1064D800000B000C000E001000110013001500172F +:1064E8000018001A001C001D001F002100230024B2 +:1064F800002600280029002B002D002F0030003234 +:106508000034003500370039003B004200450025C3 +:106518000026004300610060002000370064006529 +:1065280000660067004400460024004700314980A7 +:106538003F5D8B803FF8BF803FCAE1803F73ED80AD +:106548003FCAE1803FF8BF803F5D8B803F31498083 +:106558003F0000803FF16D7F3F75EA7E3F4C827EB1 +:106568003F833F7E3F84287E3F833F7E3F4C827E31 +:106578003F75EA7E3FF16D7F3F0000803F3F4D361B +:10658800B90A6C0A360AE209FB09140A0102030473 +:06659800050607080900DA :00000001FF diff --git a/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex b/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex index a29f23c00..c42365c43 100644 --- a/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex +++ b/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex @@ -250,79 +250,79 @@ :107FE4000C94ED3E0C94113F0C94193F0C94213FDA :0C7FF4000C94F23E0C94033F0C94293FC7 :040000030000700089 -:100000000C94A0050C94E4050C94E4050C94E40510 -:100010000C94E4050C94E4050C94E4050C94E405BC -:100020000C94E4050C94E4050C94B6180C9488190F -:100030000C94A1270C94E4050C94E4050C94E405BD -:100040000C94E4050C94E4050C94E4050C94E4058C -:100050000C94E4050C9409280C94E4050C94E40534 -:100060000C94E4050C94E4050C94E4050C94E4056C -:100070000C94E4050C94E4050C94E4050C94E4055C -:100080000C94090F0C94E4050C94E4050C94E4051D -:100090000C94E4050C94E4050C94E4050C94E4053C -:1000A0000C94E4050C94E4050C94E4053F064F061B -:1000B000610671067706860692069706A406AC06C8 -:1000C000BC06C106C813C813C813C813C813C81385 -:1000D000C813C813C813C813DF13DF13DF13DF13EC -:1000E000DF13DF13DF13DF13DF13DF13C813C813AE -:1000F000C813C813C813DF13DF13DF13DF13DF13B5 -:10010000C813C813C813DF13DF13DF13F519171A49 -:10011000051B171A051B5C1A7F1A051BD41AE71A50 -:10012000EA1DEA1D271E271E811EBF1E372137210B -:10013000D81E3721D91FD91F9C20B3203721222157 -:1001400007634236B79BD8A71A39685618AEBAABC0 -:10015000558C1D3CB7CC5763BD6DEDFD753EF61754 -:100160007231BF000000803F08000000BE922449A9 -:10017000123EABAAAA2ABECDCCCC4C3E00000080D9 -:10018000BEABAAAAAA3E00000000BF000000803F4C -:100190000000000000084178D3BB4387D1133D190C -:1001A0000E3CC3BD4282AD2B3E68EC8276BED98F39 -:1001B000E1A93E4C80EFFFBE01C4FF7F3F0000007D -:1001C000000035001E001F00200021002200230037 -:1001D00024002500260027002A002B0014001A0006 -:1001E0000800150017001C0018000C001200130076 -:1001F0004C00290004001600070009000A000B004B -:100200000D000E000F0033003400E1001D001B0044 -:1002100006001900050011001000360037003800F4 -:1002200028000530E000E200E30003302C002C0041 -:1002300004305000510052004F0035001E001F00D6 -:100240002000210022002300240025002600270092 -:100250002A002B0014001A00090013000A000D00E8 -:100260000F0018001C0033004C002900040015008A -:100270001600170007000B00110008000C00120008 -:100280003400E1001D001B000600190005000E00EF -:10029000100036003700380028000530E000E2008A -:1002A000E30003302C002C000430500051005200B9 -:1002B0004F0035001E001F002000210022002300F7 -:1002C00024002500260027002A002B0034003600D9 -:1002D000370013001C0009000A00060015000F007B -:1002E0004C00290004001200080018000C00070050 -:1002F0000B001700110016003800E1003300140055 -:100300000D000E001B00050010001A0019001D0052 -:1003100028000530E000E200E30003302C002C0050 -:1003200004305000510052004F0035021E021F02DF -:100330002002210222022302240225022602270291 -:100340002A0035021E021F0220022102220223027D -:1003500024022502260227024C004C003A003B00F2 -:100360003C003D003E003F002D022E022F023002D5 -:1003700031020100400041004200430044004500BA -:100380000100010001000100010001000100010065 -:1003900001000100010001000100AB00AA00A9005A -:1003A000AE0035001E001F002000210022002300A7 -:1003B00024002500260027002A0035001E001F000B -:1003C0002000210022002300240025002600270011 -:1003D0004C004C003A003B003C003D003E003F001A -:1003E0002D002E002F0030003100010040004100A0 -:1003F00042004300440045000100010001000100EB -:1004000001000100010001000100010001000100E4 -:100410000100AB00AA00A900AE000000000000002F +:100000000C947C050C94C0050C94C0050C94C005A0 +:100010000C94C0050C94C0050C94C0050C94C0054C +:100020000C94C0050C94C0050C94C7180C94991935 +:100030000C94B2270C94C0050C94C0050C94C00518 +:100040000C94C0050C94C0050C94C0050C94C0051C +:100050000C94C0050C941A280C94C0050C94C0058F +:100060000C94C0050C94C0050C94C0050C94C005FC +:100070000C94C0050C94C0050C94C0050C94C005EC +:100080000C94E50E0C94C0050C94C0050C94C005AE +:100090000C94C0050C94C0050C94C0050C94C005CC +:1000A0000C94C0050C94C0050C94C0051B062B06CF +:1000B0003D064D06530662066E06730680068806E8 +:1000C00098069D06061A281A161B281A161B6D1A62 +:1000D000901A161BE51AF81AFB1DFB1D381E381E58 +:1000E000921ED01E48214821E91E4821EA1FEA1F1E +:1000F000AD20C4204821332107634236B79BD8A7DF +:100100001A39685618AEBAAB558C1D3CB7CC57633C +:10011000BD6DEDFD753EF6177231BF000000803FEA +:1001200008000000BE922449123EABAAAA2ABECD06 +:10013000CCCC4C3E00000080BEABAAAAAA3E000078 +:100140000000BF000000803F000000000008417870 +:10015000D3BB4387D1133D190E3CC3BD4282AD2BA7 +:100160003E68EC8276BED98FE1A93E4C80EFFFBE9F +:1001700001C4FF7F3F000000000035001E001F008B +:100180002000210022002300240025002600270053 +:100190002A002B0014001A000800150017001C008C +:1001A00018000C00120013004C0029000400160077 +:1001B000070009000A000B000D000E000F003300BD +:1001C0003400E1001D001B000600190005001100AD +:1001D000100036003700380028000530E000E2004B +:1001E000E30003302C002C0004305000510052007A +:1001F0004F0035001E001F002000210022002300B8 +:1002000024002500260027002A002B0014001A00D5 +:10021000090013000A000D000F0018001C00330035 +:100220004C002900040015001600170007000B0001 +:10023000110008000C0012003400E1001D001B003A +:100240000600190005000E001000360037003800C7 +:1002500028000530E000E200E30003302C002C0011 +:1002600004305000510052004F0035001E001F00A6 +:100270002000210022002300240025002600270062 +:100280002A002B0034003600370013001C00090040 +:100290000A00060015000F004C002900040012009F +:1002A000080018000C0007000B00170011001600D2 +:1002B0003800E100330014000D000E001B000500A3 +:1002C00010001A0019001D0028000530E000E200AF +:1002D000E30003302C002C00043050005100520089 +:1002E0004F0035021E021F022002210222022302B9 +:1002F00024022502260227022A0035021E021F02BE +:1003000020022102220223022402250226022702C1 +:100310004C004C003A003B003C003D003E003F00DA +:100320002D022E022F023002310201004000410056 +:1003300042004300440045000100010001000100AB +:1003400001000100010001000100010001000100A5 +:100350000100AB00AA00A900AE0035001E001F007E +:100360002000210022002300240025002600270071 +:100370002A0035001E001F0020002100220023005B +:1003800024002500260027004C004C003A003B00CA +:100390003C003D003E003F002D002E002F003000AD +:1003A000310001004000410042004300440045008C +:1003B0000100010001000100010001000100010035 +:1003C00001000100010001000100AB00AA00A9002A +:1003D000AE0000000000000000000000000000006F +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC +:100430000000000000000000000003300000000089 +:100440000430000000000000000000000000000078 :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C -:100480000000033000000000043000000000000005 +:10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C :1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C @@ -393,1471 +393,1488 @@ :1008C0000000000000000000000000000000000028 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000003A003B003C003D003E003F004000FC -:1009500041004200430044004500010000500100F6 +:1008F000000000000000000000003A003B003C0047 +:100900003D003E003F0040004100420043004400E3 +:10091000450001000050010001000100010001003C +:1009200001000100010001004C0001000100010074 +:1009300007300630135012500030013002300100F1 +:10094000010001000B300A300930083001000100BD +:10095000010001000100010001000100010001008F :10096000010001000100010001000100010001007F -:100970004C000100010001000730063013501250F6 -:100980000030013002300100010001000B300A305C -:1009900009300830010001000100010001000100E0 -:1009A000010001000100010001000100010001003F -:1009B000010001000100010001002A035400680049 -:1009C000650020005000720065006F006E00690035 -:1009D000630020004B006500790062006F00610039 -:1009E0007200640000002C034F0072007400680065 -:1009F0006F006C0069006E006500610072002000ED -:100A00004B006500790062006F00610072006400B5 -:100A1000730000000403090409025400030100A04C -:100A2000FA0904000001030101000921110100017C -:100A3000223F000705810308000A090401000103A1 -:100A4000010200092111010001224D000705820366 -:100A500008000A0904020001030000000921110135 -:100A600000012236000705830308000A1201100165 -:100A700000000008EDFE61600100010200010501B7 -:100A80000980A101850216010026B7001A01002A7B -:100A9000B700751095018100C0050C0901A1018501 -:100AA00003160100269C021A01002A9C027510956B -:100AB000018100C005010902A1010901A100050988 -:100AC000190129051500250195057501810295017A -:100AD000750381010501093009311581257F9502D2 -:100AE0007508810609381581257F950175088106ED -:100AF000050C0A38021581257F950175088106C00D -:100B0000C005010906A101050719E029E71500251F -:100B10000195087501810295017508810105081983 -:100B2000012905950575019102950175039101054E -:100B300007190029FF150025FF950675088100C0DB -:100B400011241FBECFEFDAE0DEBFCDBF04B603FE37 -:100B500024C08091A3039091A403A091A503B09118 -:100B6000A6038730904BA740B04BB9F41092A30373 -:100B70001092A4031092A5031092A60314BE84B78A -:100B8000877F84BF88E10FB6F8948093600010924D -:100B900060000FBEE0E0F8E3099512E0A0E0B1E0EC -:100BA000EAEEF2E602C005900D92A83AB107D9F735 -:100BB00013E0A8EAB2E001C01D92A33AB107E1F741 -:100BC0000E94FC150C9473310C940000279A2F9806 -:100BD0008FEF9FEF90938700809386008AE0809349 -:100BE000800089E1809381000C94F82C282F8111DA -:100BF0000BC080918000877F8093800010928D00D1 -:100C000010928C002F9808952F9880918000886012 -:100C100080938000233019F48FEF9FEF0FC083E0A3 -:100C200090E0821B9109880F991F2FEF3FEFA901D8 -:100C300002C0569547958A95E2F7CA0190938D00B8 -:100C400080938C000895CF93DF93EC010E949D2840 -:100C5000BE0180E090E0DF91CF910C9417250F93B7 -:100C60001F93462F50E04C30510508F098C0DC012E -:100C7000FA01EA5AFF4F12968C910C94373188236F -:100C800009F48DC000E010E0980140E064E070E0FD -:100C90008BEC91E00E94871281E090E00FC08823E6 -:100CA00009F47DC000E010E0980140E066E070E0EB -:100CB0008BE591E00E94871282E090E00E9423067B -:100CC0006EC0882309F46BC000E010E0980140E09A -:100CD00068E070E08BE891E00E94871284E090E089 -:100CE000EDCF882311F083E005C083E00CC088239A -:100CF00049F084E00E94942540E164E083E00E9492 -:100D0000ED0A4DC084E00E94B525F6CF882331F06E -:100D100085EE0E947E1C0E944F2D41C085EE0E94F0 -:100D2000461D3DC08823D9F10E941B0E38C0882380 -:100D3000B1F10E94140E00E010E0980140E064E080 -:100D400070E08BEE91E029C0882349F185E00E9494 -:100D5000B5250E943C0E23C0882309F100E010E075 -:100D6000980140E068E070E08BE191E00E9487121A -:100D700085E00E94942513C0882389F00E941A13ED -:100D800004C0882361F00E94251300E010E0980160 -:100D900040E068E070E08BE191E00E94871280E023 -:100DA00090E01F910F9108950F931F932FEF89EFFC -:100DB00090E0215080409040E1F700C0000000E04A -:100DC00010E0980140E064E070E08BEE91E00E945A -:100DD00087121F910F910895CF92DF92EF92FF92A9 -:100DE0000F931F93CF93DF93CDB7DEB7CC58D109C4 -:100DF0000FB6F894DEBF0FBECDBF2091630325FF71 -:100E0000C5C08C01FC01928180910201992309F4F3 -:100E100060C096E4E7E2F2E0DE01A95BBF4F01901B -:100E20000D929A95E1F7F8019081E0910001F0911F -:100E30000101E90FF11DEE0FFF1F27E430E02C0F39 -:100E40003D1FE20FF31F60817181680F711D8827BC -:100E500077FD8095982F0E94932E20E030E040E4AB -:100E600051E40E94F82D6B017C01F801218185E09D -:100E700090E0821B9109BC01882777FD8095982F0F -:100E80000E94932E9B01AC01C701B6010E94902DD8 -:100E90009B01AC0160E070E080E090E40E94AA2F2A -:100EA00020E030E04CE551E40E94472F4FE050E055 -:100EB000C457DF4F0FB6F894DEBF0FBECDBFDF9132 -:100EC000CF911F910F91FF90EF90DF90CF900C94F6 -:100ED000271296E4E7E2F2E0DE01119601900D920E -:100EE0009A95E1F7F8019081E0910001F0910101FC -:100EF000E90FF11DEE0FFF1F21E030E02C0F3D1F29 -:100F0000E20FF31F60817181680F711D882777FDE3 -:100F10008095982F0E94932E20E030E040E451E429 -:100F20000E94F82D6B017C01F801218185E090E0A1 -:100F3000821B9109BC01882777FD8095982F0E941C -:100F4000932E9B01AC01C701B6010E94902D9B011D -:100F5000AC0160E070E080E090E40E94AA2F20E005 -:100F600030E04CE551E40E94472FC457DF4F0FB6E5 -:100F7000F894DEBF0FBECDBFDF91CF911F910F91CF -:100F8000FF90EF90DF90CF900C946F0EC457DF4F1F -:100F90000FB6F894DEBF0FBECDBFDF91CF911F918A -:100FA0000F91FF90EF90DF90CF9008950F931F93D4 -:100FB00000E010E0980140E063E070E083E091E041 -:100FC0000E9487122FEF82E597E0215080409040E9 -:100FD000E1F700C000001F910F91089508950E944D -:100FE000E6056E9A769A0C94D4060C94EE070C944F -:100FF000EC060895880F991FFC01EE5BFF4F859169 -:1010000094910895880F991FFC01EE53FE4F85912E -:10101000949108950F931F93CF93DF93EC01811563 -:1010200020E49207A0F5C11580E3D80708F0E1C0DD -:10103000C83ED105D8F4C03ED10508F0EEC1C83A8B -:10104000D10578F4C53AD10508F074C0C130D10596 -:1010500009F46DC008F4DEC1C430D10508F0DDC16B -:10106000D9C1CB3BD10508F470C0D4C1C11590E201 -:10107000D90708F0B9C0C11521E0D20708F0CDC1E9 -:10108000C03FD10508F4C6C18E01106506C2C1304B -:1010900080E5D80709F4BDC068F5C13120E4D20766 -:1010A00009F4AEC050F4C03190E4D90708F0A5C0EF -:1010B000CF70DD278E01146DF0C1C33120E4D2075B -:1010C00009F4A4C008F49FC0C115D04509F0A2C11D -:1010D0000E945B210E943C0E0E94D6079FEF24E3F2 -:1010E0008CE0915020408040E1F700C000000E9459 -:1010F0002E28D3C1C11520E6D20730F4C11581E5F1 -:10110000D80708F48CC02DC1C11590E7D90708F4A1 -:1011100081C1C11520E8D20708F478C1C11580E962 -:10112000D80708F077C1DF708E01106AB6C101E000 -:1011300010E0B3C1C53AD10509F471C1C63AD10571 -:1011400009F070C102E810E4A8C1C83AD10509F459 -:101150006CC1C93AD10509F46BC1CA3AD10509F489 -:101160006AC1CB3AD10509F469C1CC3AD10509F479 -:1011700068C1CD3AD10509F467C1C03BD10509F476 -:1011800066C1CE3AD10509F465C1CF3AD10509F45B -:1011900064C1C13BD10509F463C1C23BD10509F467 -:1011A00062C1C33BD10509F461C1C43BD10509F457 -:1011B00060C1C53BD10509F45FC1C63BD10509F447 -:1011C0005EC1C73BD10509F45DC1C83BD10509F437 -:1011D0005CC1C93BD10509F45BC1CA3BD10509F427 -:1011E0005AC100E014E459C1CE019F700E94020868 -:1011F00055C1DD278E01106C50C100E011ED4DC1CD -:1012000000E010ED4AC100E012ED47C100E013ED2F -:1012100044C1809177038160809377033EC10E942F -:101220008A28811102C00E9466280E94A22890E0AC -:101230009093A2038093A103C23090E5D90721F4D3 -:101240008091A103816086C0C43020E5D20721F4DB -:101250008091A10382607EC0C63080E5D80721F46A -:101260008091A103846076C0C83090E5D90719F455 -:101270008091A10327C0CA3020E5D20721F48091D4 -:10128000A103806167C0CC3080E5D80721F480914C -:10129000A10380625FC0CE3090E5D90721F4809130 -:1012A000A103806457C0C03120E5D20721F48091AA -:1012B000A10380684FC0C23180E5D80729F480912E -:1012C000A1038460886046C0C33090E5D90721F44B -:1012D0008091A1038E7F3EC0C53020E5D20721F466 -:1012E0008091A1038D7F36C0C73080E5D80721F4F7 -:1012F0008091A1038B7F2EC0C93090E5D90719F4E6 -:101300008091A10326C0CB3020E5D20721F4809143 -:10131000A1038F7E1FC0CD3080E5D80721F48091D6 -:10132000A1038F7D17C0CF3090E5D90721F48091BC -:10133000A1038F7B0FC0C13120E5D20721F480913A -:10134000A1038F7707C0C331D04531F48091A10349 -:101350008B7F877F8093A1038091A1030E94A628A1 -:101360009CC08D2F99278F70992781309105D9F4D2 -:101370009E012370332702C0880F991F2A95E2F738 -:101380009C688E0144E0000F111F4A95E1F7002789 -:101390001370802B912B53E0CC0FDD1F5A95E1F792 -:1013A000C076DD272FC08230910531F4DC2FCC27A9 -:1013B0008E01016F106A71C08330910569F4CE010E -:1013C0008370992701E010E002C0000F111F8A9579 -:1013D000E2F7C8019C680FC0049709F05EC0CE0117 -:1013E0008370992701E010E002C0000F111F8A9559 -:1013F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D8 -:10140000C07ED7708C010C2B1D2B47C0DF708E0166 -:10141000106243C000E010E040C08E013EC001E811 -:1014200010E43BC003E810E438C002EE14E435C019 -:1014300009EE14E432C00AEE14E42FC005EB14E404 -:101440002CC006EB14E429C007EB14E426C00CEC16 -:1014500014E423C00DEC14E420C003E815E41DC01F -:101460000AE815E41AC002E915E417C004E915E416 -:1014700014C001E216E411C003E216E40EC004E257 -:1014800016E40BC005E216E408C006E216E405C047 -:1014900007E216E402C00AE216E4C801DF91CF9128 -:1014A0001F910F9108959CE0799FF00111249CE316 -:1014B000899FE00DF11D1124E60FF11DEE0FFF1FB6 -:1014C000EE53FE4F85919491803E9105E0F4803C6F -:1014D000910558F58133910509F46FC048F48932BC -:1014E000910509F463C08A32910509F46DC072C098 -:1014F00089339105E9F082389105D1F08533910562 -:1015000009F44DC067C0833E910581F138F4803EF7 -:101510009105B9F0823E9105D9F05CC0863E9105F7 -:1015200061F1873E9105A1F155C00E94FA07089527 -:101530002091A10320FD02C021FF4CC080EE90E06D -:1015400049C08091A10380FFF9CF89E390E042C0B8 -:101550008091A10382FF0EC08091A10384FF03C08C -:1015600080E090E037C083EE90E034C08091A1032A -:1015700082FFF2CF82EE90E02DC08091A10383FF25 -:101580000BC08091A10384FDEBCF87EE90E022C0D9 -:101590008091A10383FFF5CF86EE90E01BC0809180 -:1015A000A10385FF07C089E290E014C08091A103E8 -:1015B00085FFF9CF85E390E00DC08091A10386FF00 -:1015C00007C08AE290E006C08091A10386FFF9CFB0 -:1015D00081E390E00E940A080895CF92DF92EF9293 -:1015E000FF920F931F9301E010E020E030E06801CC -:1015F000790104C0CC0CDD1CEE1CFF1C8A95D2F7CF -:1016000004C0000F111F221F331F6A95D2F70C2947 -:101610001D292E293F29C0906303D0906403E090D8 -:101620006503F0906603C022D122E222F322842FC8 -:10163000C016D106E206F30641F41F910F91FF9008 -:10164000EF90DF90CF900C9494251F910F91FF9015 -:10165000EF90DF90CF900C94B52508950C942D0B4E -:101660005F926F927F928F929F92AF92BF92CF9232 -:10167000DF92EF92FF920F931F93CF93DF93CDB73B -:10168000DEB72A970FB6F894DEBF0FBECDBFCE01EE -:1016900001966C014E019BE0890E911C20E030E028 -:1016A00040E050E060E070E000E010E0E12CF12C60 -:1016B0006C2C5D2C8AE0782EAA24A394B12CEDE644 -:1016C000F2E0A62DB52D872D01900D928A95E1F7B8 -:1016D000F601819191916F01FC01E07FFF27E032DB -:1016E000F10559F48F709927F50102C0EE0FFF1F25 -:1016F0008A95E2F7EE2AFF2A37C0E033F10559F464 -:101700008F709927F50102C0EE0FFF1F8A95E2F74F -:101710000E2B1F2B29C0E034F10559F48F70992747 -:10172000F50102C0EE0FFF1F8A95E2F76E2B7F2BAB -:101730001BC0E035F10559F48F709927F50102C0FF -:10174000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A0 -:10175000F10551F48F709927F50102C0EE0FFF1FBC -:101760008A95E2F72E2B3F2BC814D90409F0A7CF96 -:1017700084B19E2D9095892384B985B1E82AE5B876 -:1017800087B1902F9095892387B988B1082B08B924 -:101790008AB1962F909589238AB98BB1682B6BB942 -:1017A0008DB1942F909589238DB98EB1482B4EB968 -:1017B00080B3922F9095892380BB81B3282B21BBC6 -:1017C0002A960FB6F894DEBF0FBECDBFDF91CF9142 -:1017D0001F910F91FF90EF90DF90CF90BF90AF904F -:1017E0009F908F907F906F905F9008955F926F921F -:1017F0007F928F929F92AF92BF92CF92DF92EF92A1 -:10180000FF920F931F93CF93DF93CDB7DEB7689707 -:101810000FB6F894DEBF0FBECDBF85B7806885BF19 -:1018200085B7806885BF0E94300BCE0101966C01A0 -:101830004E0199E1890E911C20E030E040E050E03B -:1018400060E070E000E010E0E12CF12C6C2C5D2CED -:1018500088E1782EAA24A394B12CE7E7F2E0A62D24 -:10186000B52D872D01900D928A95E1F7F6018191B2 -:1018700091916F01FC01E07FFF27E032F10559F4FF -:101880008F709927F50102C0EE0FFF1F8A95E2F7CE -:10189000EE2AFF2A37C0E033F10559F48F709927FB -:1018A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEA -:1018B00029C0E034F10559F48F709927F50102C071 -:1018C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D2 -:1018D000F10559F48F709927F50102C0EE0FFF1F33 -:1018E0008A95E2F74E2B5F2B0DC0E036F10551F4DF -:1018F0008F709927F50102C0EE0FFF1F8A95E2F75E -:101900002E2B3F2BC814D90409F0A7CF84B19E2DEC -:101910009095892384B985B1E82AE5B887B1902FDD -:101920009095892387B988B1082B08B98AB1962F79 -:10193000909589238AB98BB1682B6BB98DB1942F9F -:10194000909589238DB98EB1482B4EB980B3922FD3 -:101950009095892380BB81B3282B21BBE2EBF2E079 -:10196000A8EAB2E0119211921D921D9282E0EC3B26 -:10197000F807C1F768960FB6F894DEBF0FBECDBF6B -:10198000DF91CF911F910F91FF90EF90DF90CF905B -:10199000BF90AF909F908F907F906F905F900C94CE -:1019A000EF075F926F927F928F929F92AF92BF925A -:1019B000CF92DF92EF92FF920F931F93CF93DF931B -:1019C000CDB7DEB7A2970FB6F894DEBF0FBECDBF7E -:1019D0006E0149E1C40ED11C88EAA82E82E0B82E1F -:1019E00075019AE0592E460101E010E028E1622ECF -:1019F00035E0732EEDE6F2E0D401852D01900D92D5 -:101A00008A95E1F7D6018D919D916D019C01207F12 -:101A100033272032310591F424B18F709927F801D2 -:101A200002C0EE0FFF1F8A95E2F7CF01922F982B8D -:101A300094B995B18095892385B953C02033310578 -:101A400091F427B18F709927A80102C0440F551F48 -:101A50008A95E2F7CA01922F982B97B998B1809591 -:101A6000892388B93EC02034310591F42AB18F70A2 -:101A70009927D80102C0AA0FBB1F8A95E2F7CD01B2 -:101A8000922F982B9AB99BB1809589238BB929C045 -:101A90002035310591F42DB18F709927F80102C0DE -:101AA000EE0FFF1F8A95E2F7CF01922F982B9DB979 -:101AB0009EB1809589238EB914C02036310589F4F2 -:101AC00020B38F709927A80102C0440F551F8A9533 -:101AD000E2F7CA01922F982B90BB91B3809589238E -:101AE00081BB50EA5A95F1F7BE016F5F7F4F20E04E -:101AF00030E040E050E0E7E7F2E0DE011196862DAD -:101B000001900D928A95E1F7DB018D919D91BD01C8 -:101B1000FC01E07FFF27E032F10511F4E3B113C0CF -:101B2000E033F10511F4E6B10EC0E034F10511F433 -:101B3000E9B109C0E035F10511F4ECB104C0E036BB -:101B4000F105B9F4EFB1F0E08F70992702C0F59577 -:101B5000E7958A95E2F7E0FD08C0C801042E02C0AF -:101B6000880F991F0A94E2F702C080E090E0282BCA -:101B7000392B4F5F5F4F4C30510509F0BCCFF70157 -:101B8000808191818217930721F0318320837092A5 -:101B90000B020E94300BF2E0EF0EF11C42EBE41658 -:101BA00042E0F40609F026CF80910B028823C9F0A9 -:101BB000815080930B02882339F08FE99FE00197D1 -:101BC000F1F700C000000DC0E2EBF2E0D5018D910D -:101BD0009D915D0181939193B2EBAB16B2E0BB0690 -:101BE000A9F70E94F50781E0A2960FB6F894DEBF30 -:101BF0000FBECDBFDF91CF911F910F91FF90EF905E -:101C0000DF90CF90BF90AF909F908F907F906F901C -:101C10005F900895E82FF0E0EE0FFF1FEE54FD4FA8 -:101C2000808191810895089580918C0381608093D3 -:101C30008C030C94B82880918C038E7F80938C0346 -:101C40000C94B8280E948A28811102C00E9466283C -:101C50000E94B42880938C033E9A809171008D7FFE -:101C60008093710082E0809390008AE180939100DC -:101C700081E08093BE0208958091BE02811102C06E -:101C80000E94220E10920E0310920D03809171009B -:101C90008D7F80937100809190008F77809390006A -:101CA0001092D0021092CF021092070310920803F4 -:101CB0001092090310920A03109206031092050372 -:101CC000E5EEF2E0A5EDB2E01192119211921192BF -:101CD0001D921D9283E0E530F807B1F70895CF9289 -:101CE000DF92EF92FF920F931F93CF93DF93209198 -:101CF000CF02222309F484C06B017C018091BE02D3 -:101D0000811102C00E94220E05E013E0C7E0D0E07E -:101D1000A7019601F80192918291729162918F01CF -:101D20000E94F42D811131C0FE01EE0FFF1FEE0F56 -:101D3000FF1FEB51FD4F1082118212821382DE01D0 -:101D4000AA0FBB1FAB52BD4F11961C921E92C730FB -:101D5000D105E9F0219644815581668177814083E0 -:101D600051836283738314821582168217821296BE -:101D70008D919C91139711969C938E9313961C9220 -:101D80001E92129734961296E2CF219708F6809110 -:101D90000D0390910E03019797FD05C090930E03DC -:101DA00080930D0304C010920E0310920D038091D6 -:101DB0000D0390910E0320910B0330910C03281713 -:101DC000390724F010920C0310920B03892BC1F4F5 -:101DD000809171008D7F80937100809190008F774A -:101DE0008093900010920703109208031092090349 -:101DF00010920A0310920603109205031092CF026C -:101E0000DF91CF911F910F91FF90EF90DF90CF90D6 -:101E100008951F920F920FB60F9211244F925F9266 -:101E20006F927F928F929F92AF92BF92CF92DF92EA -:101E3000EF92FF922F933F934F935F936F937F9314 -:101E40008F939F93AF93BF93CF93DF93EF93FF93C2 -:101E50008091CF02882309F49BC1C0910D03D091DA -:101E60000E031C161D060CF093C14090BF0250904B -:101E7000C0026090C1027090C20220E030E0A9016F -:101E8000C301B2010E94432F18160CF065C0C13087 -:101E9000D10509F452C080910B0390910C03BE014F -:101EA0000E9423317C0190930C0380930B0380905C -:101EB000D1029090D202A090D302B090D40220E040 -:101EC00030E040E85FE3C501B4010E94902D6093CB -:101ED000D1027093D2028093D3029093D402F7017F -:101EE000EE0FFF1FEE0FFF1FEB51FD4FA3019201FD -:101EF00060817181828193810E94F82D20E030E021 -:101F000040E05EE30E94472F9B01AC01C501B40194 -:101F10000E94432F18168CF4C7010196BE010E943F -:101F2000233190930C0380930B031092D1021092F3 -:101F3000D2021092D3021092D402E0910B03F091DE -:101F40000C03EE0FFF1FEE0FFF1FEB51FD4F6081E3 -:101F5000718182819381D0C0C0900703D090080323 -:101F6000E0900903F0900A0320E030E0A901C701E6 -:101F7000B6010E94F42D2197882309F4A2C0FE0126 -:101F8000EE0FFF1FEE0FFF1FEB51FD4F8080918082 -:101F9000A280B380A5019401C701B6010E94F42D6F -:101FA00087FF31C0A501940160E070E08CED93ECF7 -:101FB0000E94F82D20E030E040E451E40E94F82D2A -:101FC00020E030E040E05FE30E94472F9B01AC013E -:101FD00060E070E080E090E40E94AA2F9B01AC01D9 -:101FE000C501B4010E94472F9B01AC01C701B60196 -:101FF0000E94F42D87FF07C0A701960160E070E002 -:102000008CED93E439C0A5019401C701B6010E948B -:10201000432F18160CF055C0A501940160E070E044 -:102020008CED93E40E94F82D20E030E040E451E490 -:102030000E94F82D20E030E040E05FE30E94472F4F -:102040009B01AC0160E070E080E090E40E94AA2F68 -:102050009B01AC01C501B4010E94472F9B01AC015B -:10206000C701B6010E94432F18165CF5A70196011F -:1020700060E070E08CED93EC0E94F82D20E030E001 -:1020800040E451E40E94F82D20E030E040E05FE3BE -:102090000E94472F9B01AC0160E070E080E090E47B -:1020A0000E94AA2F9B01AC01C701B6010E94472FD5 -:1020B00060930703709308038093090390930A03C6 -:1020C00013C0FE01EE0FFF1FEE0FFF1FEB51FD4F80 -:1020D00080819181A281B38180930703909308034B -:1020E000A0930903B0930A0360910703709108035A -:1020F0008091090390910A032091BC023091BD02A6 -:102100002F3F4FEF340731F02F5F3F4F3093BD0229 -:102110002093BC020E9430136B017C0120E034E26A -:1021200044EF51E40E94F42D87FF08C086EFC82ECB -:1021300088E2D82E84EFE82E81E4F82E20E030E00B -:1021400040E051E4C701B6010E94472F9B01AC015A -:1021500060E074E284E79BE40E94F82D6B017C014F -:102160000E94602E709397006093960020910C025D -:1021700030910D0240910E0250910F02C701B6013D -:102180000E94472F0E94602E7093990060939800E0 -:102190008091D002882309F433C1C090CB02D09043 -:1021A000CC02E090CD02F090CE0220E030E0A90118 -:1021B000C701B6010E94432F1816D4F58091BC02C6 -:1021C0009091BD028F3F2FEF920729F001969093D7 -:1021D000BD028093BC02C701B6010E94301320E00B -:1021E00030E040E051E40E94472F9B01AC0160E0E9 -:1021F00074E284E79BE40E94F82D6B017C010E944D -:10220000602E709397006093960020910C0230919D -:102210000D0240910E0250910F02C701B6010E94BB -:10222000472F0E94602E709399006093980008C019 -:1022300010929700109296001092990010929800B8 -:102240006091C5027091C6026F5F7F4F7093C602A6 -:102250006093C502209196003091970080E090E055 -:10226000232BF1F0C0919600D09197000E94912EFF -:102270006B017C01BE0180E090E00E94912E9B01E9 -:10228000AC016091C7027091C8028091C90290911F -:10229000CA020E94F82D20E03FEF4FE757E410C03C -:1022A0000E94912E6B017C0120E030EE4FEF54E450 -:1022B0006091C7027091C8028091C9029091CA02D0 -:1022C0000E94472F9B01AC01C701B6010E94432F1A -:1022D00087FD96C08091C3028F5F8093C30290E018 -:1022E000209188033091890382179307A0F0809191 -:1022F0009303882319F01092C3020DC080917100DE -:102300008D7F80937100809190008F7780939000F3 -:102310001092D0027DC08091C402C091C30281118D -:1023200028C0C0908D03D0908E03E0908F03F09072 -:10233000900320E030E0A901C701B6010E94432FBD -:102340001816BCF481E08093C4021092CB02109264 -:10235000CC021092CD021092CE02C092C702D0924F -:10236000C802E092C902F092CA02C150C093C302EF -:1023700043C01092C4021092BD021092BC02E091C0 -:102380008A03F0918B0348E0C49FE00DF11D1124F6 -:1023900080819181A281B3818093CB029093CC0202 -:1023A000A093CD02B093CE0220E030E040E85EE39F -:1023B00064817581868197810E94472F6B017C0122 -:1023C00020E030E048EC52E460911002709111027C -:1023D00080911202909113020E94F82D9B01AC0192 -:1023E000C701B6010E94472F6093C7027093C802CD -:1023F0008093C9029093CA021092C6021092C5023D -:1024000080918C0380FD04C01092D0021092CF0204 -:10241000FF91EF91DF91CF91BF91AF919F918F91FC -:102420007F916F915F914F913F912F91FF90EF902E -:10243000DF90CF90BF90AF909F908F907F906F90E4 -:102440005F904F900F900FBE0F901F901895CF92F6 -:10245000DF92EF92FF92CF93DF936B017C01EA0151 -:102460008091BE02811102C00E94220E80918C03D5 -:1024700080FF46C080910D0390910E0308970CF0E9 -:102480003FC0809171008D7F809371008091D00258 -:1024900081110E943C0E81E08093CF021092BD0218 -:1024A0001092BC0220E030E0A901C701B6010E94F1 -:1024B000432F1816DCF480910D0390910E03FC015C -:1024C000EE0FFF1FEE0FFF1FEB51FD4FC082D182B9 -:1024D000E282F382FC01EE0FFF1FEB52FD4FD1832E -:1024E000C083019690930E0380930D038091710039 -:1024F000826080937100809190008068809390004A -:10250000DF91CF91FF90EF90DF90CF9008958F9261 -:102510009F92AF92BF92CF92DF92EF92FF920F9372 -:102520001F93CF93DF93EC017B01D42E4801590117 -:102530008091BE02811102C00E94220E80918C0304 -:1025400080FF6BC0809171008D7F809371008091BE -:10255000CF0281110E943C0E81E08093D002D09383 -:102560008B03C0938A03F0928903E0928803D09290 -:10257000930380928D0390928E03A0928F03B0926A -:1025800090031092D1021092D2021092D3021092B4 -:10259000D4021092C30288819981AA81BB81809361 -:1025A000CB029093CC02A093CD02B093CE0220E058 -:1025B00030E040E85EE36C817D818E819F810E94E6 -:1025C000472F6B017C0120E030E048EC52E4609141 -:1025D00010027091110280911202909113020E94D8 -:1025E000F82D9B01AC01C701B6010E94472F6093F3 -:1025F000C7027093C8028093C9029093CA021092D6 -:10260000C6021092C50280917100826080937100B1 -:1026100080919000806880939000DF91CF911F910E -:102620000F91FF90EF90DF90CF90BF90AF909F9071 -:102630008F90089580910F0390E0019665E070E01F -:102640000E94233180930F03089580910F0390E03F -:10265000019765E070E00E94233180930F03089595 -:102660008F929F92AF92BF92CF92DF92EF92FF92A2 -:10267000CF93DF936B017C01C091BC02D091BD026E -:10268000BE0180E090E00E94912E4B015C01A70109 -:10269000960160E070E08CE594E40E94F82D9B01C7 -:1026A000AC01C501B4010E94472F0E94652E4091E4 -:1026B0000F03423009F45CC028F4442351F0413048 -:1026C000E9F0FBC0433009F481C0443009F4B4C0E0 -:1026D000F4C080E090E0A0E0BFE380930C02909310 -:1026E0000D02A0930E02B0930F021092BF0210923F -:1026F000C0021092C1021092C202DFC01092BF024B -:102700001092C0021092C1021092C202643171058F -:1027100040F46A307105E0F520E030E040E85EE327 -:102720003BC0693C710508F0C0C080E090E00E94A9 -:10273000912E20E030E040EA51E40E948F2D20E00D -:1027400030E044E353E40E94F82D9B01AC010E9469 -:10275000472F20E030E040E05EE30E94472F9B01DE -:10276000AC0160E070E080E09EE30E948F2D5BC0D2 -:102770001092BF021092C0021092C1021092C202C7 -:102780006432710578F4FB01EE59FF4F0C94373138 -:1027900020E030E040E05FE3C701B6010E94472F30 -:1027A0006B017C0180E090E0A0E0BEE380930C022E -:1027B00090930D02A0930E02B0930F027EC0A7016A -:1027C0009601C701B6010E94902DEACF1092BF0278 -:1027D0001092C0021092C1021092C2022AE0269FFB -:1027E000A001279F500D1124CA0168EB7BE00E94D5 -:1027F0000F31BC016C5D754077FF03C07195619529 -:102800007109882777FD8095982F0E94932E2EE3DB -:1028100033EC4EE259E30E94472F20E030E040ECD9 -:102820005EE30E94902D60930C0270930D028093E2 -:102830000E0290930F0241C01092BF021092C0028C -:102840001092C1021092C202CE0183709927892B87 -:10285000E1F0BE016170772780E090E00E94912E48 -:1028600020E030E040E05EE30E94472F20E030E0CF -:1028700040E45FE30E94902D60930C0270930D0280 -:1028800080930E0290930F020CC080E090E0A0E0D5 -:10289000BFE380930C0290930D02A0930E02B093BD -:1028A0000F02C770DD27CD2B41F410920C0210925D -:1028B0000D0210920E0210920F02C701B601DF91B5 -:1028C000CF91FF90EF90DF90CF90BF90AF909F900F -:1028D0008F900895809118030895CF93DF9300D0CF -:1028E0001F92CDB7DEB79C0180919803843019F513 -:1028F00093E099833B832A839093E9008FEF909133 -:10290000E800815095FD06C095ED9A95F1F700001D -:102910008111F5CF8091E80085FF0DC040E050E0C7 -:1029200063E070E0CE0101960E94A6168091E80057 -:102930008E778093E8000F900F900F90DF91CF91EA -:102940000895CF93DF9300D01F92CDB7DEB72091CB -:102950009803243021F522E029839B838A8383E036 -:102960008093E9008FEF9091E800815095FD06C0BB -:1029700095ED9A95F1F700008111F5CF8091E8006F -:1029800085FF0DC040E050E063E070E0CE010196AD -:102990000E94A6168091E8008E778093E8000F9041 -:1029A0000F900F90DF91CF910895209198032430DC -:1029B000F1F422E02093E9002FEF3091E80021505C -:1029C00035FD06C035ED3A95F1F700002111F5CF40 -:1029D0002091E80025FF0BC040E050E065E070E08A -:1029E0000E94A6168091E8008E778093E8000895F3 -:1029F000CF93DF9320919803243039F521E0209381 -:102A0000E9002FEF3091E800215035FD06C035ED8B -:102A10003A95F1F700002111F5CF2091E80025FF4C -:102A200014C0EC0140E050E068E070E00E94A6169F -:102A30008091E8008E778093E80088E0FE01A0E1B5 -:102A4000B3E001900D928A95E1F7DF91CF9108955F -:102A500080919703811109C00E943B180E94981829 -:102A60008091E20084608093E200089510929703C1 -:102A70000895089508950C94962742E061EC81E052 -:102A80000E94B51742E061EC82E00E94B51742E077 -:102A900061EC83E00C94B51780919A03833009F4BC -:102AA00053C030F4813071F0823009F48CC0089545 -:102AB0008A3009F478C08B3009F45EC0893009F09F -:102AC0009AC020C080919903813A09F094C0809106 -:102AD000E800877F8093E80080919D0390919E039A -:102AE000892B21F468E080E193E003C060E080E09E -:102AF00090E070E00E94F1168091E8008B7780935F -:102B0000E800089580919903813209F074C08091A2 -:102B10009D0390919E03892B09F06DC08091E80080 -:102B2000877F8093E8008091E80082FD05C0809156 -:102B300098038111F8CF5FC08091F1008093180352 -:102B40008091E8008B7753C080919903813A09F016 -:102B500052C080919D0390919E03892B09F04BC038 -:102B60008091E800877F8093E8008091E80080FFF3 -:102B7000FCCF80911E0236C0809199038132D9F535 -:102B800080919D0390919E03892BA9F58091E80087 -:102B9000877F8093E8000E94EA1780919B038093CF -:102BA0001E020C945B2180919903813221F5809162 -:102BB000E800877F8093E8000E94EA1780919C03D9 -:102BC00080931903089580919903813AA1F480912B -:102BD000E800877F8093E8008091E80080FFFCCFC9 -:102BE000809119038093F1008091E8008E778093A3 -:102BF000E8000C94EA17089584B7877F84BF88E1C2 -:102C00000FB6F89480936000109260000FBE90E0C1 -:102C100080E80FB6F89480936100909361000FBE36 -:102C20000E948D1B0E943B180E9498188091E20020 -:102C300084608093E20078940E941E1B0E948F1B88 -:102C400084E192E00E94391B80919803853069F4F9 -:102C50000E945027809196038823B1F30E947E271B -:102C6000882391F30E949016EFCF0E94971BECCF20 -:102C7000292F332723303105C9F064F42130310581 -:102C800081F02230310509F043C084E590E028E16D -:102C90003AE042C021323105F1F02232310541F1F2 -:102CA00037C082E190E02CE63AE036C099278130C7 -:102CB000910541F08230910541F0892B49F5E4E11D -:102CC000FAE005C0E6EEF9E002C0EAEBF9E0849133 -:102CD00090E09F0121C06330D8F4E62FF0E0EE0FC2 -:102CE000FF1FE856FD4F2081318189E090E014C03C -:102CF000633070F470E0FB01EE0FFF1FEE56FD4FE6 -:102D000020813181FB01E157FD4F808190E004C0BB -:102D100080E090E020E030E0FA01318320830895E4 -:102D200080E189BD82E189BD09B400FEFDCF8091BB -:102D3000D8008F7D8093D8008091E00082608093DE -:102D4000E0008091E00081FDFCCF0895CF92DF92FA -:102D5000EF92FF920F931F93CF93DF93EC018B01C0 -:102D60006A010E940918811133C0C114D10439F0DD -:102D7000F60180819181081B190BC80FD91FE12C26 -:102D8000F12C0115110519F18091E80085FD16C09F -:102D90008091E8008E778093E800C114D10449F057 -:102DA000F60180819181E80EF91EF182E08285E0D2 -:102DB0000FC00E940918882321F30AC089918093CB -:102DC000F10001501109FFEFEF1AFF0ADACF80E09E -:102DD000DF91CF911F910F91FF90EF90DF90CF90F7 -:102DE000089520919F033091A0032617370748F0DC -:102DF0006115710539F42091E8002E772093E800E1 -:102E000001C0B90140E061157105A9F12091980355 -:102E1000222309F443C0253009F442C02091E80080 -:102E200023FD40C02091E80022FD32C02091E8003F -:102E300020FFE9CF4091F3002091F20030E0342BE5 -:102E4000FC01CF016115710559F02830310540F4BE -:102E500081918093F100615071092F5F3F4FF1CF55 -:102E600041E02830310509F040E02091E8002E775C -:102E70002093E800C8CF4111C9CF0AC080919803C0 -:102E8000882361F0853061F08091E80083FD0AC0FD -:102E90008091E80082FFF2CF80E0089582E00895FB -:102EA00083E0089581E0089520919F033091A0036D -:102EB0002617370748F06115710539F42091E800AD -:102EC0002E772093E80001C0B901FC0120E06115D4 -:102ED000710591F180919803882309F440C08530F1 -:102EE00009F43FC08091E80083FD3DC08091E80077 -:102EF00082FD2FC08091E80080FFE9CF2091F30090 -:102F00008091F20090E0922B6115710559F08830A4 -:102F1000910540F424912093F1003196615071099C -:102F20000196F2CF21E0089709F020E08091E800B7 -:102F30008E778093E800CBCF2111CCCF0AC080914F -:102F40009803882361F0853061F08091E80083FD6B -:102F50000AC08091E80082FFF2CF80E0089582E00D -:102F6000089583E0089581E00895982F973058F5EB -:102F70009093E900981739F07091EC002091ED00E2 -:102F80005091F00003C0242F762F50E021FF19C08C -:102F90003091EB003E7F3093EB003091ED003D7FB0 -:102FA0003093ED003091EB0031603093EB00709383 -:102FB000EC002093ED005093F0002091EE0027FFED -:102FC00007C09F5FD3CF8F708093E90081E00895A1 -:102FD00080E008958091990387FF11C08091E800F7 -:102FE00082FD05C0809198038111F8CF11C08091B6 -:102FF000E8008B770BC080919803882349F080917B -:10300000E80080FFF8CF8091E8008E778093E80099 -:1030100008952091E4003091E50095E64091EC00A0 -:10302000842F817040FF22C08091E80080FD1CC089 -:1030300080919803882391F0853091F08091EB0086 -:1030400085FD10C04091E4005091E5004217530700 -:1030500029F39A01915011F784E0089582E00895D0 -:1030600083E0089581E0089580E008954091E800AC -:1030700042FFDECF08950E94A9180E94B118E0EE29 -:10308000F0E0808181608083E8EDF0E080818F77DF -:10309000808319BCA7EDB0E08C918E7F8C938081EA -:1030A0008F7E80831092970308950F931F93CF9381 -:1030B000DF930E94A9180E94B118C8EDD0E0888162 -:1030C0008F77888388818068888388818F7D8883D3 -:1030D00019BC1092980310929403109296031092C8 -:1030E000950300EE10E0F80180818B7F808388815A -:1030F0008160888342E060E080E00E94B517E1EEE5 -:10310000F0E080818E7F8083E2EEF0E0808181605C -:103110008083808188608083F80180818E7F8083B6 -:10312000888180618883DF91CF911F910F910895ED -:10313000E8EDF0E080818F7E8083E7EDF0E0808134 -:103140008160808384E082BF81E0809397030C9448 -:103150005518E8EDF0E080818E7F80831092E200C8 -:1031600008951092DA001092E10008951F920F92D4 -:103170000FB60F9211242F933F934F935F936F934A -:103180007F938F939F93AF93BF93EF93FF93809120 -:10319000E10082FF0BC08091E20082FF07C08091B6 -:1031A000E1008B7F8093E1000E941D1B8091DA007B -:1031B00080FF1FC08091D80080FF1BC08091DA0083 -:1031C0008E7F8093DA008091D90080FF0DC080E16E -:1031D00089BD82E189BD09B400FEFDCF81E0809305 -:1031E00098030E94281505C019BC109298030E94EC -:1031F00036158091E10080FF19C08091E20080FFC8 -:1032000015C08091E2008E7F8093E2008091E20001 -:1032100080618093E2008091D80080628093D80022 -:1032200019BC85E0809398030E943A158091E100D3 -:1032300084FF30C08091E20084FF2CC080E189BD12 -:1032400082E189BD09B400FEFDCF8091D8008F7D59 -:103250008093D8008091E1008F7E8093E10080917F -:10326000E2008F7E8093E2008091E2008160809393 -:10327000E20080919403882311F084E007C08091DC -:10328000E30087FD02C081E001C083E080939803E2 -:103290000E943B158091E10083FF29C08091E200EC -:1032A00083FF25C08091E100877F8093E10082E069 -:1032B00080939803109294038091E1008E7F809315 -:1032C000E1008091E2008E7F8093E2008091E20035 -:1032D00080618093E20042E060E080E00E94B517E8 -:1032E0008091F00088608093F0000E943915FF9172 -:1032F000EF91BF91AF919F918F917F916F915F916E -:103300004F913F912F910F900FBE0F901F901895E6 -:103310001F920F920FB60F9211242F933F934F934A -:103320005F936F937F938F939F93AF93BF93CF934D -:10333000DF93EF93FF93C091E900CF708091EC0091 -:10334000D82FD17080FDD0E81092E9008091F00074 -:10335000877F8093F00078940E94CC191092E90046 -:103360008091F00088608093F000CD2BCF70C093E7 -:10337000E900FF91EF91DF91CF91BF91AF919F91C4 -:103380008F917F916F915F914F913F912F910F900E -:103390000FBE0F901F9018951F93CF93DF93CDB75B -:1033A000DEB7AA970FB6F894DEBF0FBECDBFE9E92E -:1033B000F3E088E08E0F9091F10091938E13FBCF94 -:1033C0000E944C158091E80083FF1FC180919903F2 -:1033D00090919A03492F50E04A30510508F015C1E9 -:1033E000FA01EA57FF4F0C943731803881F0823868 -:1033F00009F00BC180919D038F708093E90080914B -:10340000EB0085FB882780F91092E90006C08091C7 -:10341000950390919603911182609091E800977FB7 -:103420009093E8008093F1001092F100C8C0282F1B -:103430002D7F09F0EAC0882319F0823061F0E5C0E1 -:1034400080919B03813009F0E0C0933009F080E067 -:10345000809396032BC080919B03811127C080919C -:103460009D038F7009F4D1C08093E9002091EB0097 -:1034700020FF1CC0933021F48091EB00806214C0C7 -:103480009091EB0090619093EB0021E030E0A90176 -:1034900002C0440F551F8A95E2F74093EA0010924C -:1034A000EA008091EB0088608093EB001092E900C5 -:1034B0008091E800877F86C08111A7C010919B038F -:1034C0001F778091E3008078812B8093E3008091C7 -:1034D000E800877F8093E8000E94EA178091E80067 -:1034E00080FFFCCF8091E30080688093E30011119E -:1034F00002C082E001C083E08093980386C08058B8 -:10350000823008F082C080919B0390919C038C3D97 -:1035100053E0950779F583E08A838AE289834FB780 -:10352000F894DE01139620E03EE051E2E32FF0E054 -:1035300050935700E49120FF03C0E295EF703F5F86 -:10354000EF708E2F90E0EA3010F0C79601C0C09661 -:103550008D939D932F5F243149F74FBF8091E800F1 -:10356000877F8093E8006AE270E0CE0101960E94B6 -:10357000F11614C0AE014F5F5F4F60919D030E9432 -:103580003816BC01009709F440C09091E800977F7D -:103590009093E80089819A810E9454178091E800F5 -:1035A0008B778093E80031C0803879F58091E8000E -:1035B000877F8093E800809194038093F10080914D -:1035C000E8008E778093E8000E94EA171EC0811100 -:1035D0001CC090919B039230C0F48091E800877FDB -:1035E0008093E800909394030E94EA1780919403DB -:1035F000811106C08091E30087FD02C081E001C017 -:1036000084E0809398030E943D158091E80083FF39 -:103610000AC08091E800877F8093E8008091EB00EA -:1036200080628093EB00AA960FB6F894DEBF0FBEBF -:10363000CDBFDF91CF911F9108950895CF938091D1 -:1036400098038823A1F0C091E900CF709091EC001D -:10365000892F817090FD80E8C82B1092E90080913D -:10366000E80083FD0E94CC19CF70C093E900CF9190 -:10367000089590931F0380931E030895E0911E0305 -:10368000F0911F03309721F00190F081E02D099413 -:1036900080E00895E0911E03F0911F03309721F020 -:1036A0000280F381E02D09940895E0911E03F091CA -:1036B0001F03309721F00480F581E02D09940895CF -:1036C00020911C0330911D038217930771F0909392 -:1036D0001D0380931C03E0911E03F0911F0330979C -:1036E00021F00680F781E02D0994089520911A03B6 -:1036F00030911B038217930771F090931B03809303 -:103700001A03E0911E03F0911F03309721F000840B -:10371000F185E02D0994089508950C948C1B0E9466 -:10372000CA270E94F60B0E9450280C94F82C4F9246 -:103730005F927F928F929F92AF92BF92CF92DF92D1 -:10374000EF92FF920F931F93CF93DF93CDB7DEB726 -:103750002A970FB6F894DEBF0FBECDBF0E94D10CE2 -:1037600091E2C92E93E0D92E00E010E0AA24A394A0 -:10377000B12C702E802F0E940A0E4C01F601419050 -:1037800051906F014826592641145104B1F40F5F3E -:103790001F4F0530110569F78FEF89838A831B82DC -:1037A0000E94D3278160782F9D838C8349815A8121 -:1037B0006B818D810E94501C3AC08091770381FDFE -:1037C0000E94130E20E030E07501022E02C0EE0CC4 -:1037D000FF1C0A94E2F7C70184219521892B09F186 -:1037E0002E837F828E209F2091E0892809F490E02B -:1037F00098870E94D3278160782F9A8789874E8186 -:103800005F8168858A850E94501C000F111FF80196 -:10381000EF5DFC4F80819181E826F926F182E082FC -:1038200006C02F5F3F4F2C30310571F6B0CF0E949C -:10383000372A109120030E943E1B1817D9F00E94CE -:103840003E1B809320032A960FB6F894DEBF0FBE6E -:10385000CDBFDF91CF911F910F91FF90EF90DF903F -:10386000CF90BF90AF909F908F907F905F904F9040 -:103870000C942E0B2A960FB6F894DEBF0FBECDBF68 -:10388000DF91CF911F910F91FF90EF90DF90CF903C -:10389000BF90AF909F908F907F905F904F900895D2 -:1038A000CF93DF93CDB7DEB72B970FB6F894DEBF7B -:1038B0000FBECDBF4F83588769877A878B87DE011C -:1038C000119686E0FD0111928A95E9F785E0FE01E7 -:1038D000379601900D928A95E1F749815A816B8163 -:1038E0007C818D819E810E94F5232B960FB6F894E2 -:1038F000DEBF0FBECDBFDF91CF910895CF93882358 -:1039000009F4C2C0C82F823859F40E943E1B81FDC1 -:10391000BBC089E30E949E260E94212789E30CC038 -:10392000833879F40E943E1B80FDAEC083E50E947F -:103930009E260E94212783E50E94BB26CF910C94EE -:103940002127843859F40E943E1B82FD9DC087E4E4 -:103950000E949E260E94212787E4EECF8CEF8C0FD9 -:10396000813A48F48C2F0E94602C81118DC08C2FDD -:103970000E949E26E3CF80E28C0F883048F4C77007 -:1039800081E001C0880FCA95EAF70E94DA26D6CFF7 -:103990008BE58C0F833078F4C53A29F0C63A31F0C4 -:1039A00083E890E005C081E890E002C082E890E002 -:1039B000CF910C94601B88E58C0F833108F064C0B4 -:1039C000C83A39F1C93A41F1CA3A49F1CB3A51F111 -:1039D000CC3A59F1CD3A61F1C03B69F1CE3A71F17F -:1039E000CF3A79F1C13B81F1C23B89F1C33B91F1FF -:1039F000C43B99F1C53BA1F1C63BA9F1C73BB1F16D -:103A0000C83BB9F1C93BC1F1CA3BC9F180E090E0C4 -:103A100038C082EE90E035C089EE90E032C08AEE88 -:103A200090E02FC085EB90E02CC086EB90E029C0A1 -:103A300087EB90E026C08CEC90E023C08DEC90E00A -:103A400020C083E891E01DC08AE891E01AC082E9B5 -:103A500091E017C084E991E014C081E292E011C0C6 -:103A600083E292E00EC084E292E00BC085E292E035 -:103A700008C086E292E005C087E292E002C08AE2D6 -:103A800092E0CF910C94761BCF910895882309F48E -:103A90004BC0823859F40E943E1B81FF45C089E328 -:103AA0000E949E260E94212789E30CC0833871F46E -:103AB0000E943E1B80FF38C083E50E949E260E9424 -:103AC000212783E50E94BB260C942127843859F4D2 -:103AD0000E943E1B82FF28C087E40E949E260E940F -:103AE000212787E4EFCF9CEF980F913A58F390E2AB -:103AF000980F983050F4877091E001C0990F8A9523 -:103B0000EAF7892F0E94E026DFCF9BE5980F9330DC -:103B100020F480E090E00C94601B885A833120F4FC -:103B200080E090E00C94761B0895882321F00E9499 -:103B3000DA260C9421270895882321F00E94E0269C -:103B40000C9421270895BF92CF92DF92EF92FF92BB -:103B50000F931F93CF93DF9300D000D000D0CDB749 -:103B6000DEB725E0FC01DE01119601900D922A9549 -:103B7000E1F7FC01D08011810281258122952F700F -:103B800043815481452B09F472C31F3F21F4FFEF99 -:103B9000DF1609F46CC37C012E830E94F707D982DB -:103BA0001A8369817A81802F0E949A26182FB92E54 -:103BB0000E944F260E9416252E81002319F00E9494 -:103BC000F7262E81EB2DE295EF70F0E0E057FF4FE6 -:103BD0000C9437318B2D807F9B2D9F70F92E88237D -:103BE00019F0F29480EFF822002389F0FF2009F405 -:103BF0007CC280E2810F883020F48F2D0E94DA266B -:103C000003C08F2D0E94EA260E9421276EC2812FB9 -:103C10000E94461DFF2009F42AC3105E8F2D183024 -:103C200018F40E94E02602C00E94F02626960FB6E5 -:103C3000F894DEBF0FBECDBFDF91CF911F910F91E2 -:103C4000FF90EF90DF90CF90BF900C9421278B2DA9 -:103C5000807F9B2D9F70803211F4892F03C0892FA4 -:103C60008295807F112319F0113011F12BC00023B0 -:103C7000A9F0222389F1213079F526960FB6F89420 -:103C8000DEBF0FBECDBFDF91CF911F910F91FF908F -:103C9000EF90DF90CF90BF900C940A27222319F069 -:103CA000213009F4E4C28E830E940D278E819BC1CE -:103CB000002321F0263008F0DAC20EC0253008F0CB -:103CC000D6C291C10023C9F0222331F0F7019581BA -:103CD00090FF0BC29F70958326960FB6F894DEBFB7 -:103CE0000FBECDBFDF91CF911F910F91FF90EF904D -:103CF000DF90CF90BF900C94951D222309F473C1DF -:103D000009C22B2D26952695237030E0211531050B -:103D100021F021303105D1F0AAC2002321F0812FFA -:103D20009B2D937002C080E090E026960FB6F89429 -:103D3000DEBF0FBECDBFDF91CF911F910F91FF90DE -:103D4000EF90DF90CF90BF900C94601B002321F088 -:103D5000812F9B2D937002C080E090E026960FB6D5 -:103D6000F894DEBF0FBECDBFDF91CF911F910F91B1 -:103D7000FF90EF90DF90CF90BF900C94761B812F37 -:103D8000002319F00E943F2902C00E94A72926960D -:103D90000FB6F894DEBF0FBECDBFDF91CF911F915C -:103DA0000F91FF90EF90DF90CF90BF900C942C2A52 -:103DB0008B2D837009F07BC0011159C2812F829530 -:103DC00086958770880F880F912F9F70C92ED12CF0 -:103DD000E12CF12C082E04C0CC0CDD1CEE1CFF1CC9 -:103DE0000A94D2F714FF12C04FE050E060E070E098 -:103DF00004C0440F551F661F771F8A95D2F7CB0169 -:103E0000BA01609570958095909503C060E070E070 -:103E1000CB012B2D269526952370422F50E0423062 -:103E20005105D9F04330510569F16C297D298E295E -:103E30009F294130510551F126960FB6F894DEBF07 -:103E40000FBECDBFDF91CF911F910F91FF90EF90EB -:103E5000DF90CF90BF900C943D256C297D298E2951 -:103E60009F2926960FB6F894DEBF0FBECDBFDF9117 -:103E7000CF911F910F91FF90EF90DF90CF90BF9067 -:103E80000C9459250E943D25C701B60126960FB610 -:103E9000F894DEBF0FBECDBFDF91CF911F910F9180 -:103EA000FF90EF90DF90CF90BF900C9421250023DE -:103EB00019F08B2D817001C08695882309F4D7C134 -:103EC000812F829586958770880F880F912F9F701C -:103ED000C92ED12CE12CF12C082E04C0CC0CDD1CF9 -:103EE000EE1CFF1C0A94D2F714FF12C04FE050E002 -:103EF00060E070E004C0440F551F661F771F8A956D -:103F0000D2F7CB01BA01609570958095909503C06A -:103F100060E070E0CB012B2D269526952370422F73 -:103F200050E042305105D9F04330510569F16C2918 -:103F30007D298E299F294130510551F126960FB6D2 -:103F4000F894DEBF0FBECDBFDF91CF911F910F91CF -:103F5000FF90EF90DF90CF90BF900C9417266C29C4 -:103F60007D298E299F2926960FB6F894DEBF0FBEB5 -:103F7000CDBFDF91CF911F910F91FF90EF90DF9018 -:103F8000CF90BF900C9433260E941726C701B6012C -:103F900026960FB6F894DEBF0FBECDBFDF91CF914E -:103FA0001F910F91FF90EF90DF90CF90BF900C94F6 -:103FB000FB25103F49F118F4103E48F491C0123F20 -:103FC00009F453C0E8F1133F09F464C089C01F70BD -:103FD0008B2D8F71002321F00E949425812F7CCEA0 -:103FE0000E94B525812F26960FB6F894DEBF0FBE2E -:103FF000CDBFDF91CF911F910F91FF90EF90DF9098 -:10400000CF90BF900C949C1D0023B1F0253008F098 -:104010002EC18B2D8F7126960FB6F894DEBF0FBE82 -:10402000CDBFDF91CF911F910F91FF90EF90DF9067 -:10403000CF90BF900C94DA25263008F018C1E9CF54 -:104040000023A9F08B2D8F7126960FB6F894DEBF52 -:104050000FBECDBFDF91CF911F910F91FF90EF90D9 -:10406000DF90CF90BF900C949425002359F38B2DB3 -:104070008F7126960FB6F894DEBF0FBECDBFDF91CD -:10408000CF911F910F91FF90EF90DF90CF90BF9055 -:104090000C94B525002399F08B2D8F7126960FB6C1 -:1040A000F894DEBF0FBECDBFDF91CF911F910F916E -:1040B000FF90EF90DF90CF90BF900C947F252696D5 +:1009700001002A0354006800650020005000720046 +:1009800065006F006E006900630020004B00650089 +:10099000790062006F0061007200640000002C03A7 +:1009A0004F007200740068006F006C0069006E00F8 +:1009B00065006100720020004B0065007900620054 +:1009C0006F006100720064007300000004030904FA +:1009D00009025400030100A0FA0904000001030108 +:1009E0000100092111010001223F000705810308D0 +:1009F000000A09040100010301020009211101009C +:100A000001224D000705820308000A0904020001C3 +:100A100003000000092111010001223600070583AF +:100A20000308000A1201100100000008EDFE6160D9 +:100A300001000102000105010980A10185021601E2 +:100A40000026B7001A01002AB70075109501810031 +:100A5000C0050C0901A1018503160100269C021A9C +:100A600001002A9C02751095018100C00501090250 +:100A7000A1010901A1000509190129051500250198 +:100A80009505750181029501750381010501093004 +:100A900009311581257F9502750881060938158170 +:100AA000257F950175088106050C0A3802158125F8 +:100AB0007F950175088106C0C005010906A10105E1 +:100AC0000719E029E71500250195087501810295B0 +:100AD0000175088101050819012905950575019120 +:100AE000029501750391010507190029FF150025DD +:100AF000FF950675088100C011241FBECFEFDAE014 +:100B0000DEBFCDBF04B603FE24C08091F3039091F5 +:100B1000F403A091F503B091F6038730904BA74002 +:100B2000B04BB9F41092F3031092F4031092F50352 +:100B30001092F60314BE84B7877F84BF88E10FB696 +:100B4000F89480936000109260000FBEE0E0F8E33C +:100B5000099512E0A0E0B1E0E8EAF3E602C00590F2 +:100B60000D92A63FB107D9F713E0A6EFB2E001C09E +:100B70001D92A33FB107E1F70E940D160C94D231EC +:100B80000C940000279A2F988FEF9FEF9093870087 +:100B9000809386008AE08093800089E180938100C1 +:100BA0000C94092D282F81110BC080918000877F24 +:100BB0008093800010928D0010928C002F980895E1 +:100BC0002F9880918000886080938000233019F4F2 +:100BD0008FEF9FEF0FC083E090E0821B9109880F99 +:100BE000991F2FEF3FEFA90102C0569547958A95AF +:100BF000E2F7CA0190938D0080938C000895CF9303 +:100C0000DF93EC010E94AE28BE0180E090E0DF910E +:100C1000CF910C9428250F931F93462F50E04C3012 +:100C2000510508F098C0DC01FA01EA5AFF4F12960C +:100C30008C910C949631882309F48DC000E010E06B +:100C4000980140E064E070E089EC91E00E9463125A +:100C500081E090E00FC0882309F47DC000E010E03F +:100C6000980140E066E070E089E591E00E9463123F +:100C700082E090E00E94FF056EC0882309F46BC0FB +:100C800000E010E0980140E068E070E089E891E061 +:100C90000E94631284E090E0EDCF882311F083E09E +:100CA00005C083E00CC0882349F084E00E94A5259C +:100CB00040E164E083E00E94C90A4DC084E00E94E4 +:100CC000C625F6CF882331F085EE0E948F1C0E9446 +:100CD000602D41C085EE0E94571D3DC08823D9F18B +:100CE0000E94F70D38C08823B1F10E94F00D00E09A +:100CF00010E0980140E064E070E089EE91E029C0E6 +:100D0000882349F185E00E94C6250E94180E23C061 +:100D1000882309F100E010E0980140E068E070E00D +:100D200089E191E00E94631285E00E94A52513C02D +:100D3000882389F00E94F61204C0882361F00E9483 +:100D4000011300E010E0980140E068E070E089E104 +:100D500091E00E94631280E090E01F910F9108954E +:100D60000F931F932FEF89EF90E021508040904028 +:100D7000E1F700C0000000E010E0980140E064E00E +:100D800070E089EE91E00E9463121F910F91089527 +:100D9000CF92DF92EF92FF920F931F93CF93DF9347 +:100DA000CDB7DEB7CC58D1090FB6F894DEBF0FBE71 +:100DB000CDBF2091B30325FFC5C08C01FC019281FA +:100DC00080910001992309F460C096E4E5E2F2E025 +:100DD000DE01A95BBF4F01900D929A95E1F7F801F2 +:100DE0009081E091F602F091F702E90FF11DEE0F0C +:100DF000FF1F27E430E02C0F3D1FE20FF31F60813F +:100E00007181680F711D882777FD8095982F0E944A +:100E1000A42E20E030E040E451E40E94092E6B0152 +:100E20007C01F801218185E090E0821B9109BC01E1 +:100E3000882777FD8095982F0E94A42E9B01AC01F6 +:100E4000C701B6010E94A12D9B01AC0160E070E0DA +:100E500080E090E40E94173020E030E04CE551E45F +:100E60000E94B42F4FE050E0C457DF4F0FB6F89404 +:100E7000DEBF0FBECDBFDF91CF911F910F91FF90CD +:100E8000EF90DF90CF900C94031296E4E5E2F2E04D +:100E9000DE01119601900D929A95E1F7F80190818B +:100EA000E091F602F091F702E90FF11DEE0FFF1F3E +:100EB00021E030E02C0F3D1FE20FF31F60817181B4 +:100EC000680F711D882777FD8095982F0E94A42EAA +:100ED00020E030E040E451E40E94092E6B017C01E7 +:100EE000F801218185E090E0821B9109BC018827EF +:100EF00077FD8095982F0E94A42E9B01AC01C7011D +:100F0000B6010E94A12D9B01AC0160E070E080E081 +:100F100090E40E94173020E030E04CE551E40E945C +:100F2000B42FC457DF4F0FB6F894DEBF0FBECDBF4E +:100F3000DF91CF911F910F91FF90EF90DF90CF90B5 +:100F40000C944B0EC457DF4F0FB6F894DEBF0FBEA4 +:100F5000CDBFDF91CF911F910F91FF90EF90DF9068 +:100F6000CF9008950F931F9300E010E0980140E0A8 +:100F700063E070E081E091E00E9463122FEF82E570 +:100F800097E0215080409040E1F700C000001F91A1 +:100F90000F91089508950E94C2056E9A769A0C9456 +:100FA000B0060C94CA070C94C8060895880F991FC0 +:100FB000FC01E650F040859194910895880F991FA7 +:100FC000FC01E658FE4F8591949108950F931F936D +:100FD000CF93DF93EC01811520E49207A0F5C115B2 +:100FE00080E3D80708F0E1C0C83ED105D8F4C03E80 +:100FF000D10508F0EEC1C83AD10578F4C53AD1055B +:1010000008F074C0C130D10509F46DC008F4DEC128 +:10101000C430D10508F0DDC1D9C1CB3BD10508F4FE +:1010200070C0D4C1C11590E2D90708F0B9C0C1158C +:1010300021E0D20708F0CDC1C03FD10508F4C6C1F8 +:101040008E01106506C2C13080E5D80709F4BDC025 +:1010500068F5C13120E4D20709F4AEC050F4C031C4 +:1010600090E4D90708F0A5C0CF70DD278E01146D7C +:10107000F0C1C33120E4D20709F4A4C008F49FC032 +:10108000C115D04509F0A2C10E946C210E94180E22 +:101090000E94B2079FEF24E38CE0915020408040F3 +:1010A000E1F700C000000E943F28D3C1C11520E62F +:1010B000D20730F4C11581E5D80708F48CC02DC1E2 +:1010C000C11590E7D90708F481C1C11520E8D207FE +:1010D00008F478C1C11580E9D80708F077C1DF703E +:1010E0008E01106AB6C101E010E0B3C1C53AD10566 +:1010F00009F471C1C63AD10509F070C102E810E4E3 +:10110000A8C1C83AD10509F46CC1C93AD10509F49E +:101110006BC1CA3AD10509F46AC1CB3AD10509F4C9 +:1011200069C1CC3AD10509F468C1CD3AD10509F4B9 +:1011300067C1C03BD10509F466C1CE3AD10509F4B7 +:1011400065C1CF3AD10509F464C1C13BD10509F4A9 +:1011500063C1C23BD10509F462C1C33BD10509F4A7 +:1011600061C1C43BD10509F460C1C53BD10509F497 +:101170005FC1C63BD10509F45EC1C73BD10509F487 +:101180005DC1C83BD10509F45CC1C93BD10509F477 +:101190005BC1CA3BD10509F45AC100E014E459C14E +:1011A000CE019F700E94DE0755C1DD278E01106CB5 +:1011B00050C100E011ED4DC100E010ED4AC100E06A +:1011C00012ED47C100E013ED44C18091C703816077 +:1011D0008093C7033EC10E949B28811102C00E94D8 +:1011E00077280E94B32890E09093F2038093F10354 +:1011F000C23090E5D90721F48091F103816086C067 +:10120000C43020E5D20721F48091F10382607EC0D2 +:10121000C63080E5D80721F48091F103846076C060 +:10122000C83090E5D90719F48091F10327C0CA307E +:1012300020E5D20721F48091F103806167C0CC30B2 +:1012400080E5D80721F48091F10380625FC0CE3041 +:1012500090E5D90721F48091F103806457C0C03133 +:1012600020E5D20721F48091F10380684FC0C2319C +:1012700080E5D80729F48091F1038460886046C036 +:10128000C33090E5D90721F48091F1038E7F3EC0F1 +:10129000C53020E5D20721F48091F1038D7F36C05F +:1012A000C73080E5D80721F48091F1038B7F2EC0F1 +:1012B000C93090E5D90719F48091F10326C0CB30ED +:1012C00020E5D20721F48091F1038F7E1FC0CD303D +:1012D00080E5D80721F48091F1038F7D17C0CF30CE +:1012E00090E5D90721F48091F1038F7B0FC0C131C4 +:1012F00020E5D20721F48091F1038F7707C0C33135 +:10130000D04531F48091F1038B7F877F8093F10387 +:101310008091F1030E94B7289CC08D2F99278F7070 +:10132000992781309105D9F49E012370332702C09B +:10133000880F991F2A95E2F79C688E0144E0000F00 +:10134000111F4A95E1F700271370802B912B53E072 +:10135000CC0FDD1F5A95E1F7C076DD272FC0823014 +:10136000910531F4DC2FCC278E01016F106A71C01A +:101370008330910569F4CE018370992701E010E074 +:1013800002C0000F111F8A95E2F7C8019C680FC0C8 +:10139000049709F05EC0CE018370992701E010E048 +:1013A00002C0000F111F8A95E2F7C8019A6823E076 +:1013B000CC0FDD1F2A95E1F7C07ED7708C010C2B76 +:1013C0001D2B47C0DF708E01106243C000E010E0AB +:1013D00040C08E013EC001E810E43BC003E810E4C9 +:1013E00038C002EE14E435C009EE14E432C00AEE4F +:1013F00014E42FC005EB14E42CC006EB14E429C060 +:1014000007EB14E426C00CEC14E423C00DEC14E448 +:1014100020C003E815E41DC00AE815E41AC002E97B +:1014200015E417C004E915E414C001E216E411C084 +:1014300003E216E40EC004E216E40BC005E216E473 +:1014400008C006E216E405C007E216E402C00AE29C +:1014500016E4C801DF91CF911F910F9108959CE090 +:10146000799FF00111249CE3899FE00DF11D112467 +:10147000E60FF11DEE0FFF1FE658FE4F8591949188 +:10148000803E9105E0F4803C910558F5813391054B +:1014900009F46FC048F48932910509F463C08A32B7 +:1014A000910509F46DC072C089339105E9F0823865 +:1014B0009105D1F08533910509F44DC067C0833E95 +:1014C000910581F138F4803E9105B9F0823E910595 +:1014D000D9F05CC0863E910561F1873E9105A1F18E +:1014E00055C00E94D60708952091F10320FD02C047 +:1014F00021FF4CC080EE90E049C08091F10380FF55 +:10150000F9CF89E390E042C08091F10382FF0EC0E1 +:101510008091F10384FF03C080E090E037C083EE48 +:1015200090E034C08091F10382FFF2CF82EE90E030 +:101530002DC08091F10383FF0BC08091F10384FDE6 +:10154000EBCF87EE90E022C08091F10383FFF5CFCF +:1015500086EE90E01BC08091F10385FF07C089E211 +:1015600090E014C08091F10385FFF9CF85E390E00E +:101570000DC08091F10386FF07C08AE290E006C0AB +:101580008091F10386FFF9CF81E390E00E94E607A6 +:101590000895CF92DF92EF92FF920F931F9301E095 +:1015A00010E020E030E06801790104C0CC0CDD1CC3 +:1015B000EE1CFF1C8A95D2F704C0000F111F221FDA +:1015C000331F6A95D2F70C291D292E293F29C09077 +:1015D000B303D090B403E090B503F090B603C022FB +:1015E000D122E222F322842FC016D106E206F306AE +:1015F00041F41F910F91FF90EF90DF90CF900C94EA +:10160000A5251F910F91FF90EF90DF90CF900C9444 +:10161000C62508950C94090B5F926F927F928F926A +:101620009F92AF92BF92CF92DF92EF92FF920F9371 +:101630001F93CF93DF93CDB7DEB72A970FB6F894F9 +:10164000DEBF0FBECDBFCE0101966C014E019BE007 +:10165000890E911C20E030E040E050E060E070E056 +:1016600000E010E0E12CF12C6C2C5D2C8AE0782E4F +:10167000AA24A394B12CEBE6F2E0A62DB52D872D7C +:1016800001900D928A95E1F7F601819191916F0198 +:10169000FC01E07FFF27E032F10559F48F709927B4 +:1016A000F50102C0EE0FFF1F8A95E2F7EE2AFF2A2E +:1016B00037C0E033F10559F48F709927F50102C066 +:1016C000EE0FFF1F8A95E2F70E2B1F2B29C0E03487 +:1016D000F10559F48F709927F50102C0EE0FFF1F35 +:1016E0008A95E2F76E2B7F2B1BC0E035F10559F48C +:1016F0008F709927F50102C0EE0FFF1F8A95E2F760 +:101700004E2B5F2B0DC0E036F10551F48F709927F9 +:10171000F50102C0EE0FFF1F8A95E2F72E2B3F2B3B +:10172000C814D90409F0A7CF84B19E2D90958923C0 +:1017300084B985B1E82AE5B887B1902F90958923BF +:1017400087B988B1082B08B98AB1962F909589235B +:101750008AB98BB1682B6BB98DB1942F9095892381 +:101760008DB98EB1482B4EB980B3922F90958923B5 +:1017700080BB81B3282B21BB2A960FB6F894DEBF1D +:101780000FBECDBFDF91CF911F910F91FF90EF90D2 +:10179000DF90CF90BF90AF909F908F907F906F9091 +:1017A0005F9008955F926F927F928F929F92AF9217 +:1017B000BF92CF92DF92EF92FF920F931F93CF933E +:1017C000DF93CDB7DEB768970FB6F894DEBF0FBED4 +:1017D000CDBF85B7806885BF85B7806885BF0E940B +:1017E0000C0BCE0101966C014E0199E1890E911C02 +:1017F00020E030E040E050E060E070E000E010E029 +:10180000E12CF12C6C2C5D2C88E1782EAA24A39479 +:10181000B12CE5E7F2E0A62DB52D872D01900D92B4 +:101820008A95E1F7F601819191916F01FC01E07FCA +:10183000FF27E032F10559F48F709927F50102C0B6 +:10184000EE0FFF1F8A95E2F7EE2AFF2A37C0E0333A +:10185000F10559F48F709927F50102C0EE0FFF1FB3 +:101860008A95E2F70E2B1F2B29C0E034F10559F4BD +:101870008F709927F50102C0EE0FFF1F8A95E2F7DE +:101880006E2B7F2B1BC0E035F10559F48F70992723 +:10189000F50102C0EE0FFF1F8A95E2F74E2B5F2B7A +:1018A0000DC0E036F10551F48F709927F50102C0A3 +:1018B000EE0FFF1F8A95E2F72E2B3F2BC814D90499 +:1018C00009F0A7CF84B19E2D9095892384B985B165 +:1018D000E82AE5B887B1902F9095892387B988B118 +:1018E000082B08B98AB1962F909589238AB98BB1B4 +:1018F000682B6BB98DB1942F909589238DB98EB1DA +:10190000482B4EB980B3922F9095892380BB81B329 +:10191000282B21BBE2E0F3E0A8EFB2E01192119294 +:101920001D921D9283E0EC30F807C1F768960FB660 +:10193000F894DEBF0FBECDBFDF91CF911F910F9105 +:10194000FF90EF90DF90CF90BF90AF909F908F90DF +:101950007F906F905F900C94CB075F926F927F9215 +:101960008F929F92AF92BF92CF92DF92EF92FF92AF +:101970000F931F93CF93DF93CDB7DEB7A2970FB628 +:10198000F894DEBF0FBECDBF6E0149E1C40ED11C7D +:1019900088EFA82E82E0B82E75019AE0592E4601F4 +:1019A00001E010E028E1622E35E0732EEBE6F2E074 +:1019B000D401852D01900D928A95E1F7D6018D9184 +:1019C0009D916D019C01207F33272032310591F4D8 +:1019D00024B18F709927F80102C0EE0FFF1F8A957E +:1019E000E2F7CF01922F982B94B995B18095892376 +:1019F00085B953C02033310591F427B18F709927F1 +:101A0000A80102C0440F551F8A95E2F7CA01922F20 +:101A1000982B97B998B18095892388B93EC0203416 +:101A2000310591F42AB18F709927D80102C0AA0F0D +:101A3000BB1F8A95E2F7CD01922F982B9AB99BB1E3 +:101A4000809589238BB929C02035310591F42DB1BA +:101A50008F709927F80102C0EE0FFF1F8A95E2F7F9 +:101A6000CF01922F982B9DB99EB1809589238EB975 +:101A700014C02036310589F420B38F709927A8014E +:101A800002C0440F551F8A95E2F7CA01922F982B86 +:101A900090BB91B38095892381BB50EA5A95F1F7A9 +:101AA000BE016F5F7F4F20E030E040E050E0E5E7AF +:101AB000F2E0DE011196862D01900D928A95E1F7F4 +:101AC000DB018D919D91BD01FC01E07FFF27E0329C +:101AD000F10511F4E3B113C0E033F10511F4E6B1FF +:101AE0000EC0E034F10511F4E9B109C0E035F105AB +:101AF00011F4ECB104C0E036F105B9F4EFB1F0E057 +:101B00008F70992702C0F595E7958A95E2F7E0FD79 +:101B100008C0C801042E02C0880F991F0A94E2F77A +:101B200002C080E090E0282B392B4F5F5F4F4C3094 +:101B3000510509F0BCCFF70180819181821793078D +:101B400021F031832083709209020E940C0BF2E095 +:101B5000EF0EF11C42E0E41643E0F40609F026CF54 +:101B6000809109028823C9F081508093090288235B +:101B700039F08FE99FE00197F1F700C000000DC038 +:101B8000E2E0F3E0D5018D919D915D018193919308 +:101B9000B2E0AB16B3E0BB06A9F70E94D10781E023 +:101BA000A2960FB6F894DEBF0FBECDBFDF91CF91E6 +:101BB0001F910F91FF90EF90DF90CF90BF90AF906B +:101BC0009F908F907F906F905F900895E82FF0E046 +:101BD000EE0FFF1FEE5FFC4F808191810895089505 +:101BE0008091DC0381608093DC030C94C928809190 +:101BF000DC038E7F8093DC030C94C9280E949B2811 +:101C0000811102C00E9477280E94C5288093DC03BE +:101C10003E9A809171008D7F8093710082E0809365 +:101C200090008AE18093910081E080930E030895F3 +:101C300080910E03811102C00E94FE0D10925E037E +:101C400010925D03809171008D7F8093710080916F +:101C500090008F77809390001092200310921F03C2 +:101C600010925703109258031092590310925A037E +:101C70001092560310925503E5E3F3E0A5E2B3E0BA +:101C800011921192119211921D921D9283E0E535ED +:101C9000F807B1F70895CF92DF92EF92FF920F937A +:101CA0001F93CF93DF9320911F03222309F484C055 +:101CB0006B017C0180910E03811102C00E94FE0D18 +:101CC00005E513E0C7E0D0E0A7019601F801929185 +:101CD0008291729162918F010E94052E811131C013 +:101CE000FE01EE0FFF1FEE0FFF1FEB5CFC4F10829B +:101CF000118212821382DE01AA0FBB1FAB5DBC4FA3 +:101D000011961C921E92C730D105E9F021964481AC +:101D10005581668177814083518362837383148206 +:101D200015821682178212968D919C9113971196A7 +:101D30009C938E9313961C921E9212973496129631 +:101D4000E2CF219708F680915D0390915E030197A1 +:101D500097FD05C090935E0380935D0304C01092CD +:101D60005E0310925D0380915D0390915E0320916C +:101D70005B0330915C032817390724F010925C0351 +:101D800010925B03892BC1F4809171008D7F809349 +:101D90007100809190008F7780939000109257038C +:101DA000109258031092590310925A03109256033E +:101DB0001092550310921F03DF91CF911F910F9145 +:101DC000FF90EF90DF90CF9008951F920F920FB683 +:101DD0000F9211244F925F926F927F928F929F92F7 +:101DE000AF92BF92CF92DF92EF92FF922F933F93E9 +:101DF0004F935F936F937F938F939F93AF93BF9313 +:101E0000CF93DF93EF93FF9380911F03882309F40F +:101E10009BC1C0915D03D0915E031C161D060CF0A2 +:101E200093C140900F035090100360901103709085 +:101E3000120320E030E0A901C301B2010E94B02FDB +:101E400018160CF065C0C130D10509F452C080915C +:101E50005B0390915C03BE010E9482317C019093F0 +:101E60005C0380935B038090210390902203A090F9 +:101E70002303B090240320E030E040E85FE3C50195 +:101E8000B4010E94A12D60932103709322038093DB +:101E9000230390932403F701EE0FFF1FEE0FFF1FA4 +:101EA000EB5CFC4FA301920160817181828193817F +:101EB0000E94092E20E030E040E05EE30E94B42F53 +:101EC0009B01AC01C501B4010E94B02F18168CF41F +:101ED000C7010196BE010E94823190935C038093FA +:101EE0005B0310922103109222031092230310929D +:101EF0002403E0915B03F0915C03EE0FFF1FEE0FF4 +:101F0000FF1FEB5CFC4F6081718182819381D0C0A7 +:101F1000C0905703D0905803E0905903F0905A03B3 +:101F200020E030E0A901C701B6010E94052E2197EB +:101F3000882309F4A2C0FE01EE0FFF1FEE0FFF1F62 +:101F4000EB5CFC4F80809180A280B380A50194015E +:101F5000C701B6010E94052E87FF31C0A50194017B +:101F600060E070E08CED93EC0E94092E20E030E000 +:101F700040E451E40E94092E20E030E040E05FE3BD +:101F80000E94B42F9B01AC0160E070E080E090E41F +:101F90000E9417309B01AC01C501B4010E94B42F0F +:101FA0009B01AC01C701B6010E94052E87FF07C047 +:101FB000A701960160E070E08CED93E439C0A501C3 +:101FC0009401C701B6010E94B02F18160CF055C03D +:101FD000A501940160E070E08CED93E40E94092E6D +:101FE00020E030E040E451E40E94092E20E030E09F +:101FF00040E05FE30E94B42F9B01AC0160E070E021 +:1020000080E090E40E9417309B01AC01C501B4014F +:102010000E94B42F9B01AC01C701B6010E94B02FF2 +:1020200018165CF5A701960160E070E08CED93EC6A +:102030000E94092E20E030E040E451E40E94092E85 +:1020400020E030E040E05FE30E94B42F9B01AC0150 +:1020500060E070E080E090E40E9417309B01AC01EA +:10206000C701B6010E94B42F6093570370935803C1 +:102070008093590390935A0313C0FE01EE0FFF1F84 +:10208000EE0FFF1FEB5CFC4F80819181A281B38139 +:102090008093570390935803A0935903B0935A0326 +:1020A00060915703709158038091590390915A039E +:1020B00020910C0330910D032F3F4FEF340731F087 +:1020C0002F5F3F4F30930D0320930C030E940C139E +:1020D0006B017C0120E034E244EF51E40E94052EC4 +:1020E00087FF08C086EFC82E88E2D82E84EFE82E3E +:1020F00081E4F82E20E030E040E051E4C701B60171 +:102100000E94B42F9B01AC0160E074E284E79BE481 +:102110000E94092E6B017C010E94712E7093970022 +:102120006093960020910A0230910B0240910C02BC +:1021300050910D02C701B6010E94B42F0E94712E6A +:10214000709399006093980080912003882309F48C +:1021500033C1C0901B03D0901C03E0901D03F0908E +:102160001E0320E030E0A901C701B6010E94B02F94 +:102170001816D4F580910C0390910D038F3F2FEF2B +:10218000920729F0019690930D0380930C03C701E9 +:10219000B6010E940C1320E030E040E051E40E94C0 +:1021A000B42F9B01AC0160E074E284E79BE40E94E1 +:1021B000092E6B017C010E94712E70939700609331 +:1021C000960020910A0230910B0240910C0250912E +:1021D0000D02C701B6010E94B42F0E94712E7093A8 +:1021E00099006093980008C0109297001092960092 +:1021F0001092990010929800609115037091160347 +:102200006F5F7F4F709316036093150320919600C4 +:102210003091970080E090E0232BF1F0C091960080 +:10222000D09197000E94A22E6B017C01BE0180E03C +:1022300090E00E94A22E9B01AC0160911703709167 +:1022400018038091190390911A030E94092E20E02F +:102250003FEF4FE757E410C00E94A22E6B017C01B4 +:1022600020E030EE4FEF54E46091170370911803B3 +:102270008091190390911A030E94B42F9B01AC0125 +:10228000C701B6010E94B02F87FD96C0809113034D +:102290008F5F8093130390E02091D8033091D9038E +:1022A00082179307A0F08091E303882319F010921E +:1022B00013030DC0809171008D7F80937100809118 +:1022C00090008F7780939000109220037DC08091C2 +:1022D0001403C0911303811128C0C090DD03D09076 +:1022E000DE03E090DF03F090E00320E030E0A9019E +:1022F000C701B6010E94B02F1816BCF481E080938C +:10230000140310921B0310921C0310921D031092D1 +:102310001E03C0921703D0921803E0921903F092A3 +:102320001A03C150C093130343C0109214031092B8 +:102330000D0310920C03E091DA03F091DB0348E007 +:10234000C49FE00DF11D112480819181A281B38190 +:1023500080931B0390931C03A0931D03B0931E0353 +:1023600020E030E040E85EE36481758186819781FA +:102370000E94B42F6B017C0120E030E048EC52E475 +:1023800060910E0270910F028091100290911102E3 +:102390000E94092E9B01AC01C701B6010E94B42F17 +:1023A00060931703709318038093190390931A0393 +:1023B00010921603109215038091DC0380FD04C077 +:1023C0001092200310921F03FF91EF91DF91CF91A4 +:1023D000BF91AF919F918F917F916F915F914F913D +:1023E0003F912F91FF90EF90DF90CF90BF90AF90F3 +:1023F0009F908F907F906F905F904F900F900FBE47 +:102400000F901F901895CF92DF92EF92FF92CF938B +:10241000DF936B017C01EA0180910E03811102C000 +:102420000E94FE0D8091DC0380FF46C080915D0319 +:1024300090915E0308970CF03FC0809171008D7FF2 +:10244000809371008091200381110E94180E81E019 +:1024500080931F0310920D0310920C0320E030E0D4 +:10246000A901C701B6010E94B02F1816DCF48091B3 +:102470005D0390915E03FC01EE0FFF1FEE0FFF1F47 +:10248000EB5CFC4FC082D182E282F382FC01EE0F52 +:10249000FF1FEB5DFC4FD183C083019690935E03D9 +:1024A00080935D03809171008260809371008091C0 +:1024B0009000806880939000DF91CF91FF90EF9023 +:1024C000DF90CF9008958F929F92AF92BF92CF925C +:1024D000DF92EF92FF920F931F93CF93DF93EC0164 +:1024E0007B01D42E4801590180910E03811102C055 +:1024F0000E94FE0D8091DC0380FF6BC08091710013 +:102500008D7F8093710080911F0381110E94180EAE +:1025100081E080932003D093DB03C093DA03F09231 +:10252000D903E092D803D092E3038092DD03909226 +:10253000DE03A092DF03B092E00310922103109219 +:102540002203109223031092240310921303888114 +:102550009981AA81BB8180931B0390931C03A09354 +:102560001D03B0931E0320E030E040E85EE36C8181 +:102570007D818E819F810E94B42F6B017C0120E0C0 +:1025800030E048EC52E460910E0270910F028091AD +:102590001002909111020E94092E9B01AC01C7010B +:1025A000B6010E94B42F60931703709318038093B1 +:1025B000190390931A031092160310921503809139 +:1025C0007100826080937100809190008068809398 +:1025D0009000DF91CF911F910F91FF90EF90DF90CE +:1025E000CF90BF90AF909F908F90089580915F03A0 +:1025F00090E0019666E070E00E94823180935F0374 +:10260000089580915F0390E0019766E070E00E947A +:10261000823180935F0308958F929F92AF92BF9211 +:10262000CF92DF92EF92FF920F931F93CF93DF939E +:102630006B017C01C0910C03D0910D03BE0180E0C1 +:1026400090E00E94A22E4B015C01A701960160E080 +:1026500070E08CE594E40E94092E9B01AC01C50159 +:10266000B4010E94B42F0E94762E20915F03233084 +:1026700009F473C028F4222351F02130E9F02CC171 +:10268000243009F4A0C0253009F4E0C025C180E061 +:1026900090E0A0E0BFE380930A0290930B02A09326 +:1026A0000C02B0930D0210920F03109210031092BF +:1026B00011031092120310C110920F031092100315 +:1026C00010921103109212036431710540F46A30C4 +:1026D000710560F520E030E040E85EE32BC0693C26 +:1026E000710508F0AAC080E090E00E94A22E20E0D0 +:1026F00030E040EA51E40E94A02D20E030E044E3C5 +:1027000053E40E94092E9B01AC010E94B42F20E0EB +:1027100030E040E05EE30E94B42F9B01AC0160E03A +:1027200070E080E09EE30E94A02D44C020E030E0F5 +:1027300040E05FE3C701B6010E94B42F6B017C014A +:1027400080E090E0A0E0BEE380930A0290930B0249 +:10275000A0930C02B0930D02BFC010920F03109211 +:10276000100310921103109212034AE0469F900149 +:10277000479F300D1124C90168EB7BE00E946E3148 +:10278000BC016C5D754077FF03C07195619571095F +:10279000882777FD8095982F0E94A42E2EE333EC96 +:1027A0004EE259E30E94B42F20E030E040EC5EE3BB +:1027B0000E94A12D60930A0270930B0280930C0279 +:1027C00090930D0289C010920F0310921003109283 +:1027D000110310921203CE0183709927892BE1F027 +:1027E000BE016170772780E090E00E94A22E20E079 +:1027F00030E040E05EE30E94B42F20E030E040E4AF +:102800005FE30E94A12D60930A0270930B028093F4 +:102810000C0290930D020CC080E090E0A0E0BFE3BA +:1028200080930A0290930B02A0930C02B0930D02C6 +:10283000C770DD27CD2B09F04FC010920A0210920D +:102840000B0210920C0210920D0246C010920F0360 +:1028500010921003109211031092120300E010E086 +:1028600020E03FE300930A0210930B0220930C0236 +:1028700030930D026739710578F180E090E00E9495 +:10288000A22E20E030E047E153E40E94A02D20E09A +:1028900030E04AE754E40E94092E20E030E048E4AA +:1028A00052E40E94B42F20E030E040EA51E40E945C +:1028B000E62E0E94712E660F771F660F771FFB01B1 +:1028C000E357FD4F2081318142815381C701B60119 +:1028D0000E94B42F6B017C01C701B601DF91CF913B +:1028E0001F910F91FF90EF90DF90CF90BF90AF902E +:1028F0009F908F900895809168030895CF93DF9300 +:1029000000D01F92CDB7DEB79C018091E8038430E0 +:1029100019F593E099833B832A839093E9008FEF25 +:102920009091E800815095FD06C095ED9A95F1F7DC +:1029300000008111F5CF8091E80085FF0DC040E0D7 +:1029400050E063E070E0CE0101960E94B7168091DE +:10295000E8008E778093E8000F900F900F90DF9142 +:10296000CF910895CF93DF9300D01F92CDB7DEB7FC +:102970002091E803243021F522E029839B838A8378 +:1029800083E08093E9008FEF9091E800815095FDFE +:1029900006C095ED9A95F1F700008111F5CF809171 +:1029A000E80085FF0DC040E050E063E070E0CE013C +:1029B00001960E94B7168091E8008E778093E80018 +:1029C0000F900F900F90DF91CF9108952091E80321 +:1029D0002430F1F422E02093E9002FEF3091E80059 +:1029E000215035FD06C035ED3A95F1F70000211173 +:1029F000F5CF2091E80025FF0BC040E050E065E0F6 +:102A000070E00E94B7168091E8008E778093E8000E +:102A10000895CF93DF932091E803243039F521E026 +:102A20002093E9002FEF3091E800215035FD06C0DA +:102A300035ED3A95F1F700002111F5CF2091E8002E +:102A400025FF14C0EC0140E050E068E070E00E9417 +:102A5000B7168091E8008E778093E80088E0FE0149 +:102A6000A0E6B3E001900D928A95E1F7DF91CF9156 +:102A700008958091E703811109C00E944C180E94BB +:102A8000A9188091E20084608093E200089510927A +:102A9000E7030895089508950C94A72742E061EC98 +:102AA00081E00E94C61742E061EC82E00E94C617F6 +:102AB00042E061EC83E00C94C6178091EA03833016 +:102AC00009F453C030F4813071F0823009F48CC0C5 +:102AD00008958A3009F478C08B3009F45EC08930DB +:102AE00009F09AC020C08091E903813A09F094C0AE +:102AF0008091E800877F8093E8008091ED039091BA +:102B0000EE03892B21F468E080E693E003C060E0E7 +:102B100080E090E070E00E9402178091E8008B77DF +:102B20008093E80008958091E903813209F074C030 +:102B30008091ED039091EE03892B09F06DC0809197 +:102B4000E800877F8093E8008091E80082FD05C05F +:102B50008091E8038111F8CF5FC08091F1008093EC +:102B600068038091E8008B7753C08091E903813A34 +:102B700009F052C08091ED039091EE03892B09F08A +:102B80004BC08091E800877F8093E8008091E80047 +:102B900080FFFCCF80911C0236C08091E903813216 +:102BA000D9F58091ED039091EE03892BA9F58091E1 +:102BB000E800877F8093E8000E94FB178091EB0379 +:102BC00080931C020C946C218091E903813221F5E1 +:102BD0008091E800877F8093E8000E94FB17809136 +:102BE000EC038093690308958091E903813AA1F48D +:102BF0008091E800877F8093E8008091E80080FF63 +:102C0000FCCF809169038093F1008091E8008E777A +:102C10008093E8000C94FB17089584B7877F84BFE6 +:102C200088E10FB6F89480936000109260000FBEA8 +:102C300090E080E80FB6F894809361009093610073 +:102C40000FBE0E949E1B0E944C180E94A9188091E2 +:102C5000E20084608093E20078940E942F1B0E941F +:102C6000A01B82E192E00E944A1B8091E80385301C +:102C700069F40E9461278091E6038823B1F30E94E2 +:102C80008F27882391F30E94A116EFCF0E94A81BE3 +:102C9000ECCF292F332723303105C9F064F42130DC +:102CA000310581F02230310509F043C084E590E020 +:102CB00020ED39E042C021323105F1F022323105F8 +:102CC00041F137C082E190E024E23AE036C0992732 +:102CD0008130910541F08230910541F0892B49F511 +:102CE000ECECF9E005C0EEE9F9E002C0E2E7F9E05A +:102CF000849190E09F0121C06330D8F4E62FF0E08A +:102D0000EE0FFF1FEA51FD4F2081318189E090E0F5 +:102D100014C0633070F470E0FB01EE0FFF1FE0524F +:102D2000FD4F20813181FB01E352FD4F808190E016 +:102D300004C080E090E020E030E0FA01318320839D +:102D4000089580E189BD82E189BD09B400FEFDCF0F +:102D50008091D8008F7D8093D8008091E0008260C0 +:102D60008093E0008091E00081FDFCCF0895CF9238 +:102D7000DF92EF92FF920F931F93CF93DF93EC01BB +:102D80008B016A010E941A18811133C0C114D10449 +:102D900039F0F60180819181081B190BC80FD91FEA +:102DA000E12CF12C0115110519F18091E80085FD48 +:102DB00016C08091E8008E778093E800C114D1049A +:102DC00049F0F60180819181E80EF91EF182E082DE +:102DD00085E00FC00E941A18882321F30AC0899148 +:102DE0008093F10001501109FFEFEF1AFF0ADACFCB +:102DF00080E0DF91CF911F910F91FF90EF90DF90D6 +:102E0000CF9008952091EF033091F00326173707F4 +:102E100048F06115710539F42091E8002E77209370 +:102E2000E80001C0B90140E061157105A9F12091E8 +:102E3000E803222309F443C0253009F442C020915D +:102E4000E80023FD40C02091E80022FD32C020911F +:102E5000E80020FFE9CF4091F3002091F20030E03C +:102E6000342BFC01CF016115710559F02830310573 +:102E700040F481918093F100615071092F5F3F4FC1 +:102E8000F1CF41E02830310509F040E02091E80021 +:102E90002E772093E800C8CF4111C9CF0AC0809196 +:102EA000E803882361F0853061F08091E80083FDBC +:102EB0000AC08091E80082FFF2CF80E0089582E0AE +:102EC000089583E0089581E008952091EF03309103 +:102ED000F0032617370748F06115710539F4209182 +:102EE000E8002E772093E80001C0B901FC0120E042 +:102EF0006115710591F18091E803882309F440C0C0 +:102F0000853009F43FC08091E80083FD3DC0809189 +:102F1000E80082FD2FC08091E80080FFE9CF20917A +:102F2000F3008091F20090E0922B6115710559F049 +:102F30008830910540F424912093F100319661503E +:102F400071090196F2CF21E0089709F020E0809105 +:102F5000E8008E778093E800CBCF2111CCCF0AC058 +:102F60008091E803882361F0853061F08091E8006A +:102F700083FD0AC08091E80082FFF2CF80E00895CF +:102F800082E0089583E0089581E00895982F9730B6 +:102F900058F59093E900981739F07091EC00209162 +:102FA000ED005091F00003C0242F762F50E021FF58 +:102FB00019C03091EB003E7F3093EB003091ED0073 +:102FC0003D7F3093ED003091EB0031603093EB00AA +:102FD0007093EC002093ED005093F0002091EE00F0 +:102FE00027FF07C09F5FD3CF8F708093E90081E0F8 +:102FF000089580E008958091E90387FF11C08091D2 +:10300000E80082FD05C08091E8038111F8CF11C06E +:103010008091E8008B770BC08091E803882349F00A +:103020008091E80080FFF8CF8091E8008E77809350 +:10303000E80008952091E4003091E50095E6409184 +:10304000EC00842F817040FF22C08091E80080FD59 +:103050001CC08091E803882391F0853091F0809125 +:10306000EB0085FD10C04091E4005091E50042174F +:10307000530729F39A01915011F784E0089582E0F3 +:10308000089583E0089581E0089580E008954091D7 +:10309000E80042FFDECF08950E94BA180E94C218CD +:1030A000E0EEF0E0808181608083E8EDF0E08081F7 +:1030B0008F77808319BCA7EDB0E08C918E7F8C93C5 +:1030C00080818F7E80831092E70308950F931F9372 +:1030D000CF93DF930E94BA180E94C218C8EDD0E0C7 +:1030E00088818F77888388818068888388818F7DB5 +:1030F000888319BC1092E8031092E4031092E6034F +:103100001092E50300EE10E0F80180818B7F808350 +:1031100088818160888342E060E080E00E94C61779 +:10312000E1EEF0E080818E7F8083E2EEF0E080814E +:1031300081608083808188608083F80180818E7FB8 +:103140008083888180618883DF91CF911F910F9167 +:103150000895E8EDF0E080818F7E8083E7EDF0E078 +:1031600080818160808384E082BF81E08093E70377 +:103170000C946618E8EDF0E080818E7F80831092D9 +:10318000E20008951092DA001092E10008951F9273 +:103190000F920FB60F9211242F933F934F935F938B +:1031A0006F937F938F939F93AF93BF93EF93FF930F +:1031B0008091E10082FF0BC08091E20082FF07C096 +:1031C0008091E1008B7F8093E1000E942E1B809113 +:1031D000DA0080FF1FC08091D80080FF1BC0809163 +:1031E000DA008E7F8093DA008091D90080FF0DC0D5 +:1031F00080E189BD82E189BD09B400FEFDCF81E097 +:103200008093E8030E94391505C019BC1092E803A9 +:103210000E9447158091E10080FF19C08091E20073 +:1032200080FF15C08091E2008E7F8093E200809144 +:10323000E20080618093E2008091D80080628093F8 +:10324000D80019BC85E08093E8030E944B1580915B +:10325000E10084FF30C08091E20084FF2CC080E157 +:1032600089BD82E189BD09B400FEFDCF8091D800FF +:103270008F7D8093D8008091E1008F7E8093E10064 +:103280008091E2008F7E8093E2008091E200816075 +:103290008093E2008091E403882311F084E007C06A +:1032A0008091E30087FD02C081E001C083E080934C +:1032B000E8030E944C158091E10083FF29C08091B2 +:1032C000E20083FF25C08091E100877F8093E100C9 +:1032D00082E08093E8031092E4038091E1008E7F06 +:1032E0008093E1008091E2008E7F8093E2008091E4 +:1032F000E20080618093E20042E060E080E00E94B2 +:10330000C6178091F00088608093F0000E944A15F3 +:10331000FF91EF91BF91AF919F918F917F916F91AD +:103320005F914F913F912F910F900FBE0F901F9083 +:1033300018951F920F920FB60F9211242F933F935F +:103340004F935F936F937F938F939F93AF93BF93AD +:10335000CF93DF93EF93FF93C091E900CF708091FB +:10336000EC00D82FD17080FDD0E81092E900809158 +:10337000F000877F8093F00078940E94DD1910920E +:10338000E9008091F00088608093F000CD2BCF7031 +:10339000C093E900FF91EF91DF91CF91BF91AF9181 +:1033A0009F918F917F916F915F914F913F912F915D +:1033B0000F900FBE0F901F9018951F93CF93DF9320 +:1033C000CDB7DEB7AA970FB6F894DEBF0FBECDBF5C +:1033D000E9EEF3E088E08E0F9091F10091938E1367 +:1033E000FBCF0E945D158091E80083FF1FC1809193 +:1033F000E9039091EA03492F50E04A30510508F063 +:1034000015C1FA01EE59FF4F0C949631803881F0C6 +:10341000823809F00BC18091ED038F708093E90031 +:103420008091EB0085FB882780F91092E90006C0A7 +:103430008091E5039091E603911182609091E800FC +:10344000977F9093E8008093F1001092F100C8C03C +:10345000282F2D7F09F0EAC0882319F0823061F00F +:10346000E5C08091EB03813009F0E0C0933009F0B2 +:1034700080E08093E6032BC08091EB03811127C08D +:103480008091ED038F7009F4D1C08093E900209101 +:10349000EB0020FF1CC0933021F48091EB00806290 +:1034A00014C09091EB0090619093EB0021E030E02C +:1034B000A90102C0440F551F8A95E2F74093EA0024 +:1034C0001092EA008091EB0088608093EB001092EC +:1034D000E9008091E800877F86C08111A7C0109124 +:1034E000EB031F778091E3008078812B8093E300CA +:1034F0008091E800877F8093E8000E94FB1780910D +:10350000E80080FFFCCF8091E30080688093E300B7 +:10351000111102C082E001C083E08093E80386C0FD +:103520008058823008F082C08091EB039091EC03C8 +:103530008C3D53E0950779F583E08A838AE289839D +:103540004FB7F894DE01139620E03EE051E2E32FFE +:10355000F0E050935700E49120FF03C0E295EF7034 +:103560003F5FEF708E2F90E0EA3010F0C79601C0F9 +:10357000C0968D939D932F5F243149F74FBF809163 +:10358000E800877F8093E8006AE270E0CE01019650 +:103590000E94021714C0AE014F5F5F4F6091ED03B0 +:1035A0000E944916BC01009709F440C09091E800C0 +:1035B000977F9093E80089819A810E946517809196 +:1035C000E8008B778093E80031C0803879F58091EE +:1035D000E800877F8093E8008091E4038093F10006 +:1035E0008091E8008E778093E8000E94FB171EC050 +:1035F00081111CC09091EB039230C0F48091E800DF +:10360000877F8093E8009093E4030E94FB178091EA +:10361000E403811106C08091E30087FD02C081E0D0 +:1036200001C084E08093E8030E944E158091E80079 +:1036300083FF0AC08091E800877F8093E800809133 +:10364000EB0080628093EB00AA960FB6F894DEBF81 +:103650000FBECDBFDF91CF911F9108950895CF93F5 +:103660008091E8038823A1F0C091E900CF70909188 +:10367000EC00892F817090FD80E8C82B1092E90042 +:103680008091E80083FD0E94DD19CF70C093E900AE +:10369000CF91089590936F0380936E030895E09106 +:1036A0006E03F0916F03309721F00190F081E02DCF +:1036B000099480E00895E0916E03F0916F033097D4 +:1036C00021F00280F381E02D09940895E0916E03CA +:1036D000F0916F03309721F00480F581E02D09947B +:1036E000089520916C0330916D038217930771F058 +:1036F00090936D0380936C03E0916E03F0916F03E0 +:10370000309721F00680F781E02D099408952091EB +:103710006A0330916B038217930771F090936B03E8 +:1037200080936A03E0916E03F0916F03309721F06C +:103730000084F185E02D0994089508950C949D1B53 +:103740000E94DB270E94D20B0E9461280C94092D55 +:103750004F925F927F928F929F92AF92BF92CF9241 +:10376000DF92EF92FF920F931F93CF93DF93CDB72A +:10377000DEB72A970FB6F894DEBF0FBECDBF0E940A +:10378000AD0C91E7C92E93E0D92E00E010E0AA24F9 +:10379000A394B12C702E802F0E94E60D4C01F601EF +:1037A000419051906F014826592641145104B1F4BB +:1037B0000F5F1F4F0530110569F78FEF89838A83EB +:1037C0001B820E94E4278160782F9D838C8349812E +:1037D0005A816B818D810E94611C3AC08091C70320 +:1037E00081FD0E94EF0D20E030E07501022E02C045 +:1037F000EE0CFF1C0A94E2F7C70184219521892B66 +:1038000009F12E837F828E209F2091E0892809F480 +:1038100090E098870E94E4278160782F9A878987B3 +:103820004E815F8168858A850E94611C000F111F8F +:10383000F801EF58FC4F80819181E826F926F1824A +:10384000E08206C02F5F3F4F2C30310571F6B0CFBC +:103850000E94482A109170030E944F1B1817D9F03C +:103860000E944F1B809370032A960FB6F894DEBF18 +:103870000FBECDBFDF91CF911F910F91FF90EF90C1 +:10388000DF90CF90BF90AF909F908F907F905F9090 +:103890004F900C940A0B2A960FB6F894DEBF0FBE19 +:1038A000CDBFDF91CF911F910F91FF90EF90DF90EF +:1038B000CF90BF90AF909F908F907F905F904F90F0 +:1038C0000895CF93DF93CDB7DEB72B970FB6F8945B +:1038D000DEBF0FBECDBF4F83588769877A878B873E +:1038E000DE01119686E0FD0111928A95E9F785E0E7 +:1038F000FE01379601900D928A95E1F749815A8130 +:103900006B817C818D819E810E9406242B960FB64F +:10391000F894DEBF0FBECDBFDF91CF910895CF9356 +:10392000882309F4C2C0C82F823859F40E944F1B63 +:1039300081FDBBC089E30E94AF260E94322789E344 +:103940000CC0833879F40E944F1B80FDAEC083E524 +:103950000E94AF260E94322783E50E94CC26CF9199 +:103960000C943227843859F40E944F1B82FD9DC06D +:1039700087E40E94AF260E94322787E4EECF8CEFC7 +:103980008C0F813A48F48C2F0E94712C81118DC0CC +:103990008C2F0E94AF26E3CF80E28C0F883048F452 +:1039A000C77081E001C0880FCA95EAF70E94EB2634 +:1039B000D6CF8BE58C0F833078F4C53A29F0C63A20 +:1039C00031F083E890E005C081E890E002C082E831 +:1039D00090E0CF910C94711B88E58C0F833108F037 +:1039E00064C0C83A39F1C93A41F1CA3A49F1CB3A0F +:1039F00051F1CC3A59F1CD3A61F1C03B69F1CE3A7F +:103A000071F1CF3A79F1C13B81F1C23B89F1C33BFE +:103A100091F1C43B99F1C53BA1F1C63BA9F1C73B6C +:103A2000B1F1C83BB9F1C93BC1F1CA3BC9F180E072 +:103A300090E038C082EE90E035C089EE90E032C070 +:103A40008AEE90E02FC085EB90E02CC086EB90E0F2 +:103A500029C087EB90E026C08CEC90E023C08DEC71 +:103A600090E020C083E891E01DC08AE891E01AC090 +:103A700082E991E017C084E991E014C081E292E00C +:103A800011C083E292E00EC084E292E00BC085E2B6 +:103A900092E008C086E292E005C087E292E002C0B0 +:103AA0008AE292E0CF910C94871BCF9108958823EE +:103AB00009F44BC0823859F40E944F1B81FF45C066 +:103AC00089E30E94AF260E94322789E30CC0833825 +:103AD00071F40E944F1B80FF38C083E50E94AF261F +:103AE0000E94322783E50E94CC260C94322784382A +:103AF00059F40E944F1B82FF28C087E40E94AF2622 +:103B00000E94322787E4EFCF9CEF980F913A58F349 +:103B100090E2980F983050F4877091E001C0990FAF +:103B20008A95EAF7892F0E94F126DFCF9BE5980F4F +:103B3000933020F480E090E00C94711B885A83311C +:103B400020F480E090E00C94871B0895882321F0F6 +:103B50000E94EB260C9432270895882321F00E94BE +:103B6000F1260C9432270895BF92CF92DF92EF9204 +:103B7000FF920F931F93CF93DF9300D000D000D01C +:103B8000CDB7DEB725E0FC01DE01119601900D9264 +:103B90002A95E1F7FC01D0801181028125812295CF +:103BA0002F7043815481452B09F472C31F3F21F4C8 +:103BB000FFEFDF1609F46CC37C012E830E94D3074C +:103BC000D9821A8369817A81802F0E94AB26182FAF +:103BD000B92E0E9460260E9427252E81002319F00D +:103BE0000E9408272E81EB2DE295EF70F0E0E4595A +:103BF000FF4F0C9496318B2D807F9B2D9F70F92E5B +:103C0000882319F0F29480EFF822002389F0FF2036 +:103C100009F47CC280E2810F883020F48F2D0E944D +:103C2000EB2603C08F2D0E94FB260E9432276EC216 +:103C3000812F0E94571DFF2009F42AC3105E8F2D8B +:103C4000183018F40E94F12602C00E94012726961F +:103C50000FB6F894DEBF0FBECDBFDF91CF911F919D +:103C60000F91FF90EF90DF90CF90BF900C94322790 +:103C70008B2D807F9B2D9F70803211F4892F03C084 +:103C8000892F8295807F112319F0113011F12BC0FB +:103C90000023A9F0222389F1213079F526960FB669 +:103CA000F894DEBF0FBECDBFDF91CF911F910F9172 +:103CB000FF90EF90DF90CF90BF900C941B272223B2 +:103CC00019F0213009F4E4C28E830E941E278E81F0 +:103CD0009BC1002321F0263008F0DAC20EC0253047 +:103CE00008F0D6C291C10023C9F0222331F0F701B8 +:103CF000958190FF0BC29F70958326960FB6F8941E +:103D0000DEBF0FBECDBFDF91CF911F910F91FF900E +:103D1000EF90DF90CF90BF900C94A61D222309F462 +:103D200073C109C22B2D26952695237030E02115ED +:103D3000310521F021303105D1F0AAC2002321F054 +:103D4000812F9B2D937002C080E090E026960FB6E5 +:103D5000F894DEBF0FBECDBFDF91CF911F910F91C1 +:103D6000FF90EF90DF90CF90BF900C94711B0023D9 +:103D700021F0812F9B2D937002C080E090E0269669 +:103D80000FB6F894DEBF0FBECDBFDF91CF911F916C +:103D90000F91FF90EF90DF90CF90BF900C94871B16 +:103DA000812F002319F00E94502902C00E94B829D7 +:103DB00026960FB6F894DEBF0FBECDBFDF91CF9130 +:103DC0001F910F91FF90EF90DF90CF90BF900C94D8 +:103DD0003D2A8B2D837009F07BC0011159C2812FC0 +:103DE000829586958770880F880F912F9F70C92EB6 +:103DF000D12CE12CF12C082E04C0CC0CDD1CEE1CC7 +:103E0000FF1C0A94D2F714FF12C04FE050E060E0AC +:103E100070E004C0440F551F661F771F8A95D2F7C4 +:103E2000CB01BA01609570958095909503C060E0D4 +:103E300070E0CB012B2D269526952370422F50E064 +:103E400042305105D9F04330510569F16C297D2983 +:103E50008E299F294130510551F126960FB6F894CD +:103E6000DEBF0FBECDBFDF91CF911F910F91FF90AD +:103E7000EF90DF90CF90BF900C944E256C297D2958 +:103E80008E299F2926960FB6F894DEBF0FBECDBFB0 +:103E9000DF91CF911F910F91FF90EF90DF90CF9026 +:103EA000BF900C946A250E944E25C701B601269644 +:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B +:103EC0000F91FF90EF90DF90CF90BF900C94322530 +:103ED000002319F08B2D817001C08695882309F489 +:103EE000D7C1812F829586958770880F880F912F73 +:103EF0009F70C92ED12CE12CF12C082E04C0CC0CC3 +:103F0000DD1CEE1CFF1C0A94D2F714FF12C04FE018 +:103F100050E060E070E004C0440F551F661F771F3B +:103F20008A95D2F7CB01BA016095709580959095EE +:103F300003C060E070E0CB012B2D26952695237001 +:103F4000422F50E042305105D9F04330510569F11C +:103F50006C297D298E299F294130510551F12696E2 +:103F60000FB6F894DEBF0FBECDBFDF91CF911F918A +:103F70000F91FF90EF90DF90CF90BF900C94282688 +:103F80006C297D298E299F2926960FB6F894DEBFCD +:103F90000FBECDBFDF91CF911F910F91FF90EF909A +:103FA000DF90CF90BF900C9444260E942826C70132 +:103FB000B60126960FB6F894DEBF0FBECDBFDF91D7 +:103FC000CF911F910F91FF90EF90DF90CF90BF9016 +:103FD0000C940C26103F49F118F4103E48F491C09F +:103FE000123F09F453C0E8F1133F09F464C089C0DB +:103FF0001F708B2D8F71002321F00E94A525812F2A +:104000007CCE0E94C625812F26960FB6F894DEBF7F +:104010000FBECDBFDF91CF911F910F91FF90EF9019 +:10402000DF90CF90BF900C94AD1D0023B1F02530F0 +:1040300008F02EC18B2D8F7126960FB6F894DEBF37 +:104040000FBECDBFDF91CF911F910F91FF90EF90E9 +:10405000DF90CF90BF900C94EB25263008F018C16C +:10406000E9CF0023A9F08B2D8F7126960FB6F89417 +:10407000DEBF0FBECDBFDF91CF911F910F91FF909B +:10408000EF90DF90CF90BF900C94A525002359F3BB +:104090008B2D8F7126960FB6F894DEBF0FBECDBF65 +:1040A000DF91CF911F910F91FF90EF90DF90CF9014 +:1040B000BF900C94C625002399F08B2D8F71269606 :1040C0000FB6F894DEBF0FBECDBFDF91CF911F9129 -:1040D0000F91FF90EF90DF90CF90BF900C947525DB -:1040E0000023A9F0222309F4ADCF812F26960FB625 -:1040F000F894DEBF0FBECDBFDF91CF911F910F911E -:10410000FF90EF90DF90CF90BF900C947E1C222305 -:1041100009F4ADCF812F26960FB6F894DEBF0FBEFF -:10412000CDBFDF91CF911F910F91FF90EF90DF9066 -:10413000CF90BF900C94461D4B2D4F70612FC7013F -:104140000E942F0626960FB6F894DEBF0FBECDBF95 -:10415000DF91CF911F910F91FF90EF90DF90CF9063 -:10416000BF900C949924011182C09B2D9F70492F00 -:1041700050E04230510509F443C0C4F441155105E3 -:1041800071F14130510509F072C026960FB6F894CE -:10419000DEBF0FBECDBFDF91CF911F910F91FF907A -:1041A000EF90DF90CF90BF900C94202D43305105BD -:1041B000C1F14430510509F05AC0812F26960FB63F -:1041C000F894DEBF0FBECDBFDF91CF911F910F914D -:1041D000FF90EF90DF90CF90BF900C94722D2696B9 +:1040D0000F91FF90EF90DF90CF90BF900C949025C0 +:1040E00026960FB6F894DEBF0FBECDBFDF91CF91FD +:1040F0001F910F91FF90EF90DF90CF90BF900C94A5 +:1041000086250023A9F0222309F4ADCF812F26961E +:104110000FB6F894DEBF0FBECDBFDF91CF911F91D8 +:104120000F91FF90EF90DF90CF90BF900C948F1C79 +:10413000222309F4ADCF812F26960FB6F894DEBF67 +:104140000FBECDBFDF91CF911F910F91FF90EF90E8 +:10415000DF90CF90BF900C94571D4B2D4F70612F67 +:10416000C7010E940B0626960FB6F894DEBF0FBE5D +:10417000CDBFDF91CF911F910F91FF90EF90DF9016 +:10418000CF90BF900C94AA24011182C09B2D9F70E8 +:10419000492F50E04230510509F443C0C4F44115A1 +:1041A000510571F14130510509F072C026960FB6E4 +:1041B000F894DEBF0FBECDBFDF91CF911F910F915D +:1041C000FF90EF90DF90CF90BF900C94312D433053 +:1041D0005105C1F14430510509F05AC0812F26968E :1041E0000FB6F894DEBF0FBECDBFDF91CF911F9108 -:1041F0000F91FF90EF90DF90CF90BF900C94092D1E +:1041F0000F91FF90EF90DF90CF90BF900C94832DA4 :1042000026960FB6F894DEBF0FBECDBFDF91CF91DB :104210001F910F91FF90EF90DF90CF90BF900C9483 -:104220003C2D26960FB6F894DEBF0FBECDBFDF91B2 +:104220001A2D26960FB6F894DEBF0FBECDBFDF91D4 :10423000CF911F910F91FF90EF90DF90CF90BF90A3 -:104240000C944F2D4B2D4F70612FC70126960FB642 -:10425000F894DEBF0FBECDBFDF91CF911F910F91BC -:10426000FF90EF90DF90CF90BF900C94F9072696C7 +:104240000C944D2D26960FB6F894DEBF0FBECDBF51 +:10425000DF91CF911F910F91FF90EF90DF90CF9062 +:10426000BF900C94602D4B2D4F70612FC701269687 :104270000FB6F894DEBF0FBECDBFDF91CF911F9177 -:104280000F91FF90EF90DF90CF90BF9008950E9424 -:10429000F7260E9407270E94CC260E9421270E9411 -:1042A000DD2A0E942C2A80E090E00E94601B80E0C2 -:1042B00090E00C94761B0E94E7260C9447210E9404 -:1042C0008F26292F22952F7030E02C3031054CF4A9 -:1042D0002A3031056CF4225031092230310588F43E -:1042E00007C02C30310549F02F30310531F009C0BD -:1042F000803E48F0803F29F406C093FB882780F970 -:10430000089580E0089581E00895CF93DF9300D071 -:1043100000D01F92CDB7DEB70F900F900F900F9087 -:104320000F90DF91CF910895CF93DF9300D000D00D -:1043300000D0CDB7DEB726960FB6F894DEBF0FBE1D -:10434000CDBFDF91CF9108951F93CF93DF93C0919D -:104350002B0316E080912C03C81799F0D0E01C9F26 -:10436000F0011D9FF00D1124E35DFC4F4081518150 -:1043700062817381848195810E9494212196C77006 -:10438000E9CFDF91CF911F91089540915D03509146 -:104390005E0360915F03709160038091610390916F -:1043A00062030C9494218091620382958F7009F0CE -:1043B00054C080915F03882309F44FC080912B0380 -:1043C000A0912C0360915D0370915E0340916003A6 -:1043D00050916103B6E08A1709F43FC090E041159F -:1043E0005105C1F17F3F11F46F3FA1F1B89FF0017A -:1043F000B99FF00D1124E35DFC4F218172132AC097 -:104400002081621327C02281211124C0238134819D -:104410002417350710F421503109241B350B283C93 -:104420003105C0F4209162032F7020612093620354 -:1044300026E0289FF001299FF00D1124EE5CFC4F2F -:1044400080818F70806180838DE593E00E94A31D41 -:104450000C94A42101968770BECF0895CF92DF926D -:10446000EF92FF920F931F93CF93DF93CDB7DEB7F9 -:1044700062970FB6F894DEBF0FBECDBF8C0185E00A -:10448000F801DE011D9601900D928A95E1F7D801A1 -:104490004C9111965C91119712966C91129713960C -:1044A000CD90DC90149730915D0370915E03809104 -:1044B000600390916103009709F46BC17F3F19F489 -:1044C0003F3F09F466C1E0905F03EE2009F4C0C0ED -:1044D00020916203C816D90628F0F601E81BF90BF3 -:1044E000CF0104C0809590958C0D9D1DFF24F39401 -:1044F000883C910578F0F12C207F09F0C6C07C2D16 -:10450000D98AC88A89890E9485218DE593E00E9415 -:10451000A31DB1C0822F807F09F046C0751314C05F -:10452000341312C0611110C02F70206120936203F8 -:104530000E94C5218DE593E00E94A31D8091620336 -:10454000D80115968C932EC0CD2819F15F3F11F438 -:104550004F3FF9F0F62E61111CC080912B03209182 -:104560002C0336E0821709F45AC090E0389FF0011E -:10457000399FF00D1124E35DFC4F7181571306C084 -:104580007081471303C07281711103C00196877057 -:10459000E9CFF62E662309F418C180916203816089 -:1045A00080936203F12C11C1751308C0341306C047 -:1045B000611104C080916203D801C3C04D875E873A -:1045C0008D859E856A8B0E945F216A898823E1F12F -:1045D0006623D1F120916203822F82958F7090E043 -:1045E000029774F080915D0390915E0398878F83AA -:1045F0001986DB86CA862C87CE0107960E94A31DEA -:1046000086E0F801ADE5B3E001900D928A95E1F7FF -:104610000E94D3210E94C521FF24F394D6C04D8768 -:104620005E878D859E850E948F26292F22952F706B -:1046300030E0223031050CF0BCC09F7009F0B6C0EC -:10464000805E883008F4C1C0C8010E94A31DE4CF79 -:10465000C816D90608F453C0F601E81BF90BCF01C0 -:10466000883C910508F450C0F12C7C2DD98AC88A69 -:1046700089890E948521EDE5F3E086E0DF011D9246 -:104680008A95E9F70E94C521A0C0751314C03413A0 -:1046900012C0611110C080916203F8018583C801C6 -:1046A0000E94A31D86E0EDE5F3E0DF011D928A95EF -:1046B000E9F7FE2C8AC04D875E878D859E856A8BC3 -:1046C0000E945F216A89882309F4BECF662309F41A -:1046D000BBCF20916203822F82958F7090E002976A -:1046E0000CF48ECF80915D0390915E039A83898351 -:1046F0001B82DD82CC822E83CE0101967FCF8095F6 -:1047000090958C0D9D1DACCFF62E662309F49CCFA1 -:1047100075132EC034132CC02091620320FD1FC0DE -:10472000822F82958F70D9F0D80115962C9315970A -:104730008F3049F08F5F982F9295907F822F8F70E6 -:10474000892B15968C93C8010E94A31D86E0F80161 -:10475000ADE5B3E001900D928A95E1F793CF86E045 -:10476000F801ADE5B3E001900D928A95E1F72DC017 -:104770004D875E878D859E850E945F21811140CF88 -:1047800080916203816080936203C8010E94A31D2F -:104790001CC0662309F458CF4D875E878D859E85A2 -:1047A0000E945F21882309F44FCF2ACF811148CF7F -:1047B0000CC0243031050CF047CF9F7009F440CF76 -:1047C000F8019581907F09F03BCF8F2D62960FB64F -:1047D000F894DEBF0FBECDBFDF91CF911F910F9137 -:1047E000FF90EF90DF90CF9008951F93CF93DF93CA -:1047F000CDB7DEB72C970FB6F894DEBF0FBECDBF96 -:104800004F83588769877A878B879C87CE01079665 -:104810000E942E22882369F08F8198852A853B8506 -:10482000232BF1F19F3F09F063C08F3F09F060C077 -:1048300037C086E0FE013796DE01119601900D9299 -:104840008A95E1F76F817885EA85FB85309741F19C -:104850007F3F11F46F3F21F120912C0330E0C9011B -:1048600001968770992740912B0350E08417950794 -:1048700009F447C069837A83FD83EC8396E0929FB5 -:10488000D001939FB00D1124A35DBC4FFE01319662 -:1048900001900D929A95E1F780932C030E94A42138 -:1048A00016E080912B0390912C038917C1F1189F7A -:1048B000C0011124835D9C4F0E942E22882379F130 -:1048C000E0912B031E9FF0011124E35DFC4F40811A -:1048D000518162817381848195810E9494218091AC -:1048E0002B0390E001968770992780932B03D9CFF3 -:1048F0004F81588569857A858B859C850E94942196 -:10490000CFCF0E945B2110922C0310922B03EDE578 -:10491000F3E086E0DF011D928A95E9F7C1CF2C967E -:104920000FB6F894DEBF0FBECDBFDF91CF911F91C0 -:104930000895EF92FF920F931F93CF93DF938C0113 -:10494000009709F46CC0F12CEE24E394E801219661 -:10495000F8018491843740F4843008F051C08130EC -:1049600081F0823019F15BC0853709F444C0A8F1A9 -:104970009CE7980F903708F052C08F770E94461D31 -:1049800041C00E5F1F4FFE01C49180E28C0F883042 -:1049900048F4C7708E2D01C0880FCA95EAF70E94AF -:1049A000FA2614C08C2F0E947E1C2DC00E5F1F4F54 -:1049B000FE01C49180E28C0F883058F4C7708E2DB0 -:1049C00001C0880FCA95EAF70E9400270E9421279C -:1049D0001AC08C2F0E94461D16C00E5F1F4FFE018D -:1049E000C491CC2381F08FE99FE00197F1F700C0DB -:1049F0000000C150F6CF0E5F1F4FFE01F49003C0C0 -:104A00000E947E1C8E018F2D882309F49FCFEFE931 -:104A1000FFE03197F1F700C000008150F5CFDF9142 -:104A2000CF911F910F91FF90EF900895089560939B -:104A30006703709368038093690390936A030C94EF -:104A400047210F931F9300916703109168032091F2 -:104A5000690330916A03DC01CB01802B912BA22BDF -:104A6000B32B8093670390936803A0936903B0937B -:104A70006A031F910F910C9447210F931F9300918C -:104A80006703109168032091690330916A03DC0188 -:104A9000CB0180239123A223B323809367039093B8 -:104AA0006803A0936903B0936A031F910F910C945C -:104AB00047210F931F930091670310916803209182 -:104AC000690330916A03DC01CB0180279127A2277B -:104AD000B3278093670390936803A0936903B0930F -:104AE0006A031F910F910C94472110926303109257 -:104AF000640310926503109266030C94472141E011 -:104B000050E060E070E004C0440F551F661F771F3F -:104B10008A95D2F7409363035093640360936503CF -:104B2000709366030C94472141E050E060E070E030 -:104B300004C0440F551F661F771F8A95D2F78091D6 -:104B4000630390916403A0916503B0916603482BC1 -:104B5000592B6A2B7B2B4093630350936403609320 -:104B60006503709366030C94472141E050E060E0D8 -:104B700070E004C0440F551F661F771F8A95D2F757 -:104B80004095509560957095809163039091640372 -:104B9000A0916503B0916603482359236A237B23C0 -:104BA00040936303509364036093650370936603BB -:104BB0000C94472141E050E060E070E004C0440FF5 -:104BC000551F661F771F8A95D2F7809163039091D6 -:104BD0006403A0916503B0916603482759276A27AB -:104BE0007B27409363035093640360936503709342 -:104BF00066030C9447210F931F9300916303109158 -:104C000064032091650330916603DC01CB01802BA6 -:104C1000912BA22BB32B8093630390936403A093F7 -:104C20006503B09366031F910F910C9447210F9376 -:104C30001F930091630310916403209165033091E9 -:104C40006603DC01CB0180239123A223B32380934D -:104C5000630390936403A0936503B09366031F916D -:104C60000F910C9447210F931F93009163031091B0 -:104C700064032091650330916603DC01CB0180273A -:104C80009127A227B3278093630390936403A09393 -:104C90006503B09366031F910F910C94472108950B -:104CA000CF92DF92EF92FF920F931F93CF93DF93F8 -:104CB0008C01C0906703D0906803E0906903F09086 -:104CC0006A038091630390916403A0916503B0919E -:104CD0006603C82AD92AEA2AFB2ACFE1D0E0D70105 -:104CE000C6010C2E04C0B695A795979587950A9492 -:104CF000D2F780FF06C0B8018C2F0E94530A01979B -:104D000021F4219760F780E001C08C2FDF91CF91D3 -:104D10001F910F91FF90EF90DF90CF900895CF9368 -:104D2000DF93EC010E945026BE010E94530ADF91DE -:104D3000CF910895CB010E948F26089520911F02E4 -:104D400030912002F90132969FEF40E051915817BF -:104D500089F09F3F19F4511101C0942F4F5F4630E5 -:104D6000A9F79F3F39F0F901E90FF11D97FDFA9579 -:104D700082830895089520911F0230912002F90145 -:104D80003296285F3F4F9081981301C01082319670 -:104D9000E217F307C1F7089581E090E0E0911F0268 -:104DA000F0912002E80FF91F1082019688309105DA -:104DB000A9F7089590917603892B8093760308953F -:104DC00080959091760389238093760308951092BD -:104DD0007603089590917503892B80937503089548 -:104DE000809590917503892380937503089510929F -:104DF0007503089590917403892B8093740308952B -:104E00008095909174038923809374030895109280 -:104E10007403089580936B03089510926B030895B3 -:104E200080911F0290912002FC0131969C01285F25 -:104E30003F4F80E0919191118F5FE217F307D1F717 -:104E40000895E0911F02F091200280917603808303 -:104E5000E0911F02F0912002908180917503892BCF -:104E60008083E0911F02F091200290818091740371 -:104E7000892B808380916B03882361F0E0911F026E -:104E8000F09120029081892B80830E94102781114C -:104E900010926B0380911F02909120020C944A1B88 -:104EA00080919803843039F11092780320E488E1EE -:104EB00090E00FB6F894A895809360000FBE209301 -:104EC000600080E00E94F60580E00E942E0B83B710 -:104ED000817F846083BF83B7816083BF7894889526 -:104EE00083B78E7F83BF88E10FB6F894809360000C -:104EF000109260000FBE089508950895CF9380E04A -:104F00000E94F6050E947C270E94D10C0E947D27FA -:104F1000C0E08C2F0E940A0E892B29F4CF5FC53088 -:104F2000C1F780E001C081E0CF9108950E945B212C -:104F300080E00E94F6050E94F82C0E943E1B0C9413 -:104F40002E0B1F920F920FB60F9211248F939F93E7 -:104F5000AF93BF9380917803811113C0809179033F -:104F600090917A03A0917B03B0917C034196A11D9F -:104F7000B11D8093790390937A03A0937B03B09340 -:104F80007C03BF91AF919F918F910F900FBE0F90B7 -:104F90001F90189582E084BD93E095BD9AEF97BD70 -:104FA00080936E0008952FB7F894809179039091C3 -:104FB0007A03A0917B03B0917C032FBF0895CF9219 -:104FC000DF92EF92FF920F931F932FB7F8944091C7 -:104FD000790350917A0360917B0370917C032FBF1A -:104FE0006A017B01EE24FF248C0120E030E0C01632 -:104FF000D106E206F30610F4415051099A01281B2C -:10500000390BC9011F910F91FF90EF90DF90CF9066 -:1050100008951F920F920FB60F9211248F939F93B2 -:10502000AF93BF938091790390917A03A0917B0312 -:10503000B0917C030196A11DB11D809379039093DB -:105040007A03A0937B03B0937C03BF91AF919F91B0 -:105050008F910F900FBE0F901F9018950E943B18D4 -:10506000F8942FEF87EA91E6215080409040E1F7D5 -:1050700000C0000087E090EBDC018093A3039093D5 -:10508000A403A093A503B093A6039CE088E10FB608 -:10509000F894A895809360000FBE90936000FFCFB6 -:1050A0000E948A28811102C00E9466280E949528C9 -:1050B000809377030E94A2288093A1030E949928DD -:1050C000682F70E080E090E00C9417256DEE7EEF85 -:1050D00080E090E00E945D3160E082E090E00E941C -:1050E0004B3160E083E090E00E944B3160E084E06F -:1050F00090E00E944B3160E085E090E00E944B31EF -:1051000060E086E090E00E944B316FEF87E090E036 -:105110000C944B3180E090E00E94453121E08D3EBF -:105120009E4F09F020E0822F089582E090E00C94D9 -:105130003D3183E090E00C943D31682F83E090E0B6 -:105140000C944B3184E090E00C943D31682F84E066 -:1051500090E00C944B3186E090E00C943D31682F48 -:1051600086E090E00C944B3187E090E00C943D3168 -:10517000682F87E090E00C944B3180917F0380FF93 -:105180000BC06091240285E0689FB00111247595E1 -:105190006795759567952BC081FF09C060912402C2 -:1051A00085E0689FB00111247595679520C082FF46 -:1051B00007C06091240285E0689FB001112417C0E8 -:1051C000909180039923D1F060912302961788F77C -:1051D0002091240285E0289F90011124929FA00134 -:1051E000939F500D112470E0CA010E942331603852 -:1051F000710540F46115710539F002C065E070E099 -:10520000862F08958FE7089581E0089580917F03A8 -:1052100080FF08C06091220270E0759567957595D2 -:10522000679521C081FF06C06091220270E07595EC -:10523000679519C082FF04C06091220270E010C01F -:10524000909180039923C1F0609121029617A0F7F5 -:1052500080912202899FC001112470E00E942331B5 -:105260006038710528F46115710521F0862F0895C5 -:105270008FE7089581E0089561E070E0F4CF803F0A -:1052800021F40E94BD28819504C0813F29F40E9429 -:10529000BD28809383030895823F21F40E94BD2896 -:1052A000819504C0833F29F40E94BD288093820326 -:1052B0000895893F19F40E94062905C08A3F31F4F8 -:1052C0000E94062981958093840308958B3F21F4E1 -:1052D0000E940629819504C08C3F29F40E9406296A -:1052E000809385030895843F21F480918103816038 -:1052F00017C0853F21F480918103826011C0863FF1 -:1053000021F48091810384600BC0873F21F4809158 -:105310008103886005C0883F31F4809181038061FA -:105320008093810308958D3F21F480917F038160F4 -:105330000BC08E3F21F480917F03826005C08F3FB8 -:1053400029F480917F03846080937F030895803FD8 -:1053500039F48091830387FF6CC01092830369C086 -:10536000813F29F4809183031816BCF362C09091A9 -:105370008203823F29F497FF5CC01092820359C0D8 -:10538000833F19F41916CCF354C0893F41F480913E -:10539000840318160CF04DC0109284034AC08A3F53 -:1053A00029F48091840387FF44C0F6CF8B3F39F402 -:1053B0008091850387FF3DC0109285033AC08C3FE2 -:1053C00029F4809185031816BCF333C0843F21F47F -:1053D000809181038E7F17C0853F21F480918103E6 -:1053E0008D7F11C0863F21F4809181038B7F0BC09C -:1053F000873F21F480918103877F05C0883F31F486 -:10540000809181038F7E8093810313C08D3F21F4AF -:1054100080917F038E7F0BC08E3F21F480917F03AC -:105420008D7F05C08F3F29F480917F038B7F809310 -:105430007F038091820381110EC0809183038111CB -:105440000AC080918403811106C080918503811177 -:1054500002C010928003089581E893E00E94551BDA -:105460000E94D32790937E0380937D0308951F931A -:10547000CF93DF9380917D0390917E030E94DF277D -:10548000AC0190918003992321F02091250230E016 -:1054900006C0209126028AE0289F9001112442171D -:1054A000530708F486C080918203C0918303D09192 -:1054B000840310918503811107C0C11176C0D111F9 -:1054C00074C0111172C075C09F3F19F09F5F909317 -:1054D0008003181624F40E94BD28809382038091D3 -:1054E000820387FF05C00E94BD28819580938203B7 -:1054F0001C1624F40E94BD288093830380918303AB -:1055000087FF05C00E94BD28819580938303609129 -:105510008203662339F1C0918303CC2319F17727E5 -:1055200067FD7095872F972F0E94932E23E333E317 -:1055300043E35FE30E94472F0E94602E6093820343 -:105540006C2F772767FD7095872F972F0E94932EDA -:1055500023E333E343E35FE30E94472F0E94602E7F -:10556000609383031D1624F40E940629809384030C -:105570008091840387FF05C00E940629819580934E -:105580008403111624F40E940629809385038091D8 -:10559000850387FF05C00E940629819580938503B6 -:1055A000DF91CF911F910C942C2A9F3F09F08ECF51 -:1055B00096CFDF91CF911F910895E1E8F3E085E068 -:1055C000DF011D928A95E9F71092800310927F0304 -:1055D0000895833081F128F4813059F08230D1F080 -:1055E0000895853009F449C0B8F1863009F456C0F1 -:1055F000089580912602262F30E0280F311D2F3F7D -:10560000310524F4680F6093260208958FEF80938C -:105610002602089580912502262F30E0280F311DA3 -:105620002F3F310524F4680F6093250208958FEF12 -:1056300080932502089580912402262F30E0280FC0 -:10564000311D2F3F310524F4680F60932402089523 -:105650008FEF80932402089580912302262F30E05B -:10566000280F311D2F3F310524F4680F609323026A -:1056700008958FEF80932302089580912202262FB0 +:104280000F91FF90EF90DF90CF90BF900C94D507E7 +:1042900026960FB6F894DEBF0FBECDBFDF91CF914B +:1042A0001F910F91FF90EF90DF90CF90BF900895F6 +:1042B0000E9408270E9418270E94DD260E943227AC +:1042C0000E94EE2A0E943D2A80E090E00E94711B2D +:1042D00080E090E00C94871B0E94F8260C945821F3 +:1042E0000E94A026292F22952F7030E02C30310516 +:1042F0004CF42A3031056CF422503109223031055A +:1043000088F407C02C30310549F02F30310531F0E9 +:1043100009C0803E48F0803F29F406C093FB8827FF +:1043200080F9089580E0089581E00895CF93DF93A8 +:1043300000D000D01F92CDB7DEB70F900F900F9036 +:104340000F900F90DF91CF910895CF93DF9300D01E +:1043500000D000D0CDB7DEB726960FB6F894DEBFFA +:104360000FBECDBFDF91CF9108951F93CF93DF9301 +:10437000C0917B0316E080917C03C81799F0D0E0D0 +:104380001C9FF0011D9FF00D1124E358FC4F40814C +:10439000518162817381848195810E94A52121963A +:1043A000C770E9CFDF91CF911F9108954091AD0380 +:1043B0005091AE036091AF037091B0038091B1034F +:1043C0009091B2030C94A5218091B20382958F70D5 +:1043D00009F054C08091AF03882309F44FC0809145 +:1043E0007B03A0917C036091AD037091AE0340917B +:1043F000B0035091B103B6E08A1709F43FC090E0D2 +:1044000041155105C1F17F3F11F46F3FA1F1B89FF4 +:10441000F001B99FF00D1124E358FC4F2181721374 +:104420002AC02081621327C02281211124C0238148 +:1044300034812417350710F421503109241B350B22 +:10444000283C3105C0F42091B2032F7020612093E5 +:10445000B20326E0289FF001299FF00D1124EE57AA +:10446000FC4F80818F70806180838DEA93E00E9491 +:10447000B41D0C94B52101968770BECF0895CF92DC +:10448000DF92EF92FF920F931F93CF93DF93CDB7FD +:10449000DEB762970FB6F894DEBF0FBECDBF8C01BA +:1044A00085E0F801DE011D9601900D928A95E1F7F5 +:1044B000D8014C9111965C91119712966C911297BC +:1044C0001396CD90DC9014973091AD037091AE03AC +:1044D0008091B0039091B103009709F46BC17F3FC5 +:1044E00019F43F3F09F466C1E090AF03EE2009F4F0 +:1044F000C0C02091B203C816D90628F0F601E81B07 +:10450000F90BCF0104C0809590958C0D9D1DFF2463 +:10451000F394883C910578F0F12C207F09F0C6C017 +:104520007C2DD98AC88A89890E9496218DEA93E0D8 +:104530000E94B41DB1C0822F807F09F046C0751360 +:1045400014C0341312C0611110C02F702061209369 +:10455000B2030E94D6218DEA93E00E94B41D80919F +:10456000B203D80115968C932EC0CD2819F15F3F68 +:1045700011F44F3FF9F0F62E61111CC080917B03BE +:1045800020917C0336E0821709F45AC090E0389FEE +:10459000F001399FF00D1124E358FC4F718157133E +:1045A00006C07081471303C07281711103C0019668 +:1045B0008770E9CFF62E662309F418C18091B20303 +:1045C00081608093B203F12C11C1751308C03413BC +:1045D00006C0611104C08091B203D801C3C04D87E9 +:1045E0005E878D859E856A8B0E9470216A898823EB +:1045F000E1F16623D1F12091B203822F82958F7071 +:1046000090E0029774F08091AD039091AE0398878B +:104610008F831986DB86CA862C87CE0107960E9477 +:10462000B41D86E0F801ADEAB3E001900D928A95E1 +:10463000E1F70E94E4210E94D621FF24F394D6C022 +:104640004D875E878D859E850E94A026292F229505 +:104650002F7030E0223031050CF0BCC09F7009F0A3 +:10466000B6C0805E883008F4C1C0C8010E94B41D85 +:10467000E4CFC816D90608F453C0F601E81BF90BBD +:10468000CF01883C910508F450C0F12C7C2DD98ACB +:10469000C88A89890E949621EDEAF3E086E0DF016D +:1046A0001D928A95E9F70E94D621A0C0751314C007 +:1046B000341312C0611110C08091B203F8018583D8 +:1046C000C8010E94B41D86E0EDEAF3E0DF011D920F +:1046D0008A95E9F7FE2C8AC04D875E878D859E8579 +:1046E0006A8B0E9470216A89882309F4BECF6623F1 +:1046F00009F4BBCF2091B203822F82958F7090E096 +:1047000002970CF48ECF8091AD039091AE039A8303 +:1047100089831B82DD82CC822E83CE0101967FCFDE +:10472000809590958C0D9D1DACCFF62E662309F4D7 +:104730009CCF75132EC034132CC02091B20320FDE2 +:104740001FC0822F82958F70D9F0D80115962C93B7 +:1047500015978F3049F08F5F982F9295907F822F19 +:104760008F70892B15968C93C8010E94B41D86E02A +:10477000F801ADEAB3E001900D928A95E1F793CF8D +:1047800086E0F801ADEAB3E001900D928A95E1F779 +:104790002DC04D875E878D859E850E947021811179 +:1047A00040CF8091B20381608093B203C8010E9420 +:1047B000B41D1CC0662309F458CF4D875E878D85D4 +:1047C0009E850E947021882309F44FCF2ACF811142 +:1047D00048CF0CC0243031050CF047CF9F7009F44E +:1047E00040CFF8019581907F09F03BCF8F2D6296E5 +:1047F0000FB6F894DEBF0FBECDBFDF91CF911F91F2 +:104800000F91FF90EF90DF90CF9008951F93CF937B +:10481000DF93CDB7DEB72C970FB6F894DEBF0FBE8F +:10482000CDBF4F83588769877A878B879C87CE0156 +:1048300007960E943F22882369F08F8198852A85F8 +:104840003B85232BF1F19F3F09F063C08F3F09F0B7 +:1048500060C037C086E0FE013796DE0111960190F8 +:104860000D928A95E1F76F817885EA85FB8530970F +:1048700041F17F3F11F46F3F21F120917C0330E043 +:10488000C90101968770992740917B0350E08417F6 +:10489000950709F447C069837A83FD83EC8396E02A +:1048A000929FD001939FB00D1124A358BC4FFE01DD +:1048B000319601900D929A95E1F780937C030E94C6 +:1048C000B52116E080917B0390917C038917C1F19B +:1048D000189FC001112483589C4F0E943F228823B7 +:1048E00079F1E0917B031E9FF0011124E358FC4F06 +:1048F0004081518162817381848195810E94A521CB +:1049000080917B0390E001968770992780937B03C9 +:10491000D9CF4F81588569857A858B859C850E9482 +:10492000A521CFCF0E946C2110927C0310927B03B3 +:10493000EDEAF3E086E0DF011D928A95E9F7C1CF49 +:104940002C960FB6F894DEBF0FBECDBFDF91CF918E +:104950001F910895EF92FF920F931F93CF93DF93D0 +:104960008C01009709F46CC0F12CEE24E394E8016B +:104970002196F8018491843740F4843008F051C0C6 +:10498000813081F0823019F15BC0853709F444C071 +:10499000A8F19CE7980F903708F052C08F770E94DB +:1049A000571D41C00E5F1F4FFE01C49180E28C0F66 +:1049B000883048F4C7708E2D01C0880FCA95EAF779 +:1049C0000E940B2714C08C2F0E948F1C2DC00E5FDD +:1049D0001F4FFE01C49180E28C0F883058F4C770DD +:1049E0008E2D01C0880FCA95EAF70E9411270E94F8 +:1049F00032271AC08C2F0E94571D16C00E5F1F4F02 +:104A0000FE01C491CC2381F08FE99FE00197F1F77B +:104A100000C00000C150F6CF0E5F1F4FFE01F490A2 +:104A200003C00E948F1C8E018F2D882309F49FCF15 +:104A3000EFE9FFE03197F1F700C000008150F5CFBA +:104A4000DF91CF911F910F91FF90EF9008950895FE +:104A50006093B7037093B8038093B9039093BA033C +:104A60000C9458210F931F930091B7031091B80332 +:104A70002091B9033091BA03DC01CB01802B912B3B +:104A8000A22BB32B8093B7039093B803A093B903E1 +:104A9000B093BA031F910F910C9458210F931F9359 +:104AA0000091B7031091B8032091B9033091BA0374 +:104AB000DC01CB0180239123A223B3238093B7038E +:104AC0009093B803A093B903B093BA031F910F91C9 +:104AD0000C9458210F931F930091B7031091B803C2 +:104AE0002091B9033091BA03DC01CB0180279127D3 +:104AF000A227B3278093B7039093B803A093B90379 +:104B0000B093BA031F910F910C9458211092B303E4 +:104B10001092B4031092B5031092B6030C9458216E +:104B200041E050E060E070E004C0440F551F661F94 +:104B3000771F8A95D2F74093B3035093B4036093E1 +:104B4000B5037093B6030C94582141E050E060E047 +:104B500070E004C0440F551F661F771F8A95D2F777 +:104B60008091B3039091B403A091B503B091B603C3 +:104B7000482B592B6A2B7B2B4093B3035093B403E0 +:104B80006093B5037093B6030C94582141E050E054 +:104B900060E070E004C0440F551F661F771F8A95C0 +:104BA000D2F740955095609570958091B3039091A0 +:104BB000B403A091B503B091B603482359236A23E7 +:104BC0007B234093B3035093B4036093B503709376 +:104BD000B6030C94582141E050E060E070E004C05E +:104BE000440F551F661F771F8A95D2F78091B30334 +:104BF0009091B403A091B503B091B603482759270B +:104C00006A277B274093B3035093B4036093B503A3 +:104C10007093B6030C9458210F931F930091B30324 +:104C20001091B4032091B5033091B603DC01CB01A0 +:104C3000802B912BA22BB32B8093B3039093B403BF +:104C4000A093B503B093B6031F910F910C94582114 +:104C50000F931F930091B3031091B4032091B503F8 +:104C60003091B603DC01CB0180239123A223B3232F +:104C70008093B3039093B403A093B503B093B603AA +:104C80001F910F910C9458210F931F930091B30320 +:104C90001091B4032091B5033091B603DC01CB0130 +:104CA00080279127A227B3278093B3039093B4035F +:104CB000A093B503B093B6031F910F910C945821A4 +:104CC0000895CF92DF92EF92FF920F931F93CF93AD +:104CD000DF938C01C090B703D090B803E090B90384 +:104CE000F090BA038091B3039091B403A091B503FF +:104CF000B091B603C82AD92AEA2AFB2ACFE1D0E02C +:104D0000D701C6010C2E04C0B695A7959795879537 +:104D10000A94D2F780FF06C0B8018C2F0E942F0A98 +:104D2000019721F4219760F780E001C08C2FDF917B +:104D3000CF911F910F91FF90EF90DF90CF9008954A +:104D4000CF93DF93EC010E946126BE010E942F0ADF +:104D5000DF91CF910895CB010E94A0260895209164 +:104D60001D0230911E02F90132969FEF40E05191F1 +:104D7000581789F09F3F19F4511101C0942F4F5FCC +:104D80004630A9F79F3F39F0F901E90FF11D97FD72 +:104D9000FA9582830895089520911D0230911E0294 +:104DA000F9013296285F3F4F9081981301C010821D +:104DB0003196E217F307C1F7089581E090E0E091A2 +:104DC0001D02F0911E02E80FF91F10820196883033 +:104DD0009105A9F708959091C603892B8093C60386 +:104DE000089580959091C60389238093C603089502 +:104DF0001092C60308959091C503892B8093C50333 +:104E0000089580959091C50389238093C5030895E3 +:104E10001092C50308959091C403892B8093C40315 +:104E2000089580959091C40389238093C4030895C5 +:104E30001092C40308958093BB0308951092BB039E +:104E4000089580911D0290911E02FC0131969C01F3 +:104E5000285F3F4F80E0919191118F5FE217F30738 +:104E6000D1F70895E0911D02F0911E028091C603D2 +:104E70008083E0911D02F0911E0290818091C50314 +:104E8000892B8083E0911D02F0911E029081809118 +:104E9000C403892B80838091BB03882361F0E09158 +:104EA0001D02F0911E029081892B80830E94212790 +:104EB00081111092BB0380911D0290911E020C94EF +:104EC0005B1B8091E803843039F11092C80320E421 +:104ED00088E190E00FB6F894A895809360000FBE2B +:104EE0002093600080E00E94D20580E00E940A0BBF +:104EF00083B7817F846083BF83B7816083BF7894E9 +:104F0000889583B78E7F83BF88E10FB6F89480932E +:104F10006000109260000FBE089508950895CF9329 +:104F200080E00E94D2050E948D270E94AD0C0E9455 +:104F30008E27C0E08C2F0E94E60D892B29F4CF5FCD +:104F4000C530C1F780E001C081E0CF9108950E9493 +:104F50006C2180E00E94D2050E94092D0E944F1B07 +:104F60000C940A0B1F920F920FB60F9211248F937D +:104F70009F93AF93BF938091C803811113C0809119 +:104F8000C9039091CA03A091CB03B091CC03419681 +:104F9000A11DB11D8093C9039093CA03A093CB03B5 +:104FA000B093CC03BF91AF919F918F910F900FBEA3 +:104FB0000F901F90189582E084BD93E095BD9AEF05 +:104FC00097BD80936E0008952FB7F8948091C90320 +:104FD0009091CA03A091CB03B091CC032FBF089549 +:104FE000CF92DF92EF92FF920F931F932FB7F89417 +:104FF0004091C9035091CA036091CB037091CC03D7 +:105000002FBF6A017B01EE24FF248C0120E030E0F9 +:10501000C016D106E206F30610F4415051099A0178 +:10502000281B390BC9011F910F91FF90EF90DF9062 +:10503000CF9008951F920F920FB60F9211248F9365 +:105040009F93AF93BF938091C9039091CA03A0919E +:10505000CB03B091CC030196A11DB11D8093C90370 +:105060009093CA03A093CB03B093CC03BF91AF91AD +:105070009F918F910F900FBE0F901F9018950E94D7 +:105080004C18F8942FEF87EA91E621508040904029 +:10509000E1F700C0000087E090EBDC018093F303B0 +:1050A0009093F403A093F503B093F6039CE088E19A +:1050B0000FB6F894A895809360000FBE909360009F +:1050C000FFCF0E949B28811102C00E9477280E9476 +:1050D000A6288093C7030E94B3288093F1030E94FF +:1050E000AA28682F70E080E090E00C9428256DEEEF +:1050F0007EEF80E090E00E94BC3160E082E090E0D2 +:105100000E94AA3160E083E090E00E94AA3160E052 +:1051100084E090E00E94AA3160E085E090E00E9487 +:10512000AA3160E086E090E00E94AA316FEF87E04C +:1051300090E00C94AA3180E090E00E94A43121E03C +:105140008D3E9E4F09F020E0822F089582E090E08E +:105150000C949C3183E090E00C949C31682F83E0A8 +:1051600090E00C94AA3184E090E00C949C31682F7C +:1051700084E090E00C94AA3186E090E00C949C319D +:10518000682F86E090E00C94AA3187E090E00C94C0 +:105190009C31682F87E090E00C94AA318091CF0376 +:1051A00080FF0BC06091220285E0689FB00111244E +:1051B00075956795759567952BC081FF09C06091BE +:1051C000220285E0689FB00111247595679520C083 +:1051D00082FF07C06091220285E0689FB001112420 +:1051E00017C09091D0039923D1F0609121029617B6 +:1051F00088F72091220285E0289F90011124929F38 +:10520000A001939F500D112470E0CA010E948231C9 +:105210006038710540F46115710539F002C065E030 +:1052200070E0862F08958FE7089581E008958091BA +:10523000CF0380FF08C06091200270E075956795EC +:105240007595679521C081FF06C06091200270E0CE +:105250007595679519C082FF04C06091200270E0C7 +:1052600010C09091D0039923C1F060911F0296174E +:10527000A0F780912002899FC001112470E00E9454 +:1052800082316038710528F46115710521F0862F8F +:1052900008958FE7089581E0089561E070E0F4CF0C +:1052A000803F21F40E94CE28819504C0813F29F4DB +:1052B0000E94CE288093D3030895823F21F40E9458 +:1052C000CE28819504C0833F29F40E94CE28809384 +:1052D000D2030895893F19F40E94172905C08A3F17 +:1052E00031F40E94172981958093D40308958B3F50 +:1052F00021F40E941729819504C08C3F29F40E9453 +:1053000017298093D5030895843F21F48091D10318 +:10531000816017C0853F21F48091D103826011C064 +:10532000863F21F48091D10384600BC0873F21F434 +:105330008091D103886005C0883F31F48091D1030A +:1053400080618093D10308958D3F21F48091CF0334 +:1053500081600BC08E3F21F48091CF03826005C035 +:105360008F3F29F48091CF0384608093CF03089509 +:10537000803F39F48091D30387FF6CC01092D30330 +:1053800069C0813F29F48091D3031816BCF362C031 +:105390009091D203823F29F497FF5CC01092D20310 +:1053A00059C0833F19F41916CCF354C0893F41F416 +:1053B0008091D40318160CF04DC01092D4034AC04B +:1053C0008A3F29F48091D40387FF44C0F6CF8B3FF6 +:1053D00039F48091D50387FF3DC01092D5033AC0C0 +:1053E0008C3F29F48091D5031816BCF333C0843F59 +:1053F00021F48091D1038E7F17C0853F21F48091E5 +:10540000D1038D7F11C0863F21F48091D1038B7F22 +:105410000BC0873F21F48091D103877F05C0883F6F +:1054200031F48091D1038F7E8093D10313C08D3FDF +:1054300021F48091CF038E7F0BC08E3F21F48091A9 +:10544000CF038D7F05C08F3F29F48091CF038B7FE1 +:105450008093CF038091D20381110EC08091D3033A +:1054600081110AC08091D403811106C08091D503B7 +:10547000811102C01092D003089581ED93E00E9443 +:10548000661B0E94E4279093CE038093CD0308957A +:105490001F93CF93DF938091CD039091CE030E9411 +:1054A000F027AC019091D003992321F020912302A1 +:1054B00030E006C0209124028AE0289F9001112448 +:1054C0004217530708F486C08091D203C091D303DA +:1054D000D091D4031091D503811107C0C11176C0BA +:1054E000D11174C0111172C075C09F3F19F09F5F38 +:1054F0009093D003181624F40E94CE288093D203F0 +:105500008091D20387FF05C00E94CE2881958093A9 +:10551000D2031C1624F40E94CE288093D3038091DA +:10552000D30387FF05C00E94CE2881958093D303C3 +:105530006091D203662339F1C091D303CC2319F1D2 +:10554000772767FD7095872F972F0E94A42E23E35E +:1055500033E343E35FE30E94B42F0E94712E609314 +:10556000D2036C2F772767FD7095872F972F0E94A6 +:10557000A42E23E333E343E35FE30E94B42F0E94AE +:10558000712E6093D3031D1624F40E941729809373 +:10559000D4038091D40387FF05C00E941729819509 +:1055A0008093D403111624F40E9417298093D50305 +:1055B0008091D50387FF05C00E94172981958093AC +:1055C000D503DF91CF911F910C943D2A9F3F09F0A5 +:1055D0008ECF96CFDF91CF911F910895E1EDF3E04B +:1055E00085E0DF011D928A95E9F71092D0031092B1 +:1055F000CF030895833081F128F4813059F082304F +:10560000D1F00895853009F449C0B8F1863009F425 +:1056100056C0089580912402262F30E0280F311DB6 +:105620002F3F310524F4680F6093240208958FEF13 +:1056300080932402089580912302262F30E0280FC2 +:10564000311D2F3F310524F4680F60932302089524 +:105650008FEF80932302089580912202262F30E05D +:10566000280F311D2F3F310524F4680F609322026B +:1056700008958FEF80932202089580912102262FB2 :1056800030E0280F311D2F3F310524F4680F60935F -:10569000220208958FEF80932202089580912102C3 +:10569000210208958FEF80932102089580912002C6 :1056A000262F30E0280F311D2F3F310524F4680FDD -:1056B0006093210208958FEF809321020895833033 -:1056C00011F128F4813049F0823091F0089585304D -:1056D00081F120F18630C1F108958091260268178A -:1056E00020F4861B809326020895109226020895C6 -:1056F00080912502681720F4861B80932502089567 -:1057000010922502089580912402681720F4861BC8 -:105710008093240208951092240208958091230218 -:10572000681720F4861B80932302089510922302A9 -:10573000089580912202681720F4861B809322022C -:10574000089510922202089580912102681720F492 -:10575000861B8093210208951092210208950F93D1 -:105760001F938732D8F58E3108F087C08E3009F448 -:1057700071C098F4873009F45BC08B3009F491C094 -:10578000863009F095C080917703817F8E7F80936A -:10579000770381E0809387038CC0863109F481C050 -:1057A00068F4803109F084C08091770383FB22275D -:1057B00020F991E0922790FB83F955C0893109F4D3 -:1057C00070C08B3109F074C08091770381FB222770 -:1057D00020F991E0922790FB81F945C0883309F4C4 -:1057E00060C050F4893209F45EC0853309F45BC0AF -:1057F000873209F458C05CC0833409F454C028F4DB -:105800008A3308F455C0895339C0883409F050C030 -:105810000E945B210E94D6070FEF13ED20E3015099 -:1058200010402040E1F700C000000E942E2839C03F -:1058300090917703892F8095817080FB90F929F0F2 -:10584000966098609093770334C0997F977F909388 -:10585000770327C08091770382FB222720F991E00C -:10586000922790FB82F9809377039923D1F080915E -:10587000770381608093770314C08D5141E050E03D -:1058800060E070E08A019B0104C0000F111F221F1D -:10589000331F8A95D2F7C901B8010E9417250E94CB -:1058A0005B2181E006C061E070E080E090E0F5CF30 -:1058B00080E01F910F91089580E0089580E00895A1 -:1058C000CF93C82F80918703813069F018F0823020 -:1058D000C9F184C0E0911F02F091200280818232E0 -:1058E00009F07EC007C0E0911F02F0912002808184 -:1058F000823261F48C2F0E945C2C811104C08C2FA9 -:105900000E94AF2B1DC081E090E01AC08C2F0E9436 -:105910005E2C811114C0C43179F048F4CB3079F099 -:10592000C03109F061C082E08093870308C0C932AA -:1059300019F0C83321F058C01092870355C081E098 -:10594000817054C0C93291F120F5C43179F1B0F4BD -:10595000C73009F047C08EE18093260282E380932E -:1059600025028AE08093240284E18093230288E068 -:105970008093220288E28093210234C0CE51C63047 -:1059800088F5EC2FF0E0E256FD4F8081809386038E -:1059900029C0CE34E9F020F4CB3421F56AE013C0FD -:1059A000C13579F0C235F1F461E00DC08091860314 -:1059B000882319F01092860315C081E08093870335 -:1059C00015C061E006C0809186030E94E92A0AC0E2 -:1059D0006AE0809186030E945F2B04C010928703C7 -:1059E00080E004C081E002C080E0AACFCF9108959A -:1059F0000E948A28811102C00E9466280E94AB285A -:105A00008093A20380FF02C0869501C080E00C94C1 -:105A1000F6058091A203982F9695292F30E0233028 -:105A200031054CF49F5F990F8170892B81608093C1 -:105A3000A2030E94AF288091A20386950C94F605DC -:105A40008091A203982F969591F09158990F8170AB -:105A5000892B8093A2038E7F91E009F490E08091DE -:105A6000A20390FB80F98093A2030E94AF2880914B -:105A7000A20386950C94F6058091A203982F909529 -:105A800090FB80F98093A2030E94AF288091A2032B -:105A900080FF02C0869501C080E00C94F6059091CD -:105AA000A203892F86958F5F8F779170843028F4B9 -:105AB000880F892B8093A20302C09093A203809148 -:105AC000A2038E7F91E009F490E08091A20390FB05 -:105AD00080F98093A2030E94AF288091A20386954B -:105AE0000C94F6052091A203922F96958927982F62 -:105AF000990F822F8170892B8093A2038E7F91E072 -:105B000009F490E08091A20390FB80F98093A203B6 -:105B10000E94AF288091A20386950C94F6055058F8 -:105B2000BB27AA270ED075C166D130F06BD120F00B -:105B300031F49F3F11F41EF45BC10EF4E095E7FBD6 -:105B400051C1E92F77D180F3BA1762077307840731 -:105B5000950718F071F49EF58FC10EF4E0950B2EA9 -:105B6000BA2FA02D0B01B90190010C01CA01A001AF -:105B70001124FF27591B99F0593F50F4503E68F10A -:105B80001A16F040A22F232F342F4427585FF3CF4B -:105B9000469537952795A795F0405395C9F77EF41C -:105BA0001F16BA0B620B730B840BBAF09150A1F065 -:105BB000FF0FBB1F661F771F881FC2F70EC0BA0FEB -:105BC000621F731F841F48F4879577956795B79573 -:105BD000F7959E3F08F0B3CF9395880F08F099276B -:105BE000EE0F979587950895D9D008F481E0089530 -:105BF0000CD00FC107D140F0FED030F021F45F3F50 -:105C000019F0F0C0511139C1F3C014D198F39923A0 -:105C1000C9F35523B1F3951B550BBB27AA27621770 -:105C20007307840738F09F5F5F4F220F331F441FB5 -:105C3000AA1FA9F333D00E2E3AF0E0E830D09150ED -:105C40005040E695001CCAF729D0FE2F27D0660FDA -:105C5000771F881FBB1F261737074807AB07B0E819 -:105C600009F0BB0B802DBF01FF2793585F4F2AF02F -:105C70009E3F510568F0B6C000C15F3FECF3983E0F -:105C8000DCF3869577956795B795F7959F5FC9F78C -:105C9000880F911D9695879597F90895E1E0660F15 -:105CA000771F881FBB1F621773078407BA0720F08E -:105CB000621B730B840BBA0BEE1F88F7E0950895F7 -:105CC00004D06894B111D9C00895BCD088F09F5712 -:105CD00090F0B92F9927B751A0F0D1F0660F771F38 -:105CE000881F991F1AF0BA95C9F712C0B13081F018 -:105CF000C3D0B1E00895C0C0672F782F8827B85F60 -:105D000039F0B93FCCF3869577956795B395D9F778 -:105D10003EF490958095709561957F4F8F4F9F4F82 -:105D20000895E89409C097FB3EF49095809570958E -:105D300061957F4F8F4F9F4F9923A9F0F92F96E9D7 -:105D4000BB279395F695879577956795B795F1114C -:105D5000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE9 -:105D60008F4F9F4F16C0882311F096E911C07723FB -:105D700021F09EE8872F762F05C0662371F096E804 -:105D8000862F70E060E02AF09A95660F771F881FD3 -:105D9000DAF7880F9695879597F90895990F000877 -:105DA000550FAA0BE0E8FEEF16161706E807F907ED -:105DB000C0F012161306E407F50798F0621B730B88 -:105DC000840B950B39F40A2661F0232B242B252B09 -:105DD00021F408950A2609F4A140A6958FEF811DAC -:105DE000811D089597F99F6780E870E060E008954D -:105DF0009FEF80EC089500240A94161617061806E3 -:105E00000906089500240A941216130614060506BE -:105E10000895092E0394000C11F4882352F0BB0F4F -:105E200040F4BF2B11F460FF04C06F5F7F4F8F4FB2 -:105E30009F4F089557FD9058440F551F59F05F3FED -:105E400071F04795880F97FB991F61F09F3F79F09C -:105E500087950895121613061406551FF2CF46951E -:105E6000F1DF08C0161617061806991FF1CF8695A0 -:105E70007105610508940895E894BB276627772784 -:105E8000CB0197F908958ADF08F48FEF08950BD0BE -:105E9000C0CFB1DF28F0B6DF18F0952309F0A2CF0C -:105EA000A7CF1124EACFC6DFA0F3959FD1F3950FBA -:105EB00050E0551F629FF001729FBB27F00DB11D8E -:105EC000639FAA27F00DB11DAA1F649F6627B00D1E -:105ED000A11D661F829F2227B00DA11D621F739F07 -:105EE000B00DA11D621F839FA00D611D221F749F15 -:105EF0003327A00D611D231F849F600D211D822F5C -:105F0000762F6A2F11249F5750408AF0E1F08823A2 -:105F10004AF0EE0FFF1FBB1F661F771F881F9150AF -:105F20005040A9F79E3F510570F05CCFA6CF5F3F70 -:105F3000ECF3983EDCF3869577956795B795F795E2 -:105F4000E7959F5FC1F7FE2B880F911D969587956A -:105F500097F90895FA01EE0FFF1F309621053105DC -:105F600099F16115710561F48038BFE39B0749F130 -:105F700068949038810561F08038BFEF9B0741F04D -:105F8000992342F5FF3FE1053105210511F1E89420 -:105F90000894E795D901AA2329F4AB2FBE2FF85F07 -:105FA000D0F310C0FF5F70F4A695E0F7F73950F01A -:105FB00019F0FF3A38F49F779F930CD00F9007FCAD -:105FC000905808953EF014CF60E070E080E89FE3C1 -:105FD00008954FE79F775F934F933F932F939ED002 -:105FE0002F913F914F915F9152DF05C019F40EF050 -:105FF000F9CE42CFFDCE26DFC8F39638C0F707F8BA -:106000000F92E8942BE33AEA48EB5FE74EDF0F92FA -:106010000F920F924DB75EB70F92C0D0E0E4F1E05F -:1060200016D04F915F91EF91FF91E595EE1FFF1F05 -:1060300049F0FE57E0684427EE0F441FFA95E1F758 -:106040004195550B32D00F9007FE26C00895DF937F -:10605000CF931F930F93FF92EF92DF927B018C01FE -:10606000689405C0DA2EEF011EDFFE01E894A591C9 -:106070002591359145915591AEF3EF0162DDFE0119 -:106080009701A801DA9479F7DF90EF90FF900F91D4 -:106090001F91CF91DF9108959B01AC0160E070E00A -:1060A00080E89FE3A5CD9ECEACC0CCDEE8F399237B -:1060B000D9F3940F511DBBF39150504094F059F017 -:1060C000882332F0660F771F881F91505040C1F728 -:1060D0009E3F510544F7880F911D9695879597F936 -:1060E00008955F3FACF0983E9CF0BB27869577956E -:1060F0006795B79508F4B1609395C1F7BB0F58F752 -:1061000011F460FFE8CF6F5F7F4F8F4F9F4FE3CF5A -:10611000B4CE0EF076C06CCE689464CE93DEC8F335 -:106120009923D1F3C6F3DF93CF931F930F93FF927D -:10613000C92FDD2788232AF02197660F771F881F34 -:10614000DAF720E030E040E85FEB9FE3883920F0A9 -:10615000803E30F021968F77E3DCE8E6F1E003C083 -:10616000DFDCE5E9F1E073DF8B01BE01EC01FB2E22 -:106170006F5771097595771F880B990BD4DD28E14E -:1061800032E741E35FE38FDEAF2D9801AE01FF9070 -:106190000F911F91CF91DF91D4DC3BCEFA01DC014E -:1061A000AA0FBB1F9B01AC01BF5728F4222733273E -:1061B000442750781FC0B75188F4AB2F0024469570 -:1061C00037952795011CA395D2F3002069F0220F83 -:1061D000331F441FB395DAF30DD0A1CC61307105A4 -:1061E000A0E88A07B94630F49B01AC0166277727FF -:1061F00088279078309621F020833183428353831F -:1062000008959F3F31F0915020F4879577956795D9 -:10621000B795880F911D9695879597F90895AA1BB4 -:10622000BB1B51E107C0AA1FBB1FA617B70710F081 -:10623000A61BB70B881F991F5A95A9F780959095B3 -:10624000BC01CD01089597FB072E16F4009407D0EA -:1062500077FD09D00E940F3107FC05D03EF49095E0 -:1062600081959F4F0895709561957F4F0895EE0F2A -:10627000FF1F0590F491E02D0994F999FECF92BD8E -:1062800081BDF89A992780B50895A8E1B0E042E071 -:1062900050E00C946531262FF999FECF92BD81BD57 -:1062A000F89A019700B4021639F01FBA20BD0FB654 -:1062B000F894FA9AF99A0FBE08950196272F0E9432 -:1062C0004C310C944B31DC01CB01FC01F999FECF30 -:1062D00006C0F2BDE1BDF89A319600B40D9241506E -:0A62E0005040B8F70895F894FFCF7E -:1062EA0007000C52D02445000000410000DC4400A5 -:1062FA0000004152D0A4440000404100005C440028 -:10630A0000004148F17644000000415C978A44004D -:10631A000000411FD592440000004152D0A444001D -:10632A000000415CFFB844000000410AA7CF4400C6 -:10633A000000410000DC44000000410AA7CF4400ED -:10634A000000410000DC44000000410000000000A1 -:10635A0000804052D0244500004041000000000067 -:10636A000080400AA74F45000040410AA7CF4400D9 -:10637A000000410000DC4400000041000000000071 -:10638A0000804052D0244500000041000000000077 -:10639A000080405CFF38450000004100000000001A -:1063AA0000804052D02445000000410AA7CF440093 -:1063BA000000410000DC4400000041000000000031 -:1063CA0000804052D024450000804110F1764400FC -:1063DA0000A04112F1F6440000004141909B4400A4 -:1063EA0000A04112F1F64400000041050000003F00 -:1063FA000000C8426A14F814D514A1146D14016C73 -:10640A00032808140A321E000002000400050007CF -:10641A000009000B000C000E0010001100130015FB -:10642A0000170018001A001C001D001F002100237D -:10643A000024002600280029002B002D002F003000 -:10644A0000320034003500370039003B0042004575 -:10645A000025002600430061006000200037006428 -:10646A000065006600670044004600240047003FBC -:10647A004D36010BB40A7E0A2A0A430A5C0A010253 -:08648A000304050607080900E0 +:1056B0006093200208958FEF8093200208958091D7 +:1056C0001F02262F30E0280F311D2F3F310524F413 +:1056D000680F60931F0208958FEF80931F02089553 +:1056E000833011F128F4813049F0823091F008952F +:1056F000853081F120F18630C1F108958091240236 +:10570000681720F4861B80932402089510922402C7 +:10571000089580912302681720F4861B809323024A +:10572000089510922302089580912202681720F4B0 +:10573000861B809322020895109222020895809180 +:105740002102681720F4861B80932102089510928D +:105750002102089580912002681720F4861B80930F +:105760002002089510922002089580911F02681768 +:1057700020F4861B80931F02089510921F02089543 +:105780000F931F938732D8F58E3108F087C08E3083 +:1057900009F471C098F4873009F45BC08B3009F4C8 +:1057A00091C0863009F095C08091C703817F8E7FBC +:1057B0008093C70381E08093D7038CC0863109F4BE +:1057C00081C068F4803109F084C08091C70383FBF5 +:1057D000222720F991E0922790FB83F955C0893167 +:1057E00009F470C08B3109F074C08091C70381FB4C +:1057F000222720F991E0922790FB81F945C0883358 +:1058000009F460C050F4893209F45EC0853309F4AC +:105810005BC0873209F458C05CC0833409F454C0BB +:1058200028F48A3308F455C0895339C0883409F004 +:1058300050C00E946C210E94B2070FEF13ED20E3CD +:10584000015010402040E1F700C000000E943F28B6 +:1058500039C09091C703892F8095817080FB90F9A2 +:1058600029F0966098609093C70334C0997F977F22 +:105870009093C70327C08091C70382FB222720F99A +:1058800091E0922790FB82F98093C7039923D1F08E +:105890008091C70381608093C70314C08D5141E09C +:1058A00050E060E070E08A019B0104C0000F111F0E +:1058B000221F331F8A95D2F7C901B8010E942825FB +:1058C0000E946C2181E006C061E070E080E090E021 +:1058D000F5CF80E01F910F91089580E0089580E05A +:1058E0000895CF93C82F8091D703813069F018F0C5 +:1058F0008230C9F184C0E0911D02F0911E028081C6 +:10590000823209F07EC007C0E0911D02F0911E02B4 +:105910008081823261F48C2F0E946D2C811104C031 +:105920008C2F0E94C02B1DC081E090E01AC08C2FEC +:105930000E946F2C811114C0C43179F048F4CB302F +:1059400079F0C03109F061C082E08093D70308C0CC +:10595000C93219F0C83321F058C01092D70355C08E +:1059600081E0817054C0C93291F120F5C43179F1E0 +:10597000B0F4C73009F047C08EE18093240282E37F +:10598000809323028AE08093220284E180932102A3 +:1059900088E08093200288E280931F0234C0CE51B9 +:1059A000C63088F5EC2FF0E0E451FD4F8081809304 +:1059B000D60329C0CE34E9F020F4CB3421F56AE0D7 +:1059C00013C0C13579F0C235F1F461E00DC08091AA +:1059D000D603882319F01092D60315C081E0809376 +:1059E000D70315C061E006C08091D6030E94FA2A51 +:1059F0000AC06AE08091D6030E94702B04C0109206 +:105A0000D70380E004C081E002C080E0AACFCF913C +:105A100008950E949B28811102C00E9477280E944D +:105A2000BC288093F20380FF02C0869501C080E00D +:105A30000C94D2058091F203982F9695292F30E08F +:105A4000233031054CF49F5F990F8170892B816061 +:105A50008093F2030E94C0288091F20386950C94F3 +:105A6000D2058091F203982F969591F09158990F55 +:105A70008170892B8093F2038E7F91E009F490E08E +:105A80008091F20390FB80F98093F2030E94C0287A +:105A90008091F20386950C94D2058091F203982FA1 +:105AA000909590FB80F98093F2030E94C02880912A +:105AB000F20380FF02C0869501C080E00C94D205FD +:105AC0009091F203892F86958F5F8F779170843044 +:105AD00028F4880F892B8093F20302C09093F2037D +:105AE0008091F2038E7F91E009F490E08091F203BF +:105AF00090FB80F98093F2030E94C0288091F2030A +:105B000086950C94D2052091F203922F96958927C1 +:105B1000982F990F822F8170892B8093F2038E7FAB +:105B200091E009F490E08091F20390FB80F980937A +:105B3000F2030E94C0288091F20386950C94D2054E +:105B40005058BB27AA270ED0D1C1C2D130F0C7D13F +:105B500020F031F49F3F11F41EF4B7C10EF4E0952C +:105B6000E7FB9FC1E92FD3D180F3BA176207730710 +:105B70008407950718F071F49EF5EBC10EF4E095DB +:105B80000B2EBA2FA02D0B01B90190010C01CA01F7 +:105B9000A0011124FF27591B99F0593F50F4503EA2 +:105BA00068F11A16F040A22F232F342F4427585F94 +:105BB000F3CF469537952795A795F0405395C9F7AC +:105BC0007EF41F16BA0B620B730B840BBAF0915064 +:105BD000A1F0FF0FBB1F661F771F881FC2F70EC003 +:105BE000BA0F621F731F841F48F4879577956795D6 +:105BF000B795F7959E3F08F0B3CF9395880F08F0BF +:105C00009927EE0F97958795089527D108F481E09D +:105C100008950CD06BC163D140F05AD130F021F41B +:105C20005F3F19F03EC1511195C14FC170D198F33A +:105C30009923C9F35523B1F3951B550BBB27AA270D +:105C400062177307840738F09F5F5F4F220F331F7F +:105C5000441FAA1FA9F333D00E2E3AF0E0E830D04B +:105C600091505040E695001CCAF729D0FE2F27D04E +:105C7000660F771F881FBB1F261737074807AB071C +:105C8000B0E809F0BB0B802DBF01FF2793585F4F91 +:105C90002AF09E3F510568F004C15CC15F3FECF300 +:105CA000983EDCF3869577956795B795F7959F5F56 +:105CB000C9F7880F911D9695879597F90895E1E0AA +:105CC000660F771F881FBB1F621773078407BA0709 +:105CD00020F0621B730B840BBA0BEE1F88F7E09564 +:105CE000089504D06894B11135C1089518D188F091 +:105CF0009F5790F0B92F9927B751A0F0D1F0660FB8 +:105D0000771F881F991F1AF0BA95C9F712C0B130D2 +:105D100081F01FD1B1E008951CC1672F782F88272B +:105D2000B85F39F0B93FCCF3869577956795B39511 +:105D3000D9F73EF490958095709561957F4F8F4F80 +:105D40009F4F0895E89409C097FB3EF49095809585 +:105D5000709561957F4F8F4F9F4F9923A9F0F92F31 +:105D600096E9BB279395F695879577956795B795AF +:105D7000F111F8CFFAF4BB0F11F460FF1BC06F5F95 +:105D80007F4F8F4F9F4F16C0882311F096E911C0A7 +:105D9000772321F09EE8872F762F05C0662371F0C8 +:105DA00096E8862F70E060E02AF09A95660F771FDC +:105DB000881FDAF7880F9695879597F9089588D008 +:105DC00018F011F08CD038F480C0C4C0E92F9FD0F7 +:105DD000B0F35523C9F3E7FB6217730784079507F0 +:105DE000A8F199F3E92FFF2788232AF03197660F4E +:105DF000771F881FDAF7952F5527442332F09150EB +:105E00005040220F331F441FD2F7BB27E91BF50B6D +:105E1000621B730B840BB109C1F222F4620F731F72 +:105E2000841FB11D31972AF0660F771F881FBB1F93 +:105E3000EFCF915050405AF041F0882332F0660F76 +:105E4000771F881F91505040C1F7939530C08695B9 +:105E5000779567959F5FD9F7F8CF990F0008550F91 +:105E6000AA0BE0E8FEEF16161706E807F907C0F0E0 +:105E700012161306E407F50798F0621B730B840BE8 +:105E8000950B39F40A2661F0232B242B252B21F4C2 +:105E900008950A2609F4A140A6958FEF811D811D62 +:105EA000089597F99F6780E870E060E008959F3F4C +:105EB00031F0915020F4879577956795B795880FC5 +:105EC000911D9695879597F908959FEF80EC089519 +:105ED00000240A94161617061806090608950024C9 +:105EE0000A9412161306140605060895092E039443 +:105EF000000C11F4882352F0BB0F40F4BF2B11F4B7 +:105F000060FF04C06F5F7F4F8F4F9F4F089557FD15 +:105F10009058440F551F59F05F3F71F04795880F17 +:105F200097FB991F61F09F3F79F0879508951216AE +:105F300013061406551FF2CF4695F1DF08C016165A +:105F400017061806991FF1CF86957105610508940B +:105F50000895E894BB2766277727CB0197F9089522 +:105F60007CDF08F48FEF08950BD0C0CFB1DF28F0AD +:105F7000B6DF18F0952309F094CFA7CF1124EACF0C +:105F8000C6DFA0F3959FD1F3950F50E0551F629F98 +:105F9000F001729FBB27F00DB11D639FAA27F00D82 +:105FA000B11DAA1F649F6627B00DA11D661F829FA9 +:105FB0002227B00DA11D621F739FB00DA11D621F8E +:105FC000839FA00D611D221F749F3327A00D611DAB +:105FD000231F849F600D211D822F762F6A2F11248D +:105FE0009F5750408AF0E1F088234AF0EE0FFF1FE0 +:105FF000BB1F661F771F881F91505040A9F79E3F17 +:10600000510570F04ECFA6CF5F3FECF3983EDCF326 +:10601000869577956795B795F795E7959F5FC1F753 +:10602000FE2B880F911D9695879597F90895FA0193 +:10603000EE0FFF1F30962105310599F161157105AD +:1060400061F48038BFE39B0749F16894903881057B +:1060500061F08038BFEF9B0741F0992342F5FF3F85 +:10606000E1053105210511F1E8940894E795D9017E +:10607000AA2329F4AB2FBE2FF85FD0F310C0FF5F27 +:1060800070F4A695E0F7F73950F019F0FF3A38F4BC +:106090009F779F930CD00F9007FC905808953EF087 +:1060A00014CF60E070E080E89FE308954FE79F77AA +:1060B0005F934F933F932F939ED02F913F914F919A +:1060C0005F9152DF05C019F40EF0EBCE42CFFDCE4A +:1060D00026DFC8F39638C0F707F80F92E8942BE351 +:1060E0003AEA48EB5FE74EDF0F920F920F924DB7FF +:1060F0005EB70F92C0D0E8EFF0E016D04F915F91FD +:10610000EF91FF91E595EE1FFF1F49F0FE57E06804 +:106110004427EE0F441FFA95E1F74195550B32D015 +:106120000F9007FE26C00895DF93CF931F930F9320 +:10613000FF92EF92DF927B018C01689405C0DA2E0A +:10614000EF011EDFFE01E894A5912591359145915F +:106150005591AEF3EF0106DDFE019701A801DA9437 +:1061600079F7DF90EF90FF900F911F91CF91DF9122 +:1061700008959B01AC0160E070E080E89FE349CDA9 +:1061800090CE95CECCDEE8F39923D9F3940F511D30 +:10619000BBF39150504094F059F0882332F0660FD1 +:1061A000771F881F91505040C1F79E3F510544F71B +:1061B000880F911D9695879597F908955F3FACF0EC +:1061C000983E9CF0BB27869577956795B79508F420 +:1061D000B1609395C1F7BB0F58F711F460FFE8CF9A +:1061E0006F5F7F4F8F4F9F4FE3CFB4CE0EF05FCEE8 +:1061F0006CCE689456CE93DEC8F39923D1F3C6F3E0 +:10620000DF93CF931F930F93FF92C92FDD2788232E +:106210002AF02197660F771F881FDAF720E030E019 +:1062200040E85FEB9FE3883920F0803E30F0219614 +:106230008F7787DCE0E2F1E003C083DCEDE4F1E09E +:1062400073DF8B01BE01EC01FB2E6F577109759551 +:10625000771F880B990B78DD28E132E741E35FE394 +:106260008FDEAF2D9801AE01FF900F911F91CF915E +:10627000DF9178DC3BCEFA01DC01AA0FBB1F9B014A +:10628000AC01BF5728F422273327442750781FC07A +:10629000B75188F4AB2F0024469537952795011CFC +:1062A000A395D2F3002069F0220F331F441FB3954A +:1062B000DAF30DD045CC61307105A0E88A07B94604 +:1062C00030F49B01AC0166277727882790783096B9 +:1062D00021F020833183428353830895AA1BBB1B83 +:1062E00051E107C0AA1FBB1FA617B70710F0A61BD6 +:1062F000B70B881F991F5A95A9F780959095BC01F7 +:10630000CD01089597FB072E16F4009407D077FD72 +:1063100009D00E946E3107FC05D03EF4909581951E +:106320009F4F0895709561957F4F0895EE0FFF1F61 +:106330000590F491E02D0994F999FECF92BD81BDAD +:10634000F89A992780B50895A8E1B0E042E050E0BE +:106350000C94C431262FF999FECF92BD81BDF89AD5 +:10636000019700B4021639F01FBA20BD0FB6F89499 +:10637000FA9AF99A0FBE08950196272F0E94AB3121 +:106380000C94AA31DC01CB01FC01F999FECF06C0C7 +:10639000F2BDE1BDF89A319600B40D9241505040E3 +:0863A000B8F70895F894FFCF4F +:1063A8000C52D02445000000410000DC44000000ED +:1063B8004152D0A4440000404100005C4400000069 +:1063C8004148F17644000000415C978A440000008F +:1063D800411FD592440000004152D0A4440000005F +:1063E800415CFFB844000000410AA7CF4400000008 +:1063F800410000DC44000000410AA7CF440000002F +:10640800410000DC44000000410000000000008062 +:106418004052D024450000404100000000000080A8 +:10642800400AA74F45000040410AA7CF440000009A +:10643800410000DC44000000410000000000008032 +:106448004052D024450000004100000000000080B8 +:10645800405CFF384500000041000000000000805B +:106468004052D02445000000410AA7CF4400000054 +:10647800410000DC440000004100000000000080F2 +:106488004052D024450000804110F176440000A01D +:106498004112F1F6440000004141909B440000A0E5 +:1064A8004112F1F64400000041050000003F0000E1 +:1064B800C8427B140915E614B2147E1401BC0328E3 +:1064C80008140A321E000002000400050007000933 +:1064D800000B000C000E001000110013001500172F +:1064E8000018001A001C001D001F002100230024B2 +:1064F800002600280029002B002D002F0030003234 +:106508000034003500370039003B004200450025C3 +:106518000026004300610060002000370064006529 +:1065280000660067004400460024004700314980A7 +:106538003F5D8B803FF8BF803FCAE1803F73ED80AD +:106548003FCAE1803FF8BF803F5D8B803F31498083 +:106558003F0000803FF16D7F3F75EA7E3F4C827EB1 +:106568003F833F7E3F84287E3F833F7E3F4C827E31 +:106578003F75EA7E3FF16D7F3F0000803F3F4D361B +:10658800B90A6C0A360AE209FB09140A0102030473 +:06659800050607080900DA :00000001FF diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c index 0921bd593..d2316ba1b 100644 --- a/quantum/audio/voices.c +++ b/quantum/audio/voices.c @@ -54,28 +54,28 @@ float voice_envelope(float frequency) { } break; - case octave_crunch: - polyphony_rate = 0; - switch (compensated_index) { - case 0 ... 9: - case 20 ... 24: - case 30 ... 32: - frequency = frequency / 2; - note_timbre = TIMBRE_12; - break; - - case 10 ... 19: - case 25 ... 29: - case 33 ... 35: - frequency = frequency * 2; - note_timbre = TIMBRE_12; - break; + // case octave_crunch: + // polyphony_rate = 0; + // switch (compensated_index) { + // case 0 ... 9: + // case 20 ... 24: + // case 30 ... 32: + // frequency = frequency / 2; + // note_timbre = TIMBRE_12; + // break; + + // case 10 ... 19: + // case 25 ... 29: + // case 33 ... 35: + // frequency = frequency * 2; + // note_timbre = TIMBRE_12; + // break; - default: - note_timbre = TIMBRE_12; - break; - } - break; + // default: + // note_timbre = TIMBRE_12; + // break; + // } + // break; case duty_osc: // This slows the loop down a substantial amount, so higher notes may freeze -- cgit v1.3.1 From 9ab7098c834ffe601ad5c39759acfddabbd6373f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 29 Apr 2016 21:21:08 -0400 Subject: fixes plover start sound --- keyboard/planck/keymaps/default/keymap.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index e7a9ea9e4..ac4937b69 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -319,15 +319,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 12: if (record->event.pressed) { #ifdef AUDIO_ENABLE + stop_all_notes(); PLAY_NOTE_ARRAY(tone_plover, false, 0); #endif layer_off(_RAISE); layer_off(_LOWER); layer_off(_ADJUST); layer_off(_MUSIC); - #ifdef AUDIO_ENABLE - stop_all_notes(); - #endif layer_on(_PLOVER); if (!eeconfig_is_enabled()) { eeconfig_init(); -- cgit v1.3.1 From 0656f2fa10e25e160617c3e5d14cfbae35dd9c8d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 29 Apr 2016 22:19:40 -0400 Subject: moves backlight functionality to keyboard files and updates template makefile previously there were two backlight.c files (bad) --- keyboard/atomic/Makefile | 4 --- keyboard/atomic/atomic.c | 61 ++++++++++++++++++++++++++++++++++++++++++ keyboard/atomic/atomic.h | 5 +++- keyboard/atomic/backlight.c | 63 -------------------------------------------- keyboard/planck/Makefile | 4 --- keyboard/planck/backlight.c | 61 ------------------------------------------ keyboard/planck/planck.c | 61 ++++++++++++++++++++++++++++++++++++++++++ keyboard/planck/planck.h | 1 + keyboard/preonic/Makefile | 5 ---- keyboard/preonic/backlight.c | 61 ------------------------------------------ keyboard/preonic/preonic.c | 63 +++++++++++++++++++++++++++++++++++++++++++- keyboard/preonic/preonic.h | 1 + quantum/template/Makefile | 46 ++++++++++++++++++++++---------- quantum/template/template.c | 61 ++++++++++++++++++++++++++++++++++++++++++ quantum/template/template.h | 5 +++- 15 files changed, 287 insertions(+), 215 deletions(-) delete mode 100644 keyboard/atomic/backlight.c delete mode 100644 keyboard/planck/backlight.c delete mode 100644 keyboard/preonic/backlight.c (limited to 'keyboard/planck') diff --git a/keyboard/atomic/Makefile b/keyboard/atomic/Makefile index 1d91c34b7..c1a0a6db4 100644 --- a/keyboard/atomic/Makefile +++ b/keyboard/atomic/Makefile @@ -171,10 +171,6 @@ endif endif -ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) - SRC := backlight.c $(SRC) -endif - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c index 5e31264e6..399649716 100644 --- a/keyboard/atomic/atomic.c +++ b/keyboard/atomic/atomic.c @@ -57,3 +57,64 @@ void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); } + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif \ No newline at end of file diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h index d5461e424..0c7aeb1cc 100644 --- a/keyboard/atomic/atomic.h +++ b/keyboard/atomic/atomic.h @@ -3,8 +3,11 @@ #include "matrix.h" #include "keymap_common.h" -#include "backlight.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif #include +#include // This a shortcut to help you visually see your layout. // The following is an example using the Planck MIT layout diff --git a/keyboard/atomic/backlight.c b/keyboard/atomic/backlight.c deleted file mode 100644 index 647b57e71..000000000 --- a/keyboard/atomic/backlight.c +++ /dev/null @@ -1,63 +0,0 @@ - -#include -#include "backlight.h" -#include "atomic.h" - - -#define CHANNEL OCR1C - -void backlight_init_ports() -{ - - // Setup PB7 as output and output low. - DDRB |= (1<<7); - PORTB &= ~(1<<7); - - // Use full 16-bit resolution. - ICR1 = 0xFFFF; - - // I could write a wall of text here to explain... but TL;DW - // Go read the ATmega32u4 datasheet. - // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on - - // Pin PB7 = OCR1C (Timer 1, Channel C) - // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 - // (i.e. start high, go low when counter matches.) - // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 - // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 - - TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - } - else if ( level == BACKLIGHT_LEVELS ) - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF; - } - else - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } -} \ No newline at end of file diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 01d9e3ce9..c0c6201cb 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -171,10 +171,6 @@ endif endif -ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) - SRC := backlight.c $(SRC) -endif - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/planck/backlight.c b/keyboard/planck/backlight.c deleted file mode 100644 index f69364b2a..000000000 --- a/keyboard/planck/backlight.c +++ /dev/null @@ -1,61 +0,0 @@ - -#include -#include "backlight.h" - -#define CHANNEL OCR1C - -void backlight_init_ports() -{ - - // Setup PB7 as output and output low. - DDRB |= (1<<7); - PORTB &= ~(1<<7); - - // Use full 16-bit resolution. - ICR1 = 0xFFFF; - - // I could write a wall of text here to explain... but TL;DW - // Go read the ATmega32u4 datasheet. - // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on - - // Pin PB7 = OCR1C (Timer 1, Channel C) - // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 - // (i.e. start high, go low when counter matches.) - // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 - // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 - - TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - } - else if ( level == BACKLIGHT_LEVELS ) - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF; - } - else - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } -} \ No newline at end of file diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index 4b39cf1e8..655850150 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -32,3 +32,64 @@ void matrix_scan_kb(void) { void process_action_kb(keyrecord_t *record) { process_action_user(record); } + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif \ No newline at end of file diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index edcb5fbff..c5b59d999 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -10,6 +10,7 @@ #include "rgblight.h" #endif #include +#include #ifdef MIDI_ENABLE #include #endif diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 3504e2720..259dd6686 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -162,11 +162,6 @@ endif endif -ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) - SRC := backlight.c $(SRC) -endif - - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/preonic/backlight.c b/keyboard/preonic/backlight.c deleted file mode 100644 index f69364b2a..000000000 --- a/keyboard/preonic/backlight.c +++ /dev/null @@ -1,61 +0,0 @@ - -#include -#include "backlight.h" - -#define CHANNEL OCR1C - -void backlight_init_ports() -{ - - // Setup PB7 as output and output low. - DDRB |= (1<<7); - PORTB &= ~(1<<7); - - // Use full 16-bit resolution. - ICR1 = 0xFFFF; - - // I could write a wall of text here to explain... but TL;DW - // Go read the ATmega32u4 datasheet. - // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on - - // Pin PB7 = OCR1C (Timer 1, Channel C) - // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 - // (i.e. start high, go low when counter matches.) - // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 - // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 - - TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - } - else if ( level == BACKLIGHT_LEVELS ) - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF; - } - else - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } -} \ No newline at end of file diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c index f639f247a..211f8d029 100644 --- a/keyboard/preonic/preonic.c +++ b/keyboard/preonic/preonic.c @@ -38,4 +38,65 @@ void matrix_scan_kb(void) { void process_action_kb(keyrecord_t *record) { process_action_user(record); -} \ No newline at end of file +} + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif \ No newline at end of file diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 51ed9ba39..030acdadb 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -10,6 +10,7 @@ #include "rgblight.h" #endif #include +#include #ifdef MIDI_ENABLE #include #endif diff --git a/quantum/template/Makefile b/quantum/template/Makefile index 4fa195468..1a535ef2c 100644 --- a/quantum/template/Makefile +++ b/quantum/template/Makefile @@ -111,23 +111,41 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 # Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -#NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -# MIDI_ENABLE = YES # MIDI controls -# UNICODE_ENABLE = YES # Unicode -# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +ifdef KEYMAP + +ifeq ("$(wildcard keymaps/$(KEYMAP).c)","") +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") + include keymaps/$(KEYMAP)/makefile.mk +endif +endif + +else + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") + include keymaps/default/makefile.mk +endif + +endif + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/quantum/template/template.c b/quantum/template/template.c index cc52e496f..6050a2d20 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -46,3 +46,64 @@ void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); } + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif \ No newline at end of file diff --git a/quantum/template/template.h b/quantum/template/template.h index b1c34d3cb..22742105a 100644 --- a/quantum/template/template.h +++ b/quantum/template/template.h @@ -3,7 +3,10 @@ #include "matrix.h" #include "keymap_common.h" -#include "backlight.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif +#include #include // This a shortcut to help you visually see your layout. -- cgit v1.3.1 From 83e1cc241e3aabd69f6cdcd2581477d4b85bb8d3 Mon Sep 17 00:00:00 2001 From: IBNobody Date: Tue, 3 May 2016 12:56:40 -0500 Subject: Clarified audio.c (#302) * Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs --- keyboard/atomic/keymaps/pvc/config.h | 5 + keyboard/atomic/keymaps/pvc/keymap.c | 107 ++--- keyboard/planck/keymaps/pvc/config.h | 2 +- keyboard/planck/keymaps/pvc/keymap.c | 4 +- keyboard/planck/keymaps/pvc/makefile.mk | 3 +- quantum/audio/audio.c | 766 ++++++++++++++------------------ quantum/audio/audio.h | 6 +- quantum/audio/audio_pwm.c | 643 +++++++++++++++++++++++++++ quantum/audio/frequency_lut.h | 357 --------------- quantum/audio/luts.c | 382 ++++++++++++++++ quantum/audio/luts.h | 15 + quantum/audio/vibrato_lut.h | 28 -- quantum/audio/voices.c | 8 +- quantum/audio/voices.h | 3 +- quantum/keymap_common.c | 6 +- quantum/quantum.mk | 1 + 16 files changed, 1444 insertions(+), 892 deletions(-) create mode 100644 quantum/audio/audio_pwm.c delete mode 100644 quantum/audio/frequency_lut.h create mode 100644 quantum/audio/luts.c create mode 100644 quantum/audio/luts.h delete mode 100644 quantum/audio/vibrato_lut.h (limited to 'keyboard/planck') diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h index cc9263464..034bc5dc5 100644 --- a/keyboard/atomic/keymaps/pvc/config.h +++ b/keyboard/atomic/keymaps/pvc/config.h @@ -158,4 +158,9 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION + +//#define VIBRATO_ENABLE +//#define VIBRATO_STRENGTH_ENABLE + + #endif diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c index e17c41e23..3d604a868 100644 --- a/keyboard/atomic/keymaps/pvc/keymap.c +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -11,8 +11,8 @@ #define LAYER_QWERTY 0 #define LAYER_COLEMAK 1 #define LAYER_DVORAK 2 -#define LAYER_LOWER 3 -#define LAYER_RAISE 4 +#define LAYER_RAISE 3 +#define LAYER_LOWER 4 #define LAYER_FUNCTION 5 #define LAYER_MOUSE 6 #define LAYER_MUSIC 7 @@ -21,8 +21,8 @@ #define MACRO_QWERTY 0 #define MACRO_COLEMAK 1 #define MACRO_DVORAK 2 -#define MACRO_LOWER 3 -#define MACRO_RAISE 4 +#define MACRO_RAISE 3 +#define MACRO_LOWER 4 #define MACRO_FUNCTION 5 #define MACRO_MOUSE 6 #define MACRO_TIMBRE_1 7 @@ -42,8 +42,8 @@ #define M_QWRTY M(MACRO_QWERTY) #define M_COLMK M(MACRO_COLEMAK) #define M_DVORK M(MACRO_DVORAK) -#define M_LOWER M(MACRO_LOWER) #define M_RAISE M(MACRO_RAISE) +#define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) #define M_MOUSE M(MACRO_MOUSE) #define TIMBR_1 M(MACRO_TIMBRE_1) @@ -148,23 +148,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, }, + [LAYER_RAISE] = { /* RAISED */ + { KC_TILD, KC_PSCR, KC_PAUS, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, + { _______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, + { _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, + { _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, [LAYER_LOWER] = { /* LOWERED */ { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, - { _______, _______, _______, _______, SC_CCLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, - { _______, SC_REDO, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, + { _______, KC_F13, KC_F14, KC_F15, KC_F16, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, + { _______, KC_F17, KC_F18, KC_F19, KC_F20, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, + { _______, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ }, }, - [LAYER_RAISE] = { /* RAISED */ - { KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, - { _______, _______, _______, _______, SC_ACLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, - { _______, SC_SELA, SC_SAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, - { _______, SC_UNDO, SC_CUT, SC_COPY, SC_PSTE, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, - [LAYER_FUNCTION] = { /* FUNCTION */ { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS }, @@ -281,28 +280,28 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; - case MACRO_LOWER: + case MACRO_RAISE: if (record->event.pressed) { - layer_on(LAYER_LOWER); + layer_on(LAYER_RAISE); update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); } else { - layer_off(LAYER_LOWER); + layer_off(LAYER_RAISE); update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); } break; - case MACRO_RAISE: + case MACRO_LOWER: if (record->event.pressed) { - layer_on(LAYER_RAISE); + layer_on(LAYER_LOWER); update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); } else { - layer_off(LAYER_RAISE); + layer_off(LAYER_LOWER); update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); } break; @@ -468,36 +467,40 @@ void led_set_user(uint8_t usb_led) _delay_ms(10); // gets rid of tick - if ((usb_led & (1<. */ /* disable debug print */ -//#define NO_DEBUG +#define NO_DEBUG /* disable print */ //#define NO_PRINT diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c index 27850b215..830b00a4c 100644 --- a/keyboard/planck/keymaps/pvc/keymap.c +++ b/keyboard/planck/keymaps/pvc/keymap.c @@ -96,7 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_QWERTY] = { /* QWERTY */ { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, - { KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, + { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, }, @@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_COLEMAK] = { /* COLEMAK */ { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC }, - { KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT }, + { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT }, { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, }, diff --git a/keyboard/planck/keymaps/pvc/makefile.mk b/keyboard/planck/keymaps/pvc/makefile.mk index 4b9e34c53..b3f1b9e51 100644 --- a/keyboard/planck/keymaps/pvc/makefile.mk +++ b/keyboard/planck/keymaps/pvc/makefile.mk @@ -4,6 +4,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode @@ -13,4 +14,4 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -CONFIG_H = keymaps/$(KEYMAP)/config.h +CONFIG_H = keymaps/$(KEYMAP)/config.h \ No newline at end of file diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index e85370d95..3a7f0f556 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -1,6 +1,6 @@ #include #include -#include +//#include #include #include #include @@ -10,30 +10,28 @@ #include "eeconfig.h" -#ifdef VIBRATO_ENABLE - #include "vibrato_lut.h" -#endif +#define CPU_PRESCALER 8 -#define PI 3.14159265 +// ----------------------------------------------------------------------------- +// Timer Abstractions +// ----------------------------------------------------------------------------- -#define CPU_PRESCALER 8 +// TIMSK3 - Timer/Counter #3 Interrupt Mask Register +// Turn on/off 3A interputs, stopping/enabling the ISR calls +#define ENABLE_AUDIO_COUNTER_3_ISR TIMSK3 |= _BV(OCIE3A) +#define DISABLE_AUDIO_COUNTER_3_ISR TIMSK3 &= ~_BV(OCIE3A) -#ifdef PWM_AUDIO - #include "wave.h" - #define SAMPLE_DIVIDER 39 - #define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048) - // Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap +// TCCR3A: Timer/Counter #3 Control Register +// Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 +#define ENABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A |= _BV(COM3A1); +#define DISABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A &= ~(_BV(COM3A1) | _BV(COM3A0)); - float places[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - uint16_t place_int = 0; - bool repeat = true; -#endif +// Fast PWM Mode Controls +#define TIMER_3_PERIOD ICR3 +#define TIMER_3_DUTY_CYCLE OCR3A + +// ----------------------------------------------------------------------------- -void delay_us(int count) { - while(count--) { - _delay_us(1); - } -} int voices = 0; int voice_place = 0; @@ -45,26 +43,23 @@ float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0}; int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0}; bool sliding = false; -int max = 0xFF; -float sum = 0; float place = 0; uint8_t * sample; uint16_t sample_length = 0; -// float freq = 0; - -bool notes = false; -bool note = false; -float note_frequency = 0; -float note_length = 0; -float note_tempo = TEMPO_DEFAULT; -float note_timbre = TIMBRE_DEFAULT; + +bool playing_notes = false; +bool playing_note = false; +float note_frequency = 0; +float note_length = 0; +uint8_t note_tempo = TEMPO_DEFAULT; +float note_timbre = TIMBRE_DEFAULT; uint16_t note_position = 0; float (* notes_pointer)[][2]; uint16_t notes_count; -bool notes_repeat; -float notes_rest; -bool note_resting = false; +bool notes_repeat; +float notes_rest; +bool note_resting = false; uint8_t current_note = 0; uint8_t rest_counter = 0; @@ -77,175 +72,65 @@ float vibrato_rate = 0.125; float polyphony_rate = 0; -bool inited = false; +static bool audio_initialized = false; audio_config_t audio_config; uint16_t envelope_index = 0; -void audio_toggle(void) { - audio_config.enable ^= 1; - eeconfig_update_audio(audio_config.raw); -} - -void audio_on(void) { - audio_config.enable = 1; - eeconfig_update_audio(audio_config.raw); -} - -void audio_off(void) { - audio_config.enable = 0; - eeconfig_update_audio(audio_config.raw); -} - -#ifdef VIBRATO_ENABLE -// Vibrato rate functions - -void set_vibrato_rate(float rate) { - vibrato_rate = rate; -} - -void increase_vibrato_rate(float change) { - vibrato_rate *= change; -} - -void decrease_vibrato_rate(float change) { - vibrato_rate /= change; -} - -#ifdef VIBRATO_STRENGTH_ENABLE - -void set_vibrato_strength(float strength) { - vibrato_strength = strength; -} - -void increase_vibrato_strength(float change) { - vibrato_strength *= change; -} - -void decrease_vibrato_strength(float change) { - vibrato_strength /= change; -} - -#endif - -#endif - -// Polyphony functions - -void set_polyphony_rate(float rate) { - polyphony_rate = rate; -} - -void enable_polyphony() { - polyphony_rate = 5; -} - -void disable_polyphony() { - polyphony_rate = 0; -} - -void increase_polyphony_rate(float change) { - polyphony_rate *= change; -} - -void decrease_polyphony_rate(float change) { - polyphony_rate /= change; -} - -// Timbre function - -void set_timbre(float timbre) { - note_timbre = timbre; -} - -// Tempo functions - -void set_tempo(float tempo) { - note_tempo = tempo; -} - -void decrease_tempo(uint8_t tempo_change) { - note_tempo += (float) tempo_change; -} - -void increase_tempo(uint8_t tempo_change) { - if (note_tempo - (float) tempo_change < 10) { - note_tempo = 10; - } else { - note_tempo -= (float) tempo_change; - } -} - -void audio_init() { +void audio_init() +{ - /* check signature */ - if (!eeconfig_is_enabled()) { + // Check EEPROM + if (!eeconfig_is_enabled()) + { eeconfig_init(); } audio_config.raw = eeconfig_read_audio(); - #ifdef PWM_AUDIO - PLLFRQ = _BV(PDIV2); - PLLCSR = _BV(PLLE); - while(!(PLLCSR & _BV(PLOCK))); - PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */ + // Set port PC6 (OC3A and /OC4A) as output + DDRC |= _BV(PORTC6); - /* Init a fast PWM on Timer4 */ - TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */ - TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */ - OCR4A = 0; + DISABLE_AUDIO_COUNTER_3_ISR; - /* Enable the OC4A output */ - DDRC |= _BV(PORTC6); + // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers + // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 + // Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) + // Clock Select (CS3n) = 0b010 = Clock / 8 + TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); + TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); - TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs - - TCCR3A = 0x0; // Options not needed - TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC - OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback - #else - DDRC |= _BV(PORTC6); - - TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs - - TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); - TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); - #endif - - inited = true; + audio_initialized = true; } -void stop_all_notes() { - if (!inited) { +void stop_all_notes() +{ + if (!audio_initialized) { audio_init(); } voices = 0; - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif - notes = false; - note = false; + + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + + playing_notes = false; + playing_note = false; frequency = 0; volume = 0; - for (int i = 0; i < 8; i++) { + for (uint8_t i = 0; i < 8; i++) + { frequencies[i] = 0; volumes[i] = 0; } } -void stop_note(float freq) { - if (note) { - if (!inited) { +void stop_note(float freq) +{ + if (playing_note) { + if (!audio_initialized) { audio_init(); } - #ifdef PWM_AUDIO - freq = freq / SAMPLE_RATE; - #endif for (int i = 7; i >= 0; i--) { if (frequencies[i] == freq) { frequencies[i] = 0; @@ -266,15 +151,11 @@ void stop_note(float freq) { voice_place = 0; } if (voices == 0) { - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; frequency = 0; volume = 0; - note = false; + playing_note = false; } } } @@ -289,9 +170,9 @@ float mod(float a, int b) float vibrato(float average_freq) { #ifdef VIBRATO_STRENGTH_ENABLE - float vibrated_freq = average_freq * pow(VIBRATO_LUT[(int)vibrato_counter], vibrato_strength); + float vibrated_freq = average_freq * pow(vibrato_lut[(int)vibrato_counter], vibrato_strength); #else - float vibrated_freq = average_freq * VIBRATO_LUT[(int)vibrato_counter]; + float vibrated_freq = average_freq * vibrato_lut[(int)vibrato_counter]; #endif vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0/average_freq)), VIBRATO_LUT_LENGTH); return vibrated_freq; @@ -299,295 +180,295 @@ float vibrato(float average_freq) { #endif -ISR(TIMER3_COMPA_vect) { - if (note) { - #ifdef PWM_AUDIO - if (voices == 1) { - // SINE - OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 2; - - // SQUARE - // if (((int)place) >= 1024){ - // OCR4A = 0xFF >> 2; - // } else { - // OCR4A = 0x00; - // } - - // SAWTOOTH - // OCR4A = (int)place / 4; - - // TRIANGLE - // if (((int)place) >= 1024) { - // OCR4A = (int)place / 2; - // } else { - // OCR4A = 2048 - (int)place / 2; - // } - - place += frequency; - - if (place >= SINE_LENGTH) - place -= SINE_LENGTH; - - } else { - int sum = 0; - for (int i = 0; i < voices; i++) { - // SINE - sum += pgm_read_byte(&sinewave[(uint16_t)places[i]]) >> 2; - - // SQUARE - // if (((int)places[i]) >= 1024){ - // sum += 0xFF >> 2; - // } else { - // sum += 0x00; - // } - - places[i] += frequencies[i]; - - if (places[i] >= SINE_LENGTH) - places[i] -= SINE_LENGTH; - } - OCR4A = sum; - } - #else - if (voices > 0) { - float freq; - if (polyphony_rate > 0) { - if (voices > 1) { - voice_place %= voices; - if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { - voice_place = (voice_place + 1) % voices; - place = 0.0; - } - } - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(frequencies[voice_place]); - } else { - #else - { - #endif - freq = frequencies[voice_place]; - } - } else { - if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { - frequency = frequency * pow(2, 440/frequency/12/2); - } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { - frequency = frequency * pow(2, -440/frequency/12/2); - } else { - frequency = frequencies[voices - 1]; - } - - - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(frequency); - } else { - #else - { - #endif - freq = frequency; - } - } +ISR(TIMER3_COMPA_vect) +{ + float freq; + + if (playing_note) { + if (voices > 0) { + if (polyphony_rate > 0) { + if (voices > 1) { + voice_place %= voices; + if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { + voice_place = (voice_place + 1) % voices; + place = 0.0; + } + } + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequencies[voice_place]); + } else { + freq = frequencies[voice_place]; + } + #else + freq = frequencies[voice_place]; + #endif + } else { + if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, 440/frequency/12/2); + } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, -440/frequency/12/2); + } else { + frequency = frequencies[voices - 1]; + } + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequency); + } else { + freq = frequency; + } + #else + freq = frequency; + #endif + } + + if (envelope_index < 65535) { + envelope_index++; + } + + freq = voice_envelope(freq); + + if (freq < 30.517578125) { + freq = 30.52; + } + + TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); + TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); + } + } + + if (playing_notes) { + if (note_frequency > 0) { + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(note_frequency); + } else { + freq = note_frequency; + } + #else + freq = note_frequency; + #endif + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); + TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); + } else { + TIMER_3_PERIOD = 0; + TIMER_3_DUTY_CYCLE = 0; + } + + note_position++; + bool end_of_note = false; + if (TIMER_3_PERIOD > 0) { + end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF)); + } else { + end_of_note = (note_position >= (note_length * 0x7FF)); + } + + if (end_of_note) { + current_note++; + if (current_note >= notes_count) { + if (notes_repeat) { + current_note = 0; + } else { + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + playing_notes = false; + return; + } + } + if (!note_resting && (notes_rest > 0)) { + note_resting = true; + note_frequency = 0; + note_length = notes_rest; + current_note--; + } else { + note_resting = false; + envelope_index = 0; + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); + } + + note_position = 0; + } + } + + if (!audio_config.enable) { + playing_notes = false; + playing_note = false; + } +} - if (envelope_index < 65535) { - envelope_index++; - } - freq = voice_envelope(freq); +void play_note(float freq, int vol) { - if (freq < 30.517578125) - freq = 30.52; - ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period - OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period - } - #endif + if (!audio_initialized) { + audio_init(); } - // SAMPLE - // OCR4A = pgm_read_byte(&sample[(uint16_t)place_int]); - - // place_int++; - - // if (place_int >= sample_length) - // if (repeat) - // place_int -= sample_length; - // else - // TIMSK3 &= ~_BV(OCIE3A); - - - if (notes) { - #ifdef PWM_AUDIO - OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 0; - - place += note_frequency; - if (place >= SINE_LENGTH) - place -= SINE_LENGTH; - #else - if (note_frequency > 0) { - float freq; - - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(note_frequency); - } else { - #else - { - #endif - freq = note_frequency; - } + if (audio_config.enable && voices < 8) { + DISABLE_AUDIO_COUNTER_3_ISR; - if (envelope_index < 65535) { - envelope_index++; - } - freq = voice_envelope(freq); + // Cancel notes if notes are playing + if (playing_notes) + stop_all_notes(); - ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period - OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period - } else { - ICR3 = 0; - OCR3A = 0; - } - #endif - - - note_position++; - bool end_of_note = false; - if (ICR3 > 0) - end_of_note = (note_position >= (note_length / ICR3 * 0xFFFF)); - else - end_of_note = (note_position >= (note_length * 0x7FF)); - if (end_of_note) { - current_note++; - if (current_note >= notes_count) { - if (notes_repeat) { - current_note = 0; - } else { - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif - notes = false; - return; - } - } - if (!note_resting && (notes_rest > 0)) { - note_resting = true; - note_frequency = 0; - note_length = notes_rest; - current_note--; - } else { - note_resting = false; - #ifdef PWM_AUDIO - note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; - note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100); - #else - envelope_index = 0; - note_frequency = (*notes_pointer)[current_note][0]; - note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100); - #endif - } - note_position = 0; - } + playing_note = true; - } + envelope_index = 0; + + if (freq > 0) { + frequencies[voices] = freq; + volumes[voices] = vol; + voices++; + } + + ENABLE_AUDIO_COUNTER_3_ISR; + ENABLE_AUDIO_COUNTER_3_OUTPUT; + } - if (!audio_config.enable) { - notes = false; - note = false; - } } -void play_note(float freq, int vol) { +void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) +{ - if (!inited) { + if (!audio_initialized) { audio_init(); } -if (audio_config.enable && voices < 8) { - TIMSK3 &= ~_BV(OCIE3A); - // Cancel notes if notes are playing - if (notes) - stop_all_notes(); - note = true; - envelope_index = 0; - #ifdef PWM_AUDIO - freq = freq / SAMPLE_RATE; - #endif - if (freq > 0) { - frequencies[voices] = freq; - volumes[voices] = vol; - voices++; - } + if (audio_config.enable) { + + DISABLE_AUDIO_COUNTER_3_ISR; + + // Cancel note if a note is playing + if (playing_note) + stop_all_notes(); + + playing_notes = true; + + notes_pointer = np; + notes_count = n_count; + notes_repeat = n_repeat; + notes_rest = n_rest; + + place = 0; + current_note = 0; + + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); + note_position = 0; + + + ENABLE_AUDIO_COUNTER_3_ISR; + ENABLE_AUDIO_COUNTER_3_OUTPUT; + } - #ifdef PWM_AUDIO - TIMSK3 |= _BV(OCIE3A); - #else - TIMSK3 |= _BV(OCIE3A); - TCCR3A |= _BV(COM3A1); - #endif } +bool is_playing_notes(void) { + return playing_notes; } -void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) { +void audio_toggle(void) { + audio_config.enable ^= 1; + eeconfig_update_audio(audio_config.raw); +} - if (!inited) { - audio_init(); - } +void audio_on(void) { + audio_config.enable = 1; + eeconfig_update_audio(audio_config.raw); +} -if (audio_config.enable) { - TIMSK3 &= ~_BV(OCIE3A); - // Cancel note if a note is playing - if (note) - stop_all_notes(); - notes = true; - - notes_pointer = np; - notes_count = n_count; - notes_repeat = n_repeat; - notes_rest = n_rest; - - place = 0; - current_note = 0; - #ifdef PWM_AUDIO - note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; - note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100); - #else - note_frequency = (*notes_pointer)[current_note][0]; - note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100); - #endif - note_position = 0; +void audio_off(void) { + audio_config.enable = 0; + eeconfig_update_audio(audio_config.raw); +} +#ifdef VIBRATO_ENABLE - #ifdef PWM_AUDIO - TIMSK3 |= _BV(OCIE3A); - #else - TIMSK3 |= _BV(OCIE3A); - TCCR3A |= _BV(COM3A1); - #endif +// Vibrato rate functions + +void set_vibrato_rate(float rate) { + vibrato_rate = rate; } +void increase_vibrato_rate(float change) { + vibrato_rate *= change; } -#ifdef PWM_AUDIO -void play_sample(uint8_t * s, uint16_t l, bool r) { - if (!inited) { - audio_init(); - } +void decrease_vibrato_rate(float change) { + vibrato_rate /= change; +} - if (audio_config.enable) { - TIMSK3 &= ~_BV(OCIE3A); - stop_all_notes(); - place_int = 0; - sample = s; - sample_length = l; - repeat = r; +#ifdef VIBRATO_STRENGTH_ENABLE + +void set_vibrato_strength(float strength) { + vibrato_strength = strength; +} + +void increase_vibrato_strength(float change) { + vibrato_strength *= change; +} + +void decrease_vibrato_strength(float change) { + vibrato_strength /= change; +} + +#endif /* VIBRATO_STRENGTH_ENABLE */ + +#endif /* VIBRATO_ENABLE */ - TIMSK3 |= _BV(OCIE3A); +// Polyphony functions + +void set_polyphony_rate(float rate) { + polyphony_rate = rate; +} + +void enable_polyphony() { + polyphony_rate = 5; +} + +void disable_polyphony() { + polyphony_rate = 0; +} + +void increase_polyphony_rate(float change) { + polyphony_rate *= change; +} + +void decrease_polyphony_rate(float change) { + polyphony_rate /= change; +} + +// Timbre function + +void set_timbre(float timbre) { + note_timbre = timbre; +} + +// Tempo functions + +void set_tempo(uint8_t tempo) { + note_tempo = tempo; +} + +void decrease_tempo(uint8_t tempo_change) { + note_tempo += tempo_change; +} + +void increase_tempo(uint8_t tempo_change) { + if (note_tempo - tempo_change < 10) { + note_tempo = 10; + } else { + note_tempo -= tempo_change; } } -#endif + //------------------------------------------------------------------------------ // Override these functions in your keymap file to play different tunes on @@ -597,11 +478,8 @@ void play_startup_tone() { } - - __attribute__ ((weak)) void play_goodbye_tone() { - } //------------------------------------------------------------------------------ diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index 89769507e..3d706587a 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -56,7 +56,7 @@ void increase_polyphony_rate(float change); void decrease_polyphony_rate(float change); void set_timbre(float timbre); -void set_tempo(float tempo); +void set_tempo(uint8_t tempo); void increase_tempo(uint8_t tempo_change); void decrease_tempo(uint8_t tempo_change); @@ -83,7 +83,11 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) #define NOTE_ARRAY_SIZE(x) ((int16_t)(sizeof(x) / (sizeof(x[0])))) #define PLAY_NOTE_ARRAY(note_array, note_repeat, note_rest_style) play_notes(¬e_array, NOTE_ARRAY_SIZE((note_array)), (note_repeat), (note_rest_style)); + +bool is_playing_notes(void); void play_goodbye_tone(void); void play_startup_tone(void); + + #endif \ No newline at end of file diff --git a/quantum/audio/audio_pwm.c b/quantum/audio/audio_pwm.c new file mode 100644 index 000000000..328a253a7 --- /dev/null +++ b/quantum/audio/audio_pwm.c @@ -0,0 +1,643 @@ +#include +#include +//#include +#include +#include +#include +#include "print.h" +#include "audio.h" +#include "keymap_common.h" + +#include "eeconfig.h" + +#define PI 3.14159265 + +#define CPU_PRESCALER 8 + + +// Timer Abstractions + +// TIMSK3 - Timer/Counter #3 Interrupt Mask Register +// Turn on/off 3A interputs, stopping/enabling the ISR calls +#define ENABLE_AUDIO_COUNTER_3_ISR TIMSK3 |= _BV(OCIE3A) +#define DISABLE_AUDIO_COUNTER_3_ISR TIMSK3 &= ~_BV(OCIE3A) + + +// TCCR3A: Timer/Counter #3 Control Register +// Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 +#define ENABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A |= _BV(COM3A1); +#define DISABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A &= ~(_BV(COM3A1) | _BV(COM3A0)); + + +#define NOTE_PERIOD ICR3 +#define NOTE_DUTY_CYCLE OCR3A + + +#ifdef PWM_AUDIO + #include "wave.h" + #define SAMPLE_DIVIDER 39 + #define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048) + // Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap + + float places[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + uint16_t place_int = 0; + bool repeat = true; +#endif + +void delay_us(int count) { + while(count--) { + _delay_us(1); + } +} + +int voices = 0; +int voice_place = 0; +float frequency = 0; +int volume = 0; +long position = 0; + +float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +bool sliding = false; + +float place = 0; + +uint8_t * sample; +uint16_t sample_length = 0; +// float freq = 0; + +bool playing_notes = false; +bool playing_note = false; +float note_frequency = 0; +float note_length = 0; +uint8_t note_tempo = TEMPO_DEFAULT; +float note_timbre = TIMBRE_DEFAULT; +uint16_t note_position = 0; +float (* notes_pointer)[][2]; +uint16_t notes_count; +bool notes_repeat; +float notes_rest; +bool note_resting = false; + +uint8_t current_note = 0; +uint8_t rest_counter = 0; + +#ifdef VIBRATO_ENABLE +float vibrato_counter = 0; +float vibrato_strength = .5; +float vibrato_rate = 0.125; +#endif + +float polyphony_rate = 0; + +static bool audio_initialized = false; + +audio_config_t audio_config; + +uint16_t envelope_index = 0; + +void audio_init() { + + // Check EEPROM + if (!eeconfig_is_enabled()) + { + eeconfig_init(); + } + audio_config.raw = eeconfig_read_audio(); + + #ifdef PWM_AUDIO + + PLLFRQ = _BV(PDIV2); + PLLCSR = _BV(PLLE); + while(!(PLLCSR & _BV(PLOCK))); + PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */ + + /* Init a fast PWM on Timer4 */ + TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */ + TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */ + OCR4A = 0; + + /* Enable the OC4A output */ + DDRC |= _BV(PORTC6); + + DISABLE_AUDIO_COUNTER_3_ISR; // Turn off 3A interputs + + TCCR3A = 0x0; // Options not needed + TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC + OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback + + #else + + // Set port PC6 (OC3A and /OC4A) as output + DDRC |= _BV(PORTC6); + + DISABLE_AUDIO_COUNTER_3_ISR; + + // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers + // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 + // Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) + // Clock Select (CS3n) = 0b010 = Clock / 8 + TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); + TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); + + #endif + + audio_initialized = true; +} + +void stop_all_notes() { + if (!audio_initialized) { + audio_init(); + } + voices = 0; + #ifdef PWM_AUDIO + DISABLE_AUDIO_COUNTER_3_ISR; + #else + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + #endif + + playing_notes = false; + playing_note = false; + frequency = 0; + volume = 0; + + for (uint8_t i = 0; i < 8; i++) + { + frequencies[i] = 0; + volumes[i] = 0; + } +} + +void stop_note(float freq) +{ + if (playing_note) { + if (!audio_initialized) { + audio_init(); + } + #ifdef PWM_AUDIO + freq = freq / SAMPLE_RATE; + #endif + for (int i = 7; i >= 0; i--) { + if (frequencies[i] == freq) { + frequencies[i] = 0; + volumes[i] = 0; + for (int j = i; (j < 7); j++) { + frequencies[j] = frequencies[j+1]; + frequencies[j+1] = 0; + volumes[j] = volumes[j+1]; + volumes[j+1] = 0; + } + break; + } + } + voices--; + if (voices < 0) + voices = 0; + if (voice_place >= voices) { + voice_place = 0; + } + if (voices == 0) { + #ifdef PWM_AUDIO + DISABLE_AUDIO_COUNTER_3_ISR; + #else + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + #endif + frequency = 0; + volume = 0; + playing_note = false; + } + } +} + +#ifdef VIBRATO_ENABLE + +float mod(float a, int b) +{ + float r = fmod(a, b); + return r < 0 ? r + b : r; +} + +float vibrato(float average_freq) { + #ifdef VIBRATO_STRENGTH_ENABLE + float vibrated_freq = average_freq * pow(vibrato_lut[(int)vibrato_counter], vibrato_strength); + #else + float vibrated_freq = average_freq * vibrato_lut[(int)vibrato_counter]; + #endif + vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0/average_freq)), VIBRATO_LUT_LENGTH); + return vibrated_freq; +} + +#endif + +ISR(TIMER3_COMPA_vect) +{ + if (playing_note) { + #ifdef PWM_AUDIO + if (voices == 1) { + // SINE + OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 2; + + // SQUARE + // if (((int)place) >= 1024){ + // OCR4A = 0xFF >> 2; + // } else { + // OCR4A = 0x00; + // } + + // SAWTOOTH + // OCR4A = (int)place / 4; + + // TRIANGLE + // if (((int)place) >= 1024) { + // OCR4A = (int)place / 2; + // } else { + // OCR4A = 2048 - (int)place / 2; + // } + + place += frequency; + + if (place >= SINE_LENGTH) + place -= SINE_LENGTH; + + } else { + int sum = 0; + for (int i = 0; i < voices; i++) { + // SINE + sum += pgm_read_byte(&sinewave[(uint16_t)places[i]]) >> 2; + + // SQUARE + // if (((int)places[i]) >= 1024){ + // sum += 0xFF >> 2; + // } else { + // sum += 0x00; + // } + + places[i] += frequencies[i]; + + if (places[i] >= SINE_LENGTH) + places[i] -= SINE_LENGTH; + } + OCR4A = sum; + } + #else + if (voices > 0) { + float freq; + if (polyphony_rate > 0) { + if (voices > 1) { + voice_place %= voices; + if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { + voice_place = (voice_place + 1) % voices; + place = 0.0; + } + } + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequencies[voice_place]); + } else { + #else + { + #endif + freq = frequencies[voice_place]; + } + } else { + if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, 440/frequency/12/2); + } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, -440/frequency/12/2); + } else { + frequency = frequencies[voices - 1]; + } + + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequency); + } else { + #else + { + #endif + freq = frequency; + } + } + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + if (freq < 30.517578125) + freq = 30.52; + NOTE_PERIOD = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period + NOTE_DUTY_CYCLE = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period + } + #endif + } + + // SAMPLE + // OCR4A = pgm_read_byte(&sample[(uint16_t)place_int]); + + // place_int++; + + // if (place_int >= sample_length) + // if (repeat) + // place_int -= sample_length; + // else + // DISABLE_AUDIO_COUNTER_3_ISR; + + + if (playing_notes) { + #ifdef PWM_AUDIO + OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 0; + + place += note_frequency; + if (place >= SINE_LENGTH) + place -= SINE_LENGTH; + #else + if (note_frequency > 0) { + float freq; + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(note_frequency); + } else { + #else + { + #endif + freq = note_frequency; + } + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + NOTE_PERIOD = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period + NOTE_DUTY_CYCLE = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period + } else { + NOTE_PERIOD = 0; + NOTE_DUTY_CYCLE = 0; + } + #endif + + + note_position++; + bool end_of_note = false; + if (NOTE_PERIOD > 0) + end_of_note = (note_position >= (note_length / NOTE_PERIOD * 0xFFFF)); + else + end_of_note = (note_position >= (note_length * 0x7FF)); + if (end_of_note) { + current_note++; + if (current_note >= notes_count) { + if (notes_repeat) { + current_note = 0; + } else { + #ifdef PWM_AUDIO + DISABLE_AUDIO_COUNTER_3_ISR; + #else + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + #endif + playing_notes = false; + return; + } + } + if (!note_resting && (notes_rest > 0)) { + note_resting = true; + note_frequency = 0; + note_length = notes_rest; + current_note--; + } else { + note_resting = false; + #ifdef PWM_AUDIO + note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; + note_length = (*notes_pointer)[current_note][1] * (((float)note_tempo) / 100); + #else + envelope_index = 0; + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); + #endif + } + note_position = 0; + } + + } + + if (!audio_config.enable) { + playing_notes = false; + playing_note = false; + } +} + +void play_note(float freq, int vol) { + + if (!audio_initialized) { + audio_init(); + } + + if (audio_config.enable && voices < 8) { + DISABLE_AUDIO_COUNTER_3_ISR; + + // Cancel notes if notes are playing + if (playing_notes) + stop_all_notes(); + + playing_note = true; + + envelope_index = 0; + + #ifdef PWM_AUDIO + freq = freq / SAMPLE_RATE; + #endif + if (freq > 0) { + frequencies[voices] = freq; + volumes[voices] = vol; + voices++; + } + + #ifdef PWM_AUDIO + ENABLE_AUDIO_COUNTER_3_ISR; + #else + ENABLE_AUDIO_COUNTER_3_ISR; + ENABLE_AUDIO_COUNTER_3_OUTPUT; + #endif + } + +} + +void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) +{ + + if (!audio_initialized) { + audio_init(); + } + + if (audio_config.enable) { + + DISABLE_AUDIO_COUNTER_3_ISR; + + // Cancel note if a note is playing + if (playing_note) + stop_all_notes(); + + playing_notes = true; + + notes_pointer = np; + notes_count = n_count; + notes_repeat = n_repeat; + notes_rest = n_rest; + + place = 0; + current_note = 0; + + #ifdef PWM_AUDIO + note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; + note_length = (*notes_pointer)[current_note][1] * (((float)note_tempo) / 100); + #else + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); + #endif + note_position = 0; + + + #ifdef PWM_AUDIO + ENABLE_AUDIO_COUNTER_3_ISR; + #else + ENABLE_AUDIO_COUNTER_3_ISR; + ENABLE_AUDIO_COUNTER_3_OUTPUT; + #endif + } + +} + +#ifdef PWM_AUDIO +void play_sample(uint8_t * s, uint16_t l, bool r) { + if (!audio_initialized) { + audio_init(); + } + + if (audio_config.enable) { + DISABLE_AUDIO_COUNTER_3_ISR; + stop_all_notes(); + place_int = 0; + sample = s; + sample_length = l; + repeat = r; + + ENABLE_AUDIO_COUNTER_3_ISR; + } +} +#endif + + +void audio_toggle(void) { + audio_config.enable ^= 1; + eeconfig_update_audio(audio_config.raw); +} + +void audio_on(void) { + audio_config.enable = 1; + eeconfig_update_audio(audio_config.raw); +} + +void audio_off(void) { + audio_config.enable = 0; + eeconfig_update_audio(audio_config.raw); +} + +#ifdef VIBRATO_ENABLE + +// Vibrato rate functions + +void set_vibrato_rate(float rate) { + vibrato_rate = rate; +} + +void increase_vibrato_rate(float change) { + vibrato_rate *= change; +} + +void decrease_vibrato_rate(float change) { + vibrato_rate /= change; +} + +#ifdef VIBRATO_STRENGTH_ENABLE + +void set_vibrato_strength(float strength) { + vibrato_strength = strength; +} + +void increase_vibrato_strength(float change) { + vibrato_strength *= change; +} + +void decrease_vibrato_strength(float change) { + vibrato_strength /= change; +} + +#endif /* VIBRATO_STRENGTH_ENABLE */ + +#endif /* VIBRATO_ENABLE */ + +// Polyphony functions + +void set_polyphony_rate(float rate) { + polyphony_rate = rate; +} + +void enable_polyphony() { + polyphony_rate = 5; +} + +void disable_polyphony() { + polyphony_rate = 0; +} + +void increase_polyphony_rate(float change) { + polyphony_rate *= change; +} + +void decrease_polyphony_rate(float change) { + polyphony_rate /= change; +} + +// Timbre function + +void set_timbre(float timbre) { + note_timbre = timbre; +} + +// Tempo functions + +void set_tempo(uint8_t tempo) { + note_tempo = tempo; +} + +void decrease_tempo(uint8_t tempo_change) { + note_tempo += tempo_change; +} + +void increase_tempo(uint8_t tempo_change) { + if (note_tempo - tempo_change < 10) { + note_tempo = 10; + } else { + note_tempo -= tempo_change; + } +} + + +//------------------------------------------------------------------------------ +// Override these functions in your keymap file to play different tunes on +// startup and bootloader jump +__attribute__ ((weak)) +void play_startup_tone() +{ +} + +__attribute__ ((weak)) +void play_goodbye_tone() +{ +} +//------------------------------------------------------------------------------ diff --git a/quantum/audio/frequency_lut.h b/quantum/audio/frequency_lut.h deleted file mode 100644 index e62da5be4..000000000 --- a/quantum/audio/frequency_lut.h +++ /dev/null @@ -1,357 +0,0 @@ -#include -#include -#include - -#define FREQUENCY_LUT_LENGTH 349 - -const uint16_t FREQUENCY_LUT[FREQUENCY_LUT_LENGTH] = { -0x8E0B, -0x8C02, -0x8A00, -0x8805, -0x8612, -0x8426, -0x8241, -0x8063, -0x7E8C, -0x7CBB, -0x7AF2, -0x792E, -0x7772, -0x75BB, -0x740B, -0x7261, -0x70BD, -0x6F20, -0x6D88, -0x6BF6, -0x6A69, -0x68E3, -0x6762, -0x65E6, -0x6470, -0x6300, -0x6194, -0x602E, -0x5ECD, -0x5D71, -0x5C1A, -0x5AC8, -0x597B, -0x5833, -0x56EF, -0x55B0, -0x5475, -0x533F, -0x520E, -0x50E1, -0x4FB8, -0x4E93, -0x4D73, -0x4C57, -0x4B3E, -0x4A2A, -0x491A, -0x480E, -0x4705, -0x4601, -0x4500, -0x4402, -0x4309, -0x4213, -0x4120, -0x4031, -0x3F46, -0x3E5D, -0x3D79, -0x3C97, -0x3BB9, -0x3ADD, -0x3A05, -0x3930, -0x385E, -0x3790, -0x36C4, -0x35FB, -0x3534, -0x3471, -0x33B1, -0x32F3, -0x3238, -0x3180, -0x30CA, -0x3017, -0x2F66, -0x2EB8, -0x2E0D, -0x2D64, -0x2CBD, -0x2C19, -0x2B77, -0x2AD8, -0x2A3A, -0x299F, -0x2907, -0x2870, -0x27DC, -0x2749, -0x26B9, -0x262B, -0x259F, -0x2515, -0x248D, -0x2407, -0x2382, -0x2300, -0x2280, -0x2201, -0x2184, -0x2109, -0x2090, -0x2018, -0x1FA3, -0x1F2E, -0x1EBC, -0x1E4B, -0x1DDC, -0x1D6E, -0x1D02, -0x1C98, -0x1C2F, -0x1BC8, -0x1B62, -0x1AFD, -0x1A9A, -0x1A38, -0x19D8, -0x1979, -0x191C, -0x18C0, -0x1865, -0x180B, -0x17B3, -0x175C, -0x1706, -0x16B2, -0x165E, -0x160C, -0x15BB, -0x156C, -0x151D, -0x14CF, -0x1483, -0x1438, -0x13EE, -0x13A4, -0x135C, -0x1315, -0x12CF, -0x128A, -0x1246, -0x1203, -0x11C1, -0x1180, -0x1140, -0x1100, -0x10C2, -0x1084, -0x1048, -0x100C, -0xFD1, -0xF97, -0xF5E, -0xF25, -0xEEE, -0xEB7, -0xE81, -0xE4C, -0xE17, -0xDE4, -0xDB1, -0xD7E, -0xD4D, -0xD1C, -0xCEC, -0xCBC, -0xC8E, -0xC60, -0xC32, -0xC05, -0xBD9, -0xBAE, -0xB83, -0xB59, -0xB2F, -0xB06, -0xADD, -0xAB6, -0xA8E, -0xA67, -0xA41, -0xA1C, -0x9F7, -0x9D2, -0x9AE, -0x98A, -0x967, -0x945, -0x923, -0x901, -0x8E0, -0x8C0, -0x8A0, -0x880, -0x861, -0x842, -0x824, -0x806, -0x7E8, -0x7CB, -0x7AF, -0x792, -0x777, -0x75B, -0x740, -0x726, -0x70B, -0x6F2, -0x6D8, -0x6BF, -0x6A6, -0x68E, -0x676, -0x65E, -0x647, -0x630, -0x619, -0x602, -0x5EC, -0x5D7, -0x5C1, -0x5AC, -0x597, -0x583, -0x56E, -0x55B, -0x547, -0x533, -0x520, -0x50E, -0x4FB, -0x4E9, -0x4D7, -0x4C5, -0x4B3, -0x4A2, -0x491, -0x480, -0x470, -0x460, -0x450, -0x440, -0x430, -0x421, -0x412, -0x403, -0x3F4, -0x3E5, -0x3D7, -0x3C9, -0x3BB, -0x3AD, -0x3A0, -0x393, -0x385, -0x379, -0x36C, -0x35F, -0x353, -0x347, -0x33B, -0x32F, -0x323, -0x318, -0x30C, -0x301, -0x2F6, -0x2EB, -0x2E0, -0x2D6, -0x2CB, -0x2C1, -0x2B7, -0x2AD, -0x2A3, -0x299, -0x290, -0x287, -0x27D, -0x274, -0x26B, -0x262, -0x259, -0x251, -0x248, -0x240, -0x238, -0x230, -0x228, -0x220, -0x218, -0x210, -0x209, -0x201, -0x1FA, -0x1F2, -0x1EB, -0x1E4, -0x1DD, -0x1D6, -0x1D0, -0x1C9, -0x1C2, -0x1BC, -0x1B6, -0x1AF, -0x1A9, -0x1A3, -0x19D, -0x197, -0x191, -0x18C, -0x186, -0x180, -0x17B, -0x175, -0x170, -0x16B, -0x165, -0x160, -0x15B, -0x156, -0x151, -0x14C, -0x148, -0x143, -0x13E, -0x13A, -0x135, -0x131, -0x12C, -0x128, -0x124, -0x120, -0x11C, -0x118, -0x114, -0x110, -0x10C, -0x108, -0x104, -0x100, -0xFD, -0xF9, -0xF5, -0xF2, -0xEE -}; \ No newline at end of file diff --git a/quantum/audio/luts.c b/quantum/audio/luts.c new file mode 100644 index 000000000..9f3de9a05 --- /dev/null +++ b/quantum/audio/luts.c @@ -0,0 +1,382 @@ +#include +#include +#include +#include "luts.h" + +const float vibrato_lut[VIBRATO_LUT_LENGTH] = +{ + 1.0022336811487, + 1.0042529943610, + 1.0058584256028, + 1.0068905285205, + 1.0072464122237, + 1.0068905285205, + 1.0058584256028, + 1.0042529943610, + 1.0022336811487, + 1.0000000000000, + 0.9977712970630, + 0.9957650169978, + 0.9941756956510, + 0.9931566259436, + 0.9928057204913, + 0.9931566259436, + 0.9941756956510, + 0.9957650169978, + 0.9977712970630, + 1.0000000000000, +}; + +const uint16_t frequency_lut[FREQUENCY_LUT_LENGTH] = +{ + 0x8E0B, + 0x8C02, + 0x8A00, + 0x8805, + 0x8612, + 0x8426, + 0x8241, + 0x8063, + 0x7E8C, + 0x7CBB, + 0x7AF2, + 0x792E, + 0x7772, + 0x75BB, + 0x740B, + 0x7261, + 0x70BD, + 0x6F20, + 0x6D88, + 0x6BF6, + 0x6A69, + 0x68E3, + 0x6762, + 0x65E6, + 0x6470, + 0x6300, + 0x6194, + 0x602E, + 0x5ECD, + 0x5D71, + 0x5C1A, + 0x5AC8, + 0x597B, + 0x5833, + 0x56EF, + 0x55B0, + 0x5475, + 0x533F, + 0x520E, + 0x50E1, + 0x4FB8, + 0x4E93, + 0x4D73, + 0x4C57, + 0x4B3E, + 0x4A2A, + 0x491A, + 0x480E, + 0x4705, + 0x4601, + 0x4500, + 0x4402, + 0x4309, + 0x4213, + 0x4120, + 0x4031, + 0x3F46, + 0x3E5D, + 0x3D79, + 0x3C97, + 0x3BB9, + 0x3ADD, + 0x3A05, + 0x3930, + 0x385E, + 0x3790, + 0x36C4, + 0x35FB, + 0x3534, + 0x3471, + 0x33B1, + 0x32F3, + 0x3238, + 0x3180, + 0x30CA, + 0x3017, + 0x2F66, + 0x2EB8, + 0x2E0D, + 0x2D64, + 0x2CBD, + 0x2C19, + 0x2B77, + 0x2AD8, + 0x2A3A, + 0x299F, + 0x2907, + 0x2870, + 0x27DC, + 0x2749, + 0x26B9, + 0x262B, + 0x259F, + 0x2515, + 0x248D, + 0x2407, + 0x2382, + 0x2300, + 0x2280, + 0x2201, + 0x2184, + 0x2109, + 0x2090, + 0x2018, + 0x1FA3, + 0x1F2E, + 0x1EBC, + 0x1E4B, + 0x1DDC, + 0x1D6E, + 0x1D02, + 0x1C98, + 0x1C2F, + 0x1BC8, + 0x1B62, + 0x1AFD, + 0x1A9A, + 0x1A38, + 0x19D8, + 0x1979, + 0x191C, + 0x18C0, + 0x1865, + 0x180B, + 0x17B3, + 0x175C, + 0x1706, + 0x16B2, + 0x165E, + 0x160C, + 0x15BB, + 0x156C, + 0x151D, + 0x14CF, + 0x1483, + 0x1438, + 0x13EE, + 0x13A4, + 0x135C, + 0x1315, + 0x12CF, + 0x128A, + 0x1246, + 0x1203, + 0x11C1, + 0x1180, + 0x1140, + 0x1100, + 0x10C2, + 0x1084, + 0x1048, + 0x100C, + 0xFD1, + 0xF97, + 0xF5E, + 0xF25, + 0xEEE, + 0xEB7, + 0xE81, + 0xE4C, + 0xE17, + 0xDE4, + 0xDB1, + 0xD7E, + 0xD4D, + 0xD1C, + 0xCEC, + 0xCBC, + 0xC8E, + 0xC60, + 0xC32, + 0xC05, + 0xBD9, + 0xBAE, + 0xB83, + 0xB59, + 0xB2F, + 0xB06, + 0xADD, + 0xAB6, + 0xA8E, + 0xA67, + 0xA41, + 0xA1C, + 0x9F7, + 0x9D2, + 0x9AE, + 0x98A, + 0x967, + 0x945, + 0x923, + 0x901, + 0x8E0, + 0x8C0, + 0x8A0, + 0x880, + 0x861, + 0x842, + 0x824, + 0x806, + 0x7E8, + 0x7CB, + 0x7AF, + 0x792, + 0x777, + 0x75B, + 0x740, + 0x726, + 0x70B, + 0x6F2, + 0x6D8, + 0x6BF, + 0x6A6, + 0x68E, + 0x676, + 0x65E, + 0x647, + 0x630, + 0x619, + 0x602, + 0x5EC, + 0x5D7, + 0x5C1, + 0x5AC, + 0x597, + 0x583, + 0x56E, + 0x55B, + 0x547, + 0x533, + 0x520, + 0x50E, + 0x4FB, + 0x4E9, + 0x4D7, + 0x4C5, + 0x4B3, + 0x4A2, + 0x491, + 0x480, + 0x470, + 0x460, + 0x450, + 0x440, + 0x430, + 0x421, + 0x412, + 0x403, + 0x3F4, + 0x3E5, + 0x3D7, + 0x3C9, + 0x3BB, + 0x3AD, + 0x3A0, + 0x393, + 0x385, + 0x379, + 0x36C, + 0x35F, + 0x353, + 0x347, + 0x33B, + 0x32F, + 0x323, + 0x318, + 0x30C, + 0x301, + 0x2F6, + 0x2EB, + 0x2E0, + 0x2D6, + 0x2CB, + 0x2C1, + 0x2B7, + 0x2AD, + 0x2A3, + 0x299, + 0x290, + 0x287, + 0x27D, + 0x274, + 0x26B, + 0x262, + 0x259, + 0x251, + 0x248, + 0x240, + 0x238, + 0x230, + 0x228, + 0x220, + 0x218, + 0x210, + 0x209, + 0x201, + 0x1FA, + 0x1F2, + 0x1EB, + 0x1E4, + 0x1DD, + 0x1D6, + 0x1D0, + 0x1C9, + 0x1C2, + 0x1BC, + 0x1B6, + 0x1AF, + 0x1A9, + 0x1A3, + 0x19D, + 0x197, + 0x191, + 0x18C, + 0x186, + 0x180, + 0x17B, + 0x175, + 0x170, + 0x16B, + 0x165, + 0x160, + 0x15B, + 0x156, + 0x151, + 0x14C, + 0x148, + 0x143, + 0x13E, + 0x13A, + 0x135, + 0x131, + 0x12C, + 0x128, + 0x124, + 0x120, + 0x11C, + 0x118, + 0x114, + 0x110, + 0x10C, + 0x108, + 0x104, + 0x100, + 0xFD, + 0xF9, + 0xF5, + 0xF2, + 0xEE, +}; + diff --git a/quantum/audio/luts.h b/quantum/audio/luts.h new file mode 100644 index 000000000..7df3078a7 --- /dev/null +++ b/quantum/audio/luts.h @@ -0,0 +1,15 @@ +#include +#include +#include + +#ifndef LUTS_H +#define LUTS_H + +#define VIBRATO_LUT_LENGTH 20 + +#define FREQUENCY_LUT_LENGTH 349 + +extern const float vibrato_lut[VIBRATO_LUT_LENGTH]; +extern const uint16_t frequency_lut[FREQUENCY_LUT_LENGTH]; + +#endif /* LUTS_H */ \ No newline at end of file diff --git a/quantum/audio/vibrato_lut.h b/quantum/audio/vibrato_lut.h deleted file mode 100644 index a2b1f3e5c..000000000 --- a/quantum/audio/vibrato_lut.h +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include - -#define VIBRATO_LUT_LENGTH 20 - -const float VIBRATO_LUT[VIBRATO_LUT_LENGTH] = { \ -1.00223368114872, -1.00425299436105, -1.00585842560279, -1.00689052852052, -1.0072464122237, -1.00689052852052, -1.00585842560279, -1.00425299436105, -1.00223368114872, -1, -0.99777129706302, -0.99576501699778, -0.994175695650927, -0.993156625943589, -0.992805720491269, -0.993156625943589, -0.994175695650927, -0.99576501699778, -0.99777129706302, -1 -}; \ No newline at end of file diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c index d2316ba1b..6d4172a06 100644 --- a/quantum/audio/voices.c +++ b/quantum/audio/voices.c @@ -1,6 +1,6 @@ #include "voices.h" +#include "audio.h" #include "stdlib.h" -#include "vibrato_lut.h" // these are imported from audio.c extern uint16_t envelope_index; @@ -109,7 +109,7 @@ float voice_envelope(float frequency) { case 0 ... VOICE_VIBRATO_DELAY: break; default: - frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; + frequency = frequency * vibrato_lut[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; break; } break; @@ -160,4 +160,6 @@ float voice_envelope(float frequency) { } return frequency; -} \ No newline at end of file +} + + diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h index 74c873f42..b2495b23b 100644 --- a/quantum/audio/voices.h +++ b/quantum/audio/voices.h @@ -2,8 +2,7 @@ #include #include #include -#include "musical_notes.h" -#include "song_list.h" +#include "luts.h" #ifndef VOICES_H #define VOICES_H diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 4b4bd6210..5e78d1157 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -24,10 +24,14 @@ along with this program. If not, see . #include "action_macro.h" #include "debug.h" #include "backlight.h" -#include "keymap_midi.h" #include "bootloader.h" #include "eeconfig.h" +#ifdef MIDI_ENABLE + #include "keymap_midi.h" +#endif + + extern keymap_config_t keymap_config; #include diff --git a/quantum/quantum.mk b/quantum/quantum.mk index 83c4f1d1d..4a076eca4 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -29,6 +29,7 @@ endif ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/voices.c + SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/luts.c endif ifeq ($(strip $(UNICODE_ENABLE)), yes) -- cgit v1.3.1 From 3f02637f4dd765803671c2611191beb096d60b36 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 9 May 2016 13:17:15 -0400 Subject: Backlight Breathing for Planck and Atomic * Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * adds backlight pulse to planck --- keyboard/atomic/atomic.c | 260 +++++++++++++-- keyboard/atomic/atomic.h | 16 + keyboard/atomic/keymaps/pvc/config.h | 3 +- keyboard/atomic/keymaps/pvc/keymap.c | 357 ++++++++++++--------- keyboard/atomic/keymaps/pvc/makefile.mk | 2 +- keyboard/planck/keymaps/experimental/README.md | 2 + keyboard/planck/keymaps/experimental/keymap.c | 383 +++++++++++++++++++++++ keyboard/planck/keymaps/experimental/makefile.mk | 2 + keyboard/planck/keymaps/pvc/keymap.c | 13 +- keyboard/planck/keymaps/pvc/makefile.mk | 6 +- keyboard/planck/planck.c | 221 ++++++++++++- keyboard/planck/planck.h | 18 ++ quantum/audio/audio.c | 4 + quantum/audio/audio.h | 11 +- quantum/keymap_common.h | 18 ++ quantum/keymap_midi.h | 10 +- quantum/quantum.mk | 6 +- tmk_core/common/backlight.c | 5 + tmk_core/common/backlight.h | 1 + tmk_core/common/command.c | 4 +- tmk_core/common/nodebug.h | 12 +- 21 files changed, 1153 insertions(+), 201 deletions(-) create mode 100644 keyboard/planck/keymaps/experimental/README.md create mode 100644 keyboard/planck/keymaps/experimental/keymap.c create mode 100644 keyboard/planck/keymaps/experimental/makefile.mk (limited to 'keyboard/planck') diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c index 399649716..b4b261457 100644 --- a/keyboard/atomic/atomic.c +++ b/keyboard/atomic/atomic.c @@ -2,27 +2,27 @@ __attribute__ ((weak)) void matrix_init_user(void) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file }; __attribute__ ((weak)) void matrix_scan_user(void) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file } __attribute__ ((weak)) void process_action_user(keyrecord_t *record) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file } __attribute__ ((weak)) void led_set_user(uint8_t usb_led) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file } void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up + // put your keyboard start-up code here + // runs once when the firmware starts up MCUCR |= (1<= BACKLIGHT_LEVELS ) { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); // Turn on PWM control of PB7 TCCR1A |= _BV(COM1C1); - // Set the brightness + + // Set the brightness to max CHANNEL = 0xFFFF; } - else + else { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); // Turn on PWM control of PB7 TCCR1A |= _BV(COM1C1); + // Set the brightness CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); } + breathing_intensity_default(); +} + + +void breathing_enable(void) +{ + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint (brightest point) + breathing_index = 0x20 << breath_speed; + } + + breathing_halt = BREATHING_NO_HALT; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); +} + +void breathing_pulse(void) +{ + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint + 1 (brightest point) + breathing_index = 0x21 << breath_speed; + } + + breathing_halt = BREATHING_HALT_ON; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); +} + +void breathing_disable(void) +{ + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + backlight_set(get_backlight_level()); +} + +void breathing_self_disable(void) +{ + if (get_backlight_level() == 0) + { + breathing_halt = BREATHING_HALT_OFF; + } + else + { + breathing_halt = BREATHING_HALT_ON; + } + + //backlight_set(get_backlight_level()); +} + +void breathing_toggle(void) +{ + if (!is_breathing()) + { + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint + 1 (brightest point) + breathing_index = 0x21 << breath_speed; + } + + breathing_halt = BREATHING_NO_HALT; + } + + // Toggle breathing interrupt + TIMSK1 ^= _BV(OCIE1A); + + // Restore backlight level + if (!is_breathing()) + { + backlight_set(get_backlight_level()); + } +} + +bool is_breathing(void) +{ + return (TIMSK1 && _BV(OCIE1A)); +} + +void breathing_intensity_default(void) +{ + //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS); + breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2)); +} + +void breathing_intensity_set(uint8_t value) +{ + breath_intensity = value; +} + +void breathing_speed_default(void) +{ + breath_speed = 4; +} + +void breathing_speed_set(uint8_t value) +{ + bool is_breathing_now = is_breathing(); + uint8_t old_breath_speed = breath_speed; + + if (is_breathing_now) + { + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + } + + breath_speed = value; + + if (is_breathing_now) + { + // Adjust index to account for new speed + breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); + } + +} + +void breathing_speed_inc(uint8_t value) +{ + if ((uint16_t)(breath_speed - value) > 10 ) + { + breathing_speed_set(0); + } + else + { + breathing_speed_set(breath_speed - value); + } +} + +void breathing_speed_dec(uint8_t value) +{ + if ((uint16_t)(breath_speed + value) > 10 ) + { + breathing_speed_set(10); + } + else + { + breathing_speed_set(breath_speed + value); + } +} + +void breathing_defaults(void) +{ + breathing_intensity_default(); + breathing_speed_default(); + breathing_halt = BREATHING_NO_HALT; +} + +/* Breathing Sleep LED brighness(PWM On period) table + * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle + * + * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63 + * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i } + */ +static const uint8_t breathing_table[64] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10, + 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252, +255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23, + 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +ISR(TIMER1_COMPA_vect) +{ + // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity; + + + uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F; + + if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F))) + { + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + } + + CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity; + } + + #endif \ No newline at end of file diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h index 0c7aeb1cc..845a9043e 100644 --- a/keyboard/atomic/atomic.h +++ b/keyboard/atomic/atomic.h @@ -33,4 +33,20 @@ void process_action_user(keyrecord_t *record); void led_set_user(uint8_t usb_led); void backlight_init_ports(void); +void breathing_enable(void); +void breathing_pulse(void); +void breathing_disable(void); +void breathing_self_disable(void); +void breathing_toggle(void); +bool is_breathing(void); + + +void breathing_defaults(void); +void breathing_intensity_default(void); +void breathing_speed_default(void); +void breathing_speed_set(uint8_t value); +void breathing_speed_inc(uint8_t value); +void breathing_speed_dec(uint8_t value); + + #endif \ No newline at end of file diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h index 034bc5dc5..5e956286b 100644 --- a/keyboard/atomic/keymaps/pvc/config.h +++ b/keyboard/atomic/keymaps/pvc/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 +#define PRODUCT_ID 0x0419 #define DEVICE_VER 0x0001 #define MANUFACTURER Ortholinear Keyboards #define PRODUCT The Atomic Keyboard @@ -162,5 +162,4 @@ along with this program. If not, see . //#define VIBRATO_ENABLE //#define VIBRATO_STRENGTH_ENABLE - #endif diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c index 3d604a868..ff7384268 100644 --- a/keyboard/atomic/keymaps/pvc/keymap.c +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -8,41 +8,44 @@ #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_RAISE 3 -#define LAYER_LOWER 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_MUSIC 7 -#define LAYER_ADJUST 8 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_RAISE 3 -#define MACRO_LOWER 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_ON 14 -#define MACRO_MUSIC_OFF 15 -#define MACRO_AUDIO_ON 16 -#define MACRO_AUDIO_OFF 17 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 +#define LAYER_QWERTY 0 +#define LAYER_COLEMAK 1 +#define LAYER_DVORAK 2 +#define LAYER_UPPER 3 +#define LAYER_LOWER 4 +#define LAYER_FUNCTION 5 +#define LAYER_MOUSE 6 +#define LAYER_MUSIC 7 +#define LAYER_ADJUST 8 + +#define MACRO_QWERTY 0 +#define MACRO_COLEMAK 1 +#define MACRO_DVORAK 2 +#define MACRO_UPPER 3 +#define MACRO_LOWER 4 +#define MACRO_FUNCTION 5 +#define MACRO_MOUSE 6 +#define MACRO_TIMBRE_1 7 +#define MACRO_TIMBRE_2 8 +#define MACRO_TIMBRE_3 9 +#define MACRO_TIMBRE_4 10 +#define MACRO_TEMPO_U 11 +#define MACRO_TEMPO_D 12 +#define MACRO_TONE_DEFAULT 13 +#define MACRO_MUSIC_TOGGLE 14 +#define MACRO_AUDIO_TOGGLE 16 +#define MACRO_INC_VOICE 18 +#define MACRO_DEC_VOICE 19 +#define MACRO_BACKLIGHT 20 +#define MACRO_BREATH_TOGGLE 21 +#define MACRO_BREATH_SPEED_INC 23 +#define MACRO_BREATH_SPEED_DEC 24 +#define MACRO_BREATH_DEFAULT 25 #define M_QWRTY M(MACRO_QWERTY) #define M_COLMK M(MACRO_COLEMAK) #define M_DVORK M(MACRO_DVORAK) -#define M_RAISE M(MACRO_RAISE) +#define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) #define M_FUNCT M(MACRO_FUNCTION) #define M_MOUSE M(MACRO_MOUSE) @@ -53,12 +56,15 @@ #define TMPO_UP M(MACRO_TEMPO_U) #define TMPO_DN M(MACRO_TEMPO_D) #define TMPO_DF M(MACRO_TONE_DEFAULT) +#define M_BACKL M(MACRO_BACKLIGHT) +#define M_BRTOG M(MACRO_BREATH_TOGGLE) +#define M_BSPDU M(MACRO_BREATH_SPEED_INC) +#define M_BSPDD M(MACRO_BREATH_SPEED_DEC) +#define M_BDFLT M(MACRO_BREATH_DEFAULT) -#define MUS_ON M(MACRO_MUSIC_ON) -#define MUS_OFF M(MACRO_MUSIC_OFF) -#define AUD_OFF M(MACRO_AUDIO_OFF) -#define AUD_ON M(MACRO_AUDIO_ON) +#define MUS_TOG M(MACRO_MUSIC_TOGGLE) +#define AUD_TOG M(MACRO_AUDIO_TOGGLE) #define VC_UP M(MACRO_INC_VOICE) #define VC_DOWN M(MACRO_DEC_VOICE) @@ -74,6 +80,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define OS_SHFT KC_FN0 #define _______ KC_TRNS #define XXXXXXX KC_NO @@ -92,16 +99,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [LAYER_QWERTY] = { /* QWERTY */ + [LAYER_QWERTY] = { // QWERTY { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, }, /* COLEMAK @@ -114,17 +121,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [LAYER_COLEMAK] = { /* COLEMAK */ + [LAYER_COLEMAK] = { // COLEMAK { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, +}, /* DVORAK * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. @@ -136,35 +143,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [LAYER_DVORAK] = { /* DVORAK */ + [LAYER_DVORAK] = { // DVORAK { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, }, - [LAYER_RAISE] = { /* RAISED */ - { KC_TILD, KC_PSCR, KC_PAUS, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, - { _______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, - { _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, - { _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, +/* UPPER + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | - | NUM LK | SCR LK | XXXXXX . PAUSE | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | + | ~ | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | ` | XXXXXX . | HOME | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | 0 | | RALT | . | ENTER | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [LAYER_UPPER] = { // UPPER + { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS }, + { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, + { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME }, + { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END }, + { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }, }, - [LAYER_LOWER] = { /* LOWERED */ - { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, - { _______, KC_F13, KC_F14, KC_F15, KC_F16, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, - { _______, KC_F17, KC_F18, KC_F19, KC_F20, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, - { _______, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, - { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ }, +/* LOWER + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | | ^ | * | + | - | ; | : | _ | ' | " | ` | | XXXXXX . | HOME | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | | | & | ! | ~ | / | \ | = | < | > | ? | XXXXXX . | | END | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [LAYER_LOWER] = { // LOWER + { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, + { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS }, + { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, }, - [LAYER_FUNCTION] = { /* FUNCTION */ + [LAYER_FUNCTION] = { // FUNCTION { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS }, { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR }, @@ -174,7 +209,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef MOUSEKEY_ENABLE - [LAYER_MOUSE] = { /* MOUSE */ + [LAYER_MOUSE] = { // MOUSE { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, @@ -184,25 +219,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #endif - [LAYER_MUSIC] = { /* MUSIC */ + [LAYER_MUSIC] = { // MUSIC { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, }, - [LAYER_ADJUST] = { /* ADJUST */ - { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF, ________________ }, + [LAYER_ADJUST] = { // ADJUST + { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MUS_TOG, AUD_TOG, ________________ }, { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, - { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, + { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ }, }, /* - [LAYER_EMPTY] = { + [LAYER_EMPTY] = { // LAYER { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, @@ -241,6 +276,7 @@ void persistant_default_layer_set(uint16_t default_layer) } const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -250,13 +286,41 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { + case MACRO_BREATH_TOGGLE: + if (record->event.pressed) + { + breathing_toggle(); + } + break; + + case MACRO_BREATH_SPEED_INC: + if (record->event.pressed) + { + breathing_speed_inc(1); + } + break; + + case MACRO_BREATH_SPEED_DEC: + if (record->event.pressed) + { + breathing_speed_dec(1); + } + break; + + case MACRO_BREATH_DEFAULT: + if (record->event.pressed) + { + breathing_defaults(); + } + break; + case MACRO_QWERTY: if (record->event.pressed) { persistant_default_layer_set(1UL<event.pressed) { persistant_default_layer_set(1UL<event.pressed) { persistant_default_layer_set(1UL<event.pressed) { - layer_on(LAYER_RAISE); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + layer_on(LAYER_UPPER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } else { - layer_off(LAYER_RAISE); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + layer_off(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } break; @@ -297,22 +363,28 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } else { layer_off(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } break; case MACRO_FUNCTION: if (record->event.pressed) { + breathing_speed_set(3); + breathing_enable(); layer_on(LAYER_FUNCTION); } else { + breathing_speed_set(1); + breathing_self_disable(); layer_off(LAYER_FUNCTION); } break; @@ -362,42 +434,34 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; - case MACRO_AUDIO_OFF: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - - case MACRO_AUDIO_ON: + case MACRO_AUDIO_TOGGLE: if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); - #endif + if (is_audio_on()) + { + audio_off(); + } + else + { + audio_on(); + PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); + } } break; - case MACRO_MUSIC_ON: + case MACRO_MUSIC_TOGGLE: if (record->event.pressed) { - #ifdef AUDIO_ENABLE + if (IS_LAYER_ON(LAYER_MUSIC)) + { + layer_off(LAYER_MUSIC); + stop_all_notes(); + } + else + { PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); layer_on(LAYER_MUSIC); - #endif - } - break; - - case MACRO_MUSIC_OFF: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - layer_off(LAYER_MUSIC); - stop_all_notes(); - #endif + } } break; @@ -423,6 +487,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #endif /* AUDIO_ENABLE */ +#ifdef BACKLIGHT_ENABLE + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); + } +#endif + default: break; @@ -467,39 +539,39 @@ void led_set_user(uint8_t usb_led) _delay_ms(10); // gets rid of tick - if (!is_playing_notes()) - { - if ((usb_led & (1<event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + breathing_speed_set(2); + breathing_pulse(); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 12: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_off(_MUSIC); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + break; + case 13: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + break; + + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +uint8_t starting_note = 0x0C; +int offset = 0; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} +#endif diff --git a/keyboard/planck/keymaps/experimental/makefile.mk b/keyboard/planck/keymaps/experimental/makefile.mk new file mode 100644 index 000000000..99fbfbd0b --- /dev/null +++ b/keyboard/planck/keymaps/experimental/makefile.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = yes +NKRO_ENABLE = yes \ No newline at end of file diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c index 830b00a4c..177f04484 100644 --- a/keyboard/planck/keymaps/pvc/keymap.c +++ b/keyboard/planck/keymaps/pvc/keymap.c @@ -38,6 +38,7 @@ #define MACRO_AUDIO_OFF 17 #define MACRO_INC_VOICE 18 #define MACRO_DEC_VOICE 19 +#define MACRO_BACKLIGHT 20 #define M_QWRTY M(MACRO_QWERTY) #define M_COLMK M(MACRO_COLEMAK) @@ -53,6 +54,7 @@ #define TMPO_UP M(MACRO_TEMPO_U) #define TMPO_DN M(MACRO_TEMPO_D) #define TMPO_DF M(MACRO_TONE_DEFAULT) +#define M_BACKL M(MACRO_BACKLIGHT) #define MUS_ON M(MACRO_MUSIC_ON) @@ -217,7 +219,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER_ADJUST] = { /* ADJUST */ { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF }, { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ }, + { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, _______ }, { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ }, }, @@ -337,6 +339,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; + +#ifdef BACKLIGHT_ENABLE + case MACRO_BACKLIGHT: + if (record->event.pressed) + { + backlight_step(); + } +#endif + #ifdef MOUSEKEY_ENABLE case MACRO_MOUSE: diff --git a/keyboard/planck/keymaps/pvc/makefile.mk b/keyboard/planck/keymaps/pvc/makefile.mk index b3f1b9e51..f7798b09d 100644 --- a/keyboard/planck/keymaps/pvc/makefile.mk +++ b/keyboard/planck/keymaps/pvc/makefile.mk @@ -1,12 +1,12 @@ BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) +CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 +AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index 655850150..446353dbf 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -9,6 +9,9 @@ void matrix_scan_user(void) {} __attribute__ ((weak)) void process_action_user(keyrecord_t *record) {} +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) {} + void matrix_init_kb(void) { #ifdef BACKLIGHT_ENABLE backlight_init_ports(); @@ -33,8 +36,22 @@ void process_action_kb(keyrecord_t *record) { process_action_user(record); } +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} + #ifdef BACKLIGHT_ENABLE #define CHANNEL OCR1C +#define BREATHING_NO_HALT 0 +#define BREATHING_HALT_OFF 1 +#define BREATHING_HALT_ON 2 + +static uint8_t breath_intensity; +static uint8_t breath_speed; +static uint16_t breathing_index; +static uint8_t breathing_halt; void backlight_init_ports() { @@ -60,22 +77,22 @@ void backlight_init_ports() TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; backlight_init(); + breathing_defaults(); } void backlight_set(uint8_t level) { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + if ( level == 0 ) { // Turn off PWM control on PB7, revert to output low. TCCR1A &= ~(_BV(COM1C1)); CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); } else if ( level == BACKLIGHT_LEVELS ) { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); // Turn on PWM control of PB7 TCCR1A |= _BV(COM1C1); // Set the brightness @@ -83,13 +100,205 @@ void backlight_set(uint8_t level) } else { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); // Turn on PWM control of PB7 TCCR1A |= _BV(COM1C1); // Set the brightness CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); } + breathing_intensity_default(); +} + + +void breathing_enable(void) +{ + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint (brightest point) + breathing_index = 0x20 << breath_speed; + } + + breathing_halt = BREATHING_NO_HALT; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); +} + +void breathing_pulse(void) +{ + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint + 1 (brightest point) + breathing_index = 0x21 << breath_speed; + } + + breathing_halt = BREATHING_HALT_ON; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); } +void breathing_disable(void) +{ + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + backlight_set(get_backlight_level()); +} + +void breathing_self_disable(void) +{ + if (get_backlight_level() == 0) + { + breathing_halt = BREATHING_HALT_OFF; + } + else + { + breathing_halt = BREATHING_HALT_ON; + } + + //backlight_set(get_backlight_level()); +} + +void breathing_toggle(void) +{ + if (!is_breathing()) + { + if (get_backlight_level() == 0) + { + breathing_index = 0; + } + else + { + // Set breathing_index to be at the midpoint + 1 (brightest point) + breathing_index = 0x21 << breath_speed; + } + + breathing_halt = BREATHING_NO_HALT; + } + + // Toggle breathing interrupt + TIMSK1 ^= _BV(OCIE1A); + + // Restore backlight level + if (!is_breathing()) + { + backlight_set(get_backlight_level()); + } +} + +bool is_breathing(void) +{ + return (TIMSK1 && _BV(OCIE1A)); +} + +void breathing_intensity_default(void) +{ + //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS); + breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2)); +} + +void breathing_intensity_set(uint8_t value) +{ + breath_intensity = value; +} + +void breathing_speed_default(void) +{ + breath_speed = 4; +} + +void breathing_speed_set(uint8_t value) +{ + bool is_breathing_now = is_breathing(); + uint8_t old_breath_speed = breath_speed; + + if (is_breathing_now) + { + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + } + + breath_speed = value; + + if (is_breathing_now) + { + // Adjust index to account for new speed + breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed; + + // Enable breathing interrupt + TIMSK1 |= _BV(OCIE1A); + } + +} + +void breathing_speed_inc(uint8_t value) +{ + if ((uint16_t)(breath_speed - value) > 10 ) + { + breathing_speed_set(0); + } + else + { + breathing_speed_set(breath_speed - value); + } +} + +void breathing_speed_dec(uint8_t value) +{ + if ((uint16_t)(breath_speed + value) > 10 ) + { + breathing_speed_set(10); + } + else + { + breathing_speed_set(breath_speed + value); + } +} + +void breathing_defaults(void) +{ + breathing_intensity_default(); + breathing_speed_default(); + breathing_halt = BREATHING_NO_HALT; +} + +/* Breathing Sleep LED brighness(PWM On period) table + * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle + * + * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63 + * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i } + */ +static const uint8_t breathing_table[64] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10, + 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252, +255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23, + 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +ISR(TIMER1_COMPA_vect) +{ + // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity; + + + uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F; + + if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F))) + { + // Disable breathing interrupt + TIMSK1 &= ~_BV(OCIE1A); + } + + CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity; + +} + + + #endif \ No newline at end of file diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index c5b59d999..cfd4956bf 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -45,4 +45,22 @@ void matrix_init_user(void); void matrix_scan_user(void); void process_action_user(keyrecord_t *record); +void led_set_user(uint8_t usb_led); +void backlight_init_ports(void); + +void breathing_enable(void); +void breathing_pulse(void); +void breathing_disable(void); +void breathing_self_disable(void); +void breathing_toggle(void); +bool is_breathing(void); + + +void breathing_defaults(void); +void breathing_intensity_default(void); +void breathing_speed_default(void); +void breathing_speed_set(uint8_t value); +void breathing_speed_inc(uint8_t value); +void breathing_speed_dec(uint8_t value); + #endif diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 3a7f0f556..27b64f8c9 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -374,6 +374,10 @@ bool is_playing_notes(void) { return playing_notes; } +bool is_audio_on(void) { + return (audio_config.enable != 0); +} + void audio_toggle(void) { audio_config.enable ^= 1; eeconfig_update_audio(audio_config.raw); diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index 3d706587a..4ba879bbb 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -25,6 +25,7 @@ typedef union { }; } audio_config_t; +bool is_audio_on(void); void audio_toggle(void); void audio_on(void); void audio_off(void); @@ -71,11 +72,11 @@ void stop_note(float freq); void stop_all_notes(void); void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest); -#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ - 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ - 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ - 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ - 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } +#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ + 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ + 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ + 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ + 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } // These macros are used to allow play_notes to play an array of indeterminate // length. This works around the limitation of C's sizeof operation on pointers. diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 8c27e9035..322fda498 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -87,8 +87,11 @@ extern const uint16_t fn_actions[]; #define KC_EXCLAIM KC_EXLM #define KC_AT LSFT(KC_2) // @ + + #define KC_HASH LSFT(KC_3) // # + #define KC_DLR LSFT(KC_4) // $ #define KC_DOLLAR KC_DLR @@ -110,11 +113,13 @@ extern const uint16_t fn_actions[]; #define KC_RPRN LSFT(KC_0) // ) #define KC_RIGHT_PAREN KC_RPRN + #define KC_UNDS LSFT(KC_MINS) // _ #define KC_UNDERSCORE KC_UNDS #define KC_PLUS LSFT(KC_EQL) // + + #define KC_LCBR LSFT(KC_LBRC) // { #define KC_LEFT_CURLY_BRACE KC_LCBR @@ -132,6 +137,19 @@ extern const uint16_t fn_actions[]; #define KC_PIPE LSFT(KC_BSLS) // | +#define KC_LT LSFT(KC_COMM) // < + + +#define KC_GT LSFT(KC_DOT) // > + + +#define KC_QUES LSFT(KC_SLSH) // ? +#define KC_QUESTION KC_QUES + + +#define KC_DQT LSFT(KC_QUOT) // " +#define KC_DOUBLE_QUOTE KC_DQT + #define KC_DELT KC_DELETE // Del key (four letter code) // Alias for function layers than expand past FN31 diff --git a/quantum/keymap_midi.h b/quantum/keymap_midi.h index 795f26380..3a2bf3aff 100644 --- a/quantum/keymap_midi.h +++ b/quantum/keymap_midi.h @@ -25,11 +25,11 @@ along with this program. If not, see . #define CHNL(note, channel) (note + (channel << 8)) -#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ - 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ - 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ - 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ - 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } +#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ + 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ + 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ + 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ + 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } #define N_CN1 (0x600C + (12 * -1) + 0 ) #define N_CN1S (0x600C + (12 * -1) + 1 ) diff --git a/quantum/quantum.mk b/quantum/quantum.mk index ff34c463a..5f4c2f045 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -28,9 +28,9 @@ ifeq ($(strip $(MIDI_ENABLE)), yes) endif ifeq ($(strip $(AUDIO_ENABLE)), yes) - SRC += $(QUANTUM_DIR)/audio/audio.c - SRC += $(QUANTUM_DIR)/audio/voices.c - SRC += $(QUANTUM_DIR)/audio/luts.c + SRC += $(QUANTUM_DIR)/audio/audio.c + SRC += $(QUANTUM_DIR)/audio/voices.c + SRC += $(QUANTUM_DIR)/audio/luts.c endif ifeq ($(strip $(UNICODE_ENABLE)), yes) diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c index 2f6fc1cd6..c9e8fd3fd 100644 --- a/tmk_core/common/backlight.c +++ b/tmk_core/common/backlight.c @@ -83,3 +83,8 @@ void backlight_level(uint8_t level) eeconfig_update_backlight(backlight_config.raw); backlight_set(backlight_config.level); } + +uint8_t get_backlight_level(void) +{ + return backlight_config.level; +} \ No newline at end of file diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h index 525ec8bbe..f57309267 100644 --- a/tmk_core/common/backlight.h +++ b/tmk_core/common/backlight.h @@ -36,5 +36,6 @@ void backlight_toggle(void); void backlight_step(void); void backlight_set(uint8_t level); void backlight_level(uint8_t level); +uint8_t get_backlight_level(void); #endif diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index f06abaf7f..9edcc42a0 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -357,9 +357,11 @@ static bool command_common(uint8_t code) clear_keyboard(); // clear to prevent stuck keys print("\n\nJumping to bootloader... "); #ifdef AUDIO_ENABLE + stop_all_notes(); play_goodbye_tone(); + #else + _delay_ms(1000); #endif - _delay_ms(1000); bootloader_jump(); // not return break; diff --git a/tmk_core/common/nodebug.h b/tmk_core/common/nodebug.h index 93309ada4..5e18656e5 100644 --- a/tmk_core/common/nodebug.h +++ b/tmk_core/common/nodebug.h @@ -16,10 +16,14 @@ along with this program. If not, see . */ #ifndef NODEBUG_H -#define NODEBUG_H 1 +#define NODEBUG_H -#define NO_DEBUG -#include "debug.h" -#undef NO_DEBUG +#ifndef NO_DEBUG + #define NO_DEBUG + #include "debug.h" + #undef NO_DEBUG +#else + #include "debug.h" +#endif #endif -- cgit v1.3.1 From 69f05e1afd2e046938209e00db62d18efead4932 Mon Sep 17 00:00:00 2001 From: cwhits Date: Thu, 12 May 2016 15:08:53 -0400 Subject: [planck] adds button for toggling output in plover app (#323) * [planck] toggle plover output in app when toggling plover layer on keyboard * [planck] moved plover toggle to separate key * [planck] renamed toggle button --- keyboard/planck/keymaps/default/keymap.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index ac4937b69..56f20a3b9 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -38,6 +38,7 @@ extern keymap_config_t keymap_config; #define VC_DE M(11) #define PLOVER M(12) #define EXT_PLV M(13) +#define TOG_OUT M(14) // Fillers to make layering more clear #define _______ KC_TRNS @@ -151,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | | S | T | P | H | * | * | F | P | L | T | D | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | S | K | W | R | * | * | R | B | G | S | Z | + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Exit | | | A | O | | E | U | | | | * `-----------------------------------------------------------------------------------' @@ -160,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_PLOVER] = { {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, - {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {TOG_OUT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} }, @@ -343,7 +344,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) layer_off(_PLOVER); } break; - + case 14: + if (record->event.pressed) { + return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END ); + } + break; } return MACRO_NONE; }; -- cgit v1.3.1 From c7d2c79d34501480147f8aa6221e1d46ce473af6 Mon Sep 17 00:00:00 2001 From: Jacob Bilger Date: Sat, 14 May 2016 21:11:33 -0400 Subject: adds Bilger321's planck keymap --- keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG | Bin 0 -> 17292 bytes keyboard/planck/keymaps/Jacob/keymap.c | 56 + keyboard/planck/keymaps/Jacob/planck.hex | 1151 +++++++++++++++++++++ keyboard/planck/keymaps/Jacob/readme.md | 1 + 4 files changed, 1208 insertions(+) create mode 100644 keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG create mode 100644 keyboard/planck/keymaps/Jacob/keymap.c create mode 100644 keyboard/planck/keymaps/Jacob/planck.hex create mode 100644 keyboard/planck/keymaps/Jacob/readme.md (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG b/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG new file mode 100644 index 000000000..40f0b8942 Binary files /dev/null and b/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG differ diff --git a/keyboard/planck/keymaps/Jacob/keymap.c b/keyboard/planck/keymaps/Jacob/keymap.c new file mode 100644 index 000000000..5e6e8498e --- /dev/null +++ b/keyboard/planck/keymaps/Jacob/keymap.c @@ -0,0 +1,56 @@ +#include "planck.h" +#include "action_layer.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +//Simple Keymap where CTRL, WINKEY, and ALT keys are placed in a more familiar location for Windows users. +//Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define _QW 0 +#define _LW 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT)}, + {KC_LCTL, KC_LGUI, KC_LALT, M(0), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + }, + [_LW] = { /* LOWER */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/Jacob/planck.hex b/keyboard/planck/keymaps/Jacob/planck.hex new file mode 100644 index 000000000..3ea701202 --- /dev/null +++ b/keyboard/planck/keymaps/Jacob/planck.hex @@ -0,0 +1,1151 @@ +:100000000C94A8010C94EC010C94EC010C94EC0100 +:100010000C94EC010C94EC010C94EC010C94EC01AC +:100020000C94EC010C94EC010C94410D0C94050D16 +:100030000C94C11B0C94EC010C94EC010C94EC019D +:100040000C94EC010C94EC010C94EC010C94EC017C +:100050000C94EC010C94841C0C94EC010C94EC01B9 +:100060000C94EC010C94EC010C94EC010C94EC015C +:100070000C94EC010C94EC010C94EC010C94EC014C +:100080000C94EC010C94EC010C94EC010C94EC013C +:100090000C94EC010C94EC010C94EC010C94EC012C +:1000A0000C94EC010C94EC010C94EC012B0014006A +:1000B0001A000800150017001C0018000C001200A0 +:1000C00013002A00290004001600070009000A0096 +:1000D0000B000D000E000F0033003400E1001D0086 +:1000E0001B00060019000500110010003600370043 +:1000F00038002872E000E300E200003001522C00DA +:100100002C0002525000510052004F0035021E02D6 +:100110001F022002210222022302240225022602BB +:1001200027024C0001000100010001000100010054 +:1001300001002D022E022F023002310201000100C7 +:1001400001000100010001000100010001002F0079 +:100150003000010001000100010001000100010068 +:1001600001000100010001000100010035001E0036 +:100170001F0020002100220023002400250026006B +:1001800027004C0001003A003B003C003D003E00CF +:100190003F002D002E002F003000310001004000F4 +:1001A00041004200430044004500010001000100FD +:1001B0000100010001000100010001000100010037 +:1001C0000100010001000100010001000501090614 +:1001D000A101050719E029E715002501950875011A +:1001E0008102950175088101050819012905950508 +:1001F000750191029501750391010507190029FF09 +:10020000150025FF950675088100C005010902A1AA +:10021000010901A10005091901290515002501950C +:1002200005750181029501750381010501093009F8 +:10023000311581257F9502750881060938158125BC +:100240007F950175088106050C0A38021581257F06 +:10025000950175088106C0C005010980A1018502CC +:1002600016010026B7001A01002AB7007510950183 +:100270008100C0050C0901A1018503160100269C1F +:10028000021A01002A9C02751095018100C012011A +:10029000100100000008EDFE606001000102000195 +:1002A00009025400030100A0FA090400000103013F +:1002B0000100092111010001223F00070581030807 +:1002C000000A0904010001030102000921110100D3 +:1002D00001224D000705820308000A0904020001FB +:1002E00003000000092111010001223600070583E7 +:1002F0000308000A040309042C034F007200740071 +:1003000068006F006C0069006E006500610072009B +:1003100020004B006500790062006F0061007200F0 +:10032000640073000000280354006800650020008A +:1003300050006C0061006E0063006B0020004B00F9 +:100340006500790062006F006100720064000000C7 +:1003500011241FBECFEFDAE0DEBFCDBF04B603FE2F +:1003600024C08091ED019091EE01A091EF01B09138 +:10037000F0018750904BA740B04BB9F41092ED01BB +:100380001092EE011092EF011092F00114BE84B7AA +:10039000877F84BF88E10FB6F89480936000109245 +:1003A00060000FBEE0E0F8E3099511E0A0E0B1E0E5 +:1003B000EAE7F7E402C005900D92A435B107D9F73A +:1003C00011E0A4E5B1E001C01D92AD3EB107E1F737 +:1003D0000E9441090C94BB230C940000FC0166238D +:1003E00061F48281882331F085EE0E947D110E94A4 +:1003F000BC2103C085EE0E942A1180E090E00895A0 +:1004000008950895089508950E94010208950E9494 +:10041000020208950E940302089584E0809355012A +:1004200008950E949C2123E030E0281B3109220F0F +:10043000331F2093540108950E9411020E940D025F +:10044000109256010895982F2F98882351F4809187 +:100450008000877F8093800010928D0010928C0026 +:1004600020C0833041F480918000886080938000B8 +:100470008FEF9FEF12C08091800088608093800092 +:1004800023E030E0291B3109220F331F8FEF9FEF4C +:1004900002C0969587952A95E2F790938D008093F8 +:1004A0008C000E9411020895279A2F988FEF9FEFDA +:1004B00090938700809386008AE08093800089E192 +:1004C000809381000E942A220E941C0208950E94AB +:1004D00054026E9A769A0E94000208950895E62FBB +:1004E000F0E0EE0FFF1F98E1799F90011124E20FD9 +:1004F000F31F90E6899FC0011124E80FF91FE4550E +:10050000FF4F25913491C9010895FC01EE0FFF1FA3 +:10051000E45BFF4F25913491C9010895FC01EE0F72 +:10052000FF1FE453FE4F25913491C9010895CF93E5 +:10053000DF93EC0180E4C030D807A0F590E3C03031 +:10054000D90708F005C1C83ED105E8F4C03ED10581 +:1005500008F069C0C83AD10588F4C53AD10508F059 +:1005600064C0C130D10509F4E8C0C130D10508F438 +:1005700014C2C430D10508F410C255C0CB3BD1051C +:1005800008F00BC261C080E2C030D80708F0DBC0C1 +:1005900091E0C030D90708F0D3C0C03FD10508F4BE +:1005A000FCC1C8C080E5C130D80709F4F4C090E5AB +:1005B000C230D907F0F480E4C131D80709F4D4C0BF +:1005C00090E4C231D90730F480E4C031D80708F490 +:1005D000C3C0C7C090E4C331D90709F4CBC080E4DD +:1005E000C331D80708F4C3C0C050D04509F0D5C105 +:1005F000C4C080E6C030D80730F491E5C030D907D8 +:1006000008F05EC1CEC080E7C030D80708F4C5C18D +:1006100090E8C030D90708F4B8C180E9C030D807E5 +:1006200008F0BBC1B6C19E01BAC1C53AD10519F4E3 +:1006300081E890E47DC0C63AD10519F083E890E4E2 +:1006400077C082E890E474C0C83AD10519F482EE0C +:1006500094E46EC0C93AD10519F489EE94E468C0F7 +:10066000CA3AD10519F48AEE94E462C0CB3AD105B6 +:1006700019F485EB94E45CC0CC3AD10519F486EB0F +:1006800094E456C0CD3AD10519F487EB94E450C0F8 +:10069000C03BD10519F48CEC94E44AC0CE3AD105A4 +:1006A00019F48DEC94E444C0CF3AD10519F483E8F1 +:1006B00095E43EC0C13BD10519F48AE895E438C001 +:1006C000C23BD10519F482E995E432C0C33BD105A0 +:1006D00019F484E995E42CC0C43BD10519F481E2F6 +:1006E00096E426C0C53BD10519F483E296E420C008 +:1006F000C63BD10519F484E296E41AC0C73BD10584 +:1007000019F485E296E414C0C83BD10519F486E2D9 +:1007100096E40EC0C93BD10519F487E296E408C0FF +:10072000CA3BD10519F080E094E402C08AE296E465 +:100730009C0135C19E01306532C121E030E02FC1FE +:100740009E013F712CC1CE019F700E948E0228C174 +:100750009E013070306C23C19E012F703070346D5B +:100760001EC120E031ED1BC120E030ED18C120E0BA +:1007700032ED15C120E033ED12C10E94171184EC57 +:1007800099E020E931E0F9013197F1F70197D9F7C4 +:100790000E94A91C04C18091CD0181608093CD018C +:1007A000FEC00E94051D882311F40E94101D0E94A6 +:1007B000F61C8093EB011092EC0190E5C230D90752 +:1007C00011F4816076C090E5C430D90711F48260DD +:1007D00070C090E5C630D90711F484606AC090E516 +:1007E000C830D90711F4886064C090E5CA30D907D1 +:1007F00011F480615EC090E5CC30D90711F48062BD +:1008000058C090E5CE30D90711F4806452C090E50D +:10081000C031D90711F480684CC090E5C231D907C6 +:1008200011F48C6046C080E5C330D80721F4809174 +:10083000EB018E7F3EC090E5C530D90721F4809151 +:10084000EB018D7F36C080E5C730D80721F4809159 +:10085000EB018B7F2EC090E5C930D90721F4809140 +:10086000EB01877F26C080E5CB30D80721F480914B +:10087000EB018F7E1EC090E5CD30D90721F4809129 +:10088000EB018F7D16C080E5CF30D80721F4809131 +:10089000EB018F7B0EC090E5C131D90721F4809127 +:1008A000EB018F7706C0C351D04529F48091EB014D +:1008B000837F8093EB018091EB010E94EB1C6FC062 +:1008C0004D2F55274F70507041305105F9F49E015E +:1008D000A4E0220F331FAA95E1F720703370CE01F8 +:1008E000F3E0880F991FFA95E1F780769070282B36 +:1008F000392B3C68C370D07002C0440F551FCA9595 +:10090000E2F74F715070242B352B49C0423051050E +:1009100029F43C2F2227216F306A41C04330510512 +:1009200051F49E0173E0220F331F7A95E1F7207E88 +:1009300037703C680CC044305105B9F49E0163E047 +:10094000220F331F6A95E1F7207E37703A68C37033 +:10095000D07081E090E002C0880F991FCA95E2F73D +:100960008F719070282B392B1AC04530510529F40E +:100970003C2F2227246F306A12C04630510579F48B +:10098000CF71D0703C2F222702C09E013F70306291 +:1009900006C09E013F70306A02C020E030E0C9010D +:1009A000DF91CF9108950E946F02803E9105F0F48F +:1009B000803C910588F58133910509F475C0823337 +:1009C000910548F48932910509F464C08A32910591 +:1009D00009F07BC06EC08933910509F18238910519 +:1009E000F1F08533910509F070C04FC0833E910549 +:1009F00061F1843E910540F4803E9105B9F0823E5C +:100A0000910509F062C01CC0863E910551F1873EF8 +:100A1000910509F05AC02AC00E94850208952091CC +:100A2000EB0120FD0AC021FD08C04CC08091EB0104 +:100A300080FF03C089E390E045C080EE90E042C0B3 +:100A40008091EB0182FD08C004C08091EB0182FF20 +:100A500003C082EE90E036C084FD11C083EE90E0CA +:100A600031C08091EB0183FD08C004C08091EB018F +:100A700083FF03C086EE90E025C084FF03C080E0C2 +:100A800090E020C087EE90E01DC08091EB0185FFD3 +:100A900005C007C08091EB0185FF03C085E390E0AE +:100AA00011C089E290E00EC08091EB0186FF05C085 +:100AB00007C08091EB0186FF03C081E390E002C094 +:100AC0008AE290E00E94970208950E94970208959A +:100AD0000E940A020895E82FF0E0EE0FFF1FE95A86 +:100AE000FE4F80819181089508954F925F926F9299 +:100AF0007F928F929F92AF92BF92CF92DF92EF92AE +:100B0000FF920F931F93DF93CF93CDB7DEB7289754 +:100B10000FB6F894DEBF0FBECDBFAE014F5F5F4F83 +:100B200060E070E0EE24FF24CC24DD24AA24BB2462 +:100B3000882499242A0101E010E029E0622E712C1A +:100B40006C0E7D1ED201E4E3F1E088E001900D928D +:100B50008150E1F7FA01808191819C01207F307002 +:100B60002032310559F48F709070980102C0220F25 +:100B7000331F8A95E2F7622B732B37C02033310580 +:100B800059F48F709070F80102C0EE0FFF1F8A9524 +:100B9000E2F7EE2AFF2A29C02034310559F48F707C +:100BA0009070980102C0220F331F8A95E2F7C22A83 +:100BB000D32A1BC02035310559F48F709070F8018D +:100BC00002C0EE0FFF1F8A95E2F7AE2ABF2A0DC0C2 +:100BD0002036310551F48F709070980102C0220FB9 +:100BE000331F8A95E2F7822A932A4E5F5F4F46159C +:100BF000570509F0A7CF24B1962F862F8095822321 +:100C000084B985B1982B95B927B19E2D8E2D8095ED +:100C1000822387B988B1982B98B92AB19C2D8C2D45 +:100C2000809582238AB98BB1982B9BB92DB19A2DCF +:100C30008A2D809582238DB98EB1982B9EB920B3D1 +:100C4000982D882D8095822380BB81B3982B91BBF2 +:100C500028960FB6F894DEBF0FBECDBFCF91DF91BF +:100C60001F910F91FF90EF90DF90CF90BF90AF90CA +:100C70009F908F907F906F905F904F9008954F92CC +:100C80005F926F927F928F929F92AF92BF92CF921C +:100C9000DF92EF92FF920F931F93DF93CF93CDB725 +:100CA000DEB768970FB6F894DEBF0FBECDBF85B72D +:100CB000806885BF85B7806885BF0E947505AE01D5 +:100CC0004F5F5F4F60E070E0EE24FF24CC24DD2412 +:100CD000AA24BB24882499242A0101E010E039E1E8 +:100CE000632E712C6C0E7D1ED201ECE3F1E088E1E5 +:100CF00001900D928150E1F7FA01808191819C0170 +:100D0000207F30702032310559F48F709070980137 +:100D100002C0220F331F8A95E2F7622B732B37C074 +:100D20002033310559F48F709070F80102C0EE0F36 +:100D3000FF1F8A95E2F7EE2AFF2A29C020343105E9 +:100D400059F48F709070980102C0220F331F8A955A +:100D5000E2F7C22AD32A1BC02035310559F48F701F +:100D60009070F80102C0EE0FFF1F8A95E2F7AE2ADD +:100D7000BF2A0DC02036310551F48F709070980154 +:100D800002C0220F331F8A95E2F7822A932A4E5F10 +:100D90005F4F4615570509F0A7CF24B1962F862F30 +:100DA0008095822384B985B1982B95B927B19E2D62 +:100DB0008E2D8095822387B988B1982B98B92AB156 +:100DC0009C2D8C2D809582238AB98BB1982B9BB951 +:100DD0002DB19A2D8A2D809582238DB98EB1982BB5 +:100DE0009EB920B3982D882D8095822380BB81B336 +:100DF000982B91BB80E090E0FC01E95AFE4F1182F4 +:100E00001082FC01E15AFE4F118210820296883056 +:100E1000910591F70E94670268960FB6F894DEBFBD +:100E20000FBECDBFCF91DF911F910F91FF90EF903B +:100E3000DF90CF90BF90AF909F908F907F906F90FA +:100E40005F904F9008954F925F926F927F928F9232 +:100E50009F92AF92BF92CF92DF92EF92FF920F9349 +:100E60001F93DF93CF93CDB7DEB7A0970FB6F8945B +:100E7000DEBF0FBECDBF909000016E010894C11C73 +:100E8000D11CEFE5AE2EE1E0BE2EC6015C2C892E12 +:100E900071E0E72EF12C60EA462E59E0652E712CA8 +:100EA0006C0E7D1E852D982DDC01E4E1F1E088E0DB +:100EB00001900D928150E1F7F60120813181C90145 +:100EC000807F90708032910589F484B12F703070EA +:100ED000A70102C0440F551F2A95E2F79A01842BFF +:100EE00084B985B12095282325B94FC08033910559 +:100EF00089F487B12F703070F70102C0EE0FFF1F29 +:100F00002A95E2F79F018E2B87B988B12095282377 +:100F100028B93BC08034910589F48AB12F703070B4 +:100F2000A70102C0440F551F2A95E2F79A01842BAE +:100F30008AB98BB1209528232BB927C0803591051C +:100F400089F48DB12F703070F70102C0EE0FFF1FD2 +:100F50002A95E2F79F018E2B8DB98EB1209528231B +:100F60002EB913C08036910581F480B32F70307094 +:100F7000A70102C0440F551F2A95E2F79A01842B5E +:100F800080BB81B32095282321BB842D8A95F1F75E +:100F9000830160E070E040E050E0D301ECE1F1E07B +:100FA00088E101900D928150E1F7F80120813181B3 +:100FB000C901807F90708032910511F483B113C014 +:100FC0008033910511F486B10EC08034910511F47F +:100FD00089B109C08035910511F48CB104C0803607 +:100FE0009105B9F48FB190E02F70307002C09595E3 +:100FF00087952A95E2F780FF03C080E090E007C064 +:10100000C701062E02C0880F991F0A94E2F7482BE9 +:10101000592B6F5F7F4F0E5F1F4F6C30710509F0CA +:10102000BCCFF501808191818417950721F0518310 +:10103000408345E0942E0E94750542E050E0C40EC6 +:10104000D51EA40EB51EC614D70409F02BCF90925E +:101050000001992059F1892D815080930001882346 +:1010600029F080EA9FE00197F1F720C080915F01AD +:101070009091600190935801809357018091610194 +:101080009091620190935A0180935901809163017C +:101090009091640190935C0180935B018091650164 +:1010A0009091660190935E0180935D010E9404021D +:1010B00081E0A0960FB6F894DEBF0FBECDBFCF91F2 +:1010C000DF911F910F91FF90EF90DF90CF90BF9035 +:1010D000AF909F908F907F906F905F904F9008950A +:1010E0001092E1010895089508958091680108958E +:1010F000DF93CF9300D00F92CDB7DEB7AC018091D4 +:10110000E201843029F583E08093E9002FEF95ED2B +:1011100005C0892F8A95F1F7222329F08091E800F4 +:10112000215085FFF6CF8091E80085FF11C05B83D9 +:101130004A8383E08983CE01019663E070E040E05A +:1011400050E00E94A70B8091E8008E778093E80022 +:101150000F900F900F90CF91DF910895DF93CF9371 +:1011600000D00F92CDB7DEB7AC018091E2018430A0 +:1011700029F583E08093E9002FEF95ED05C0892FD5 +:101180008A95F1F7222329F08091E800215085FF0C +:10119000F6CF8091E80085FF11C05B834A8382E02F +:1011A0008983CE01019663E070E040E050E00E9448 +:1011B000A70B8091E8008E778093E8000F900F9046 +:1011C0000F90CF91DF910895AC018091E2018430BE +:1011D00001F582E08093E9002FEF95ED05C0892F9E +:1011E0008A95F1F7222329F08091E800215085FFAC +:1011F000F6CF8091E80085FF0CC0CA0165E070E081 +:1012000040E050E00E94A70B8091E8008E77809329 +:10121000E80008950F931F93182F092F8091E20182 +:10122000843061F581E08093E9009FEF25ED05C0F2 +:10123000822F8A95F1F7992329F08091E800915047 +:1012400085FFF6CF8091E80085FF18C0812F902F91 +:1012500068E070E040E050E00E94A70B8091E80059 +:101260008E778093E800A9E6B1E0212F302FC901E5 +:10127000FC0188E001900D928150E1F71F910F91E0 +:10128000089584B7877F84BF88E10FB6F894809370 +:101290006000109260000FBE80E090E020E80FB682 +:1012A000F89420936100809361000FBE0E94F30FB9 +:1012B0000E94850C0E94E60C8091E200846080937D +:1012C000E20078940E94840F0E94A81082E091E0CE +:1012D0000E949A0F0CC00E94F61B8091E0018823A7 +:1012E00031F00E94221C882311F00E94BC0A8091D8 +:1012F000E201853081F30E94F90FF9CF8091E1017D +:10130000882349F40E94850C0E94E60C8091E2003B +:1013100084608093E20008958091E401833009F4B1 +:1013200055C0843030F4813071F0823009F0AFC0A4 +:1013300096C08A3009F483C08B3009F468C08930C4 +:1013400009F0A5C020C08091E301813A09F09FC057 +:101350008091E800877F8093E8008091E701909179 +:10136000E801892B21F489E691E068E003C080E080 +:1013700090E060E070E00E94D20A8091E8008B77F4 +:101380008093E80008958091E301813209F07FC0E5 +:101390008091E7019091E801892B09F078C0809154 +:1013A000E800877F8093E80005C08091E2018823F0 +:1013B00009F46DC08091E80082FFF7CF8091F100C1 +:1013C000809368018091E8008B771CC08091E301D5 +:1013D000813A09F05CC08091E7019091E801892B86 +:1013E00009F055C08091E800877F8093E8008091E4 +:1013F000E80080FFFCCF809101018093F100809193 +:10140000E8008E778093E8000E94320C0895809166 +:10141000E3018132E1F58091E7019091E801892BA8 +:10142000B1F58091E800877F8093E8000E94320C3C +:101430008091E501809301010E9417110895809128 +:10144000E301813221F58091E800877F8093E800F5 +:101450000E94320C8091E60180936701089580918B +:10146000E301813AA1F48091E800877F8093E8004E +:101470008091E80080FFFCCF809167018093F100AC +:101480008091E8008E778093E8000E94320C0895E6 +:1014900081E061EC42E00E94FA0B82E061EC42E004 +:1014A0000E94FA0B83E061EC42E00E94FA0B08957F +:1014B0000E94EA1B0895DA019330C1F0943030F4B1 +:1014C000913051F0923009F04FC00BC0913221F1B0 +:1014D000923209F049C032C0EEE8F2E022E130E099 +:1014E00047C0E0EAF2E024E530E042C0813051F04C +:1014F000813020F0823009F037C008C0E4EFF2E01C +:10150000849107C0E8EFF2E0849103C0E6E2F3E0E3 +:101510008491282F30E02CC0613041F0613018F008 +:10152000623011F508C0E2EBF2E002C0EBECF2E051 +:1015300029E030E01DC0E4EEF2E0FACF613051F076 +:10154000613018F0623081F40AC0ECECF1E02FE376 +:1015500030E00EC0EBE0F2E02DE430E009C0E8E559 +:10156000F2E026E330E004C0E0E0F0E020E030E02C +:10157000ED93FC93C901089580E189BD82E189BDA5 +:1015800009B400FEFDCF8091D8008F7D8093D800F4 +:101590008091E00082608093E0008091E00081FD16 +:1015A000FCCF08959C014091E9015091EA01461752 +:1015B000570718F4F90190E043C06115710511F067 +:1015C000AB01F8CF8091E8008E778093E80040E08F +:1015D00050E0F0CF8091E201882309F447C08530C4 +:1015E00009F446C08091E80083FD44C08091E80082 +:1015F00082FD36C08091E80080FF22C08091F30018 +:101600009091F200782F60E0292F30E0262B372BC5 +:1016100007C081918093F100415050402F5F3F4FB0 +:101620004115510519F02830310598F390E0283024 +:10163000310509F491E08091E8008E778093E8000D +:101640004115510539F6992329F60AC08091E20126 +:10165000882361F0853061F08091E80083FD0AC045 +:101660008091E80082FFF2CF80E0089582E0089543 +:1016700083E0089581E008959C014091E901509133 +:10168000EA014617570718F4F90190E044C06115C4 +:10169000710511F0AB01F8CF8091E8008E7780934F +:1016A000E80040E050E0F0CF8091E201882309F4A7 +:1016B00048C0853009F447C08091E80083FD45C0EB +:1016C0008091E80082FD37C08091E80080FF23C050 +:1016D0008091F3009091F200782F60E0292F30E0A4 +:1016E000262B372B08C084918093F100319641500E +:1016F00050402F5F3F4F4115510519F028303105FB +:1017000090F390E02830310509F491E08091E800F1 +:101710008E778093E8004115510531F6992321F623 +:101720000AC08091E201882361F0853061F08091E8 +:10173000E80083FD0AC08091E80082FFF2CF80E0DC +:10174000089582E0089583E0089581E00895BF92AE +:10175000CF92DF92EF92FF920F931F93CF93DF937D +:10176000182F092F7B016A010E94530CB82E882381 +:10177000B1F5812F902F9C01E901C114D10439F0FA +:10178000F60180819181E81AF90AC80FD91F00E09B +:1017900010E022C08091E80085FD16C08091E8002D +:1017A0008E778093E800C114D10449F0F60180815E +:1017B0009181800F911F9183808385E011C00E94E9 +:1017C000530C882349F00CC089918093F100089450 +:1017D000E108F1080F5F1F4FE114F104D9F68B2DDA +:1017E000DF91CF911F910F91FF90EF90DF90CF90FD +:1017F000BF900895382F282F2EC0822F8F7080938E +:10180000E900231721F4762F942F50E006C0709141 +:10181000EC009091ED005091F00091FF1BC0809181 +:10182000EB008E7F8093EB008091ED008D7F8093A5 +:10183000ED008091EB0081608093EB007093EC00F1 +:101840009093ED005093F0008091EE0087FD02C070 +:1018500080E008952F5F273080F23F703093E900D9 +:1018600081E008958091E30188239CF404C0809175 +:10187000E2018823B9F08091E80082FFF8CF8091DF +:10188000E8008B778093E80008958091E201882337 +:1018900049F08091E80080FFF8CF8091E8008E77D2 +:1018A0008093E80008954091E4005091E50024E61B +:1018B0008091EC0080FF24C08091E80080FD1EC074 +:1018C0008091E201882311F482E00895853011F4BB +:1018D00083E008958091EB0085FF02C081E00895C8 +:1018E0008091E4009091E5008417950709F3222385 +:1018F00011F484E008952150AC01DACF80E008951E +:101900008091E80082FFDCCFF9CF0E94F80C0E94A2 +:10191000000DE0EEF0E0808181608083A8EDB0E012 +:101920008C918F778C9319BCE7EDF0E080818E7FEE +:1019300080838C918F7E8C931092E1010895EF92B9 +:10194000FF920F931F930E94F80C0E94000D08ED68 +:1019500010E0F80180818F778083808180688083A8 +:1019600080818F7D808319BC1092E2011092DE018C +:101970001092E0011092DF0180EEE82EF12CF701C9 +:1019800080818B7F8083F80180818160808380E00B +:1019900060E042E00E94FA0BE1EEF0E080818E7F91 +:1019A0008083E2EEF0E080818160808380818860C6 +:1019B0008083F70180818E7F8083F8018081806140 +:1019C00080831F910F91FF90EF900895E8EDF0E074 +:1019D00080818F7E8083E7EDF0E08081816080836D +:1019E00084E082BF81E08093E1010E949F0C089512 +:1019F000E8EDF0E080818E7F80831092E200089510 +:101A00001092DA001092E10008951F920F920FB623 +:101A10000F9211241F932F933F934F935F936F93D4 +:101A20007F938F939F93AF93BF93EF93FF93109107 +:101A3000E9008091EC001092E9008091F000877F2E +:101A40008093F00078940E94130E1092E900809128 +:101A5000F00088608093F0001F701093E900FF9100 +:101A6000EF91BF91AF919F918F917F916F915F9116 +:101A70004F913F912F911F910F900FBE0F901F908C +:101A800018951F920F920FB60F9211242F933F9328 +:101A90004F935F936F937F938F939F93AF93BF9376 +:101AA000EF93FF938091E10082FF0BC08091E200F1 +:101AB00082FF07C08091E1008B7F8093E1000E944C +:101AC000830F8091DA0080FF1FC08091D80080FFD3 +:101AD0001BC08091DA008E7F8093DA008091D9005C +:101AE00080FF0DC080E189BD82E189BD09B400FE9F +:101AF000FDCF81E08093E2010E947E0905C019BC00 +:101B00001092E2010E9470088091E10080FF19C0EC +:101B10008091E20080FF15C08091E2008E7F80936B +:101B2000E2008091E20080618093E2008091D80021 +:101B300080628093D80019BC85E08093E2010E9406 +:101B400074088091E10084FF30C08091E20084FF3E +:101B50002CC080E189BD82E189BD09B400FEFDCFC2 +:101B60008091D8008F7D8093D8008091E1008F7E96 +:101B70008093E1008091E2008F7E8093E20080916B +:101B8000E20081608093E2008091DE01882311F001 +:101B900084E007C08091E30087FD02C081E001C0BE +:101BA00083E08093E2010E94580A8091E10083FF64 +:101BB00029C08091E20083FF25C08091E100877FEA +:101BC0008093E10082E08093E2011092DE01809137 +:101BD000E1008E7F8093E1008091E2008E7F809310 +:101BE000E2008091E20080618093E20080E060E0AA +:101BF00042E00E94FA0B8091F00088608093F00030 +:101C00000E947308FF91EF91BF91AF919F918F91C7 +:101C10007F916F915F914F913F912F910F900FBEE8 +:101C20000F901F9018951F93DF93CF93CDB7DEB71A +:101C3000AC970FB6F894DEBF0FBECDBFE3EEF1E078 +:101C40008091F100819321E0EB3EF207C9F70E94F9 +:101C50008C098091E80083FF3EC18091E3013091BF +:101C6000E401353009F487C0363040F43130C9F131 +:101C7000313070F0333009F02EC133C0383009F400 +:101C8000F9C0393009F409C1363009F024C197C0D0 +:101C9000803821F0823809F01EC108C09091DF0120 +:101CA0008091E001882399F0926011C08091E70152 +:101CB0008F708093E9008091EB0090E025E096958D +:101CC00087952A95E1F7982F91701092E9008091FD +:101CD000E800877F8093E8009093F1001092F10074 +:101CE000D4C0882319F0823009F0F5C090E08F71DC +:101CF0009070009721F0029709F0EDC00CC0809120 +:101D0000E501813009F0E7C01092E001333069F558 +:101D10008093E0012AC08091E501882331F520916C +:101D2000E7012F7009F4D7C02093E9008091EB0000 +:101D300080FF1BC0333021F48091EB00806213C020 +:101D40008091EB0080618093EB0081E090E002C025 +:101D5000880F991F2A95E2F78093EA001092EA0013 +:101D60008091EB0088608093EB001092E9008091F5 +:101D7000E800877F8DC0882309F0ADC01091E50190 +:101D80001F778091E3008078812B8093E30080911E +:101D9000E800877F8093E8000E94320C8091E80081 +:101DA00080FFFCCF8091E30080688093E3001123E3 +:101DB00011F482E001C083E08093E2018CC080587E +:101DC000823008F088C08091E5019091E60123E01F +:101DD0008C3D920709F034C083E08C838AE28B83C8 +:101DE0007FB7F894DE0115966EE040E050E011E216 +:101DF000E62FF0E010935700849140FF03C08295D6 +:101E00008F706F5F8F70282F30E08A3018F0C90113 +:101E1000C79602C0C901C0968D939D934F5F5F4FD7 +:101E20004431510529F77FBF8091E800877F809377 +:101E3000E800CE0103966AE270E00E94D20A14C064 +:101E40006091E701AE014F5F5F4F0E945B0ABC01EA +:101E5000009709F440C08091E800877F8093E800F4 +:101E600089819A810E943C0B8091E8008B77809356 +:101E7000E80031C0803879F58091E800877F809351 +:101E8000E8008091DE018093F1008091E8008E7778 +:101E90008093E8000E94320C1EC08823E1F49091E8 +:101EA000E5019230C0F48091E800877F8093E800DC +:101EB0009093DE010E94320C8091DE01882331F480 +:101EC0008091E30087FD02C081E001C084E080933F +:101ED000E2010E94480A8091E80083FF0AC08091D5 +:101EE000E800877F8093E8008091EB008062809318 +:101EF000EB00AC960FB6F894DEBF0FBECDBFCF910E +:101F0000DF911F91089508951F938091E201882326 +:101F100079F01091E9008091EC001092E900809135 +:101F2000E80083FF02C00E94130E1F701093E900A7 +:101F30001F91089590937601809375010895E09123 +:101F40007501F0917601309711F480E008950190C9 +:101F5000F081E02D09950895E0917501F0917601E9 +:101F6000309721F00280F381E02D09950895E091EA +:101F70007501F0917601309721F00480F581E02D14 +:101F8000099508959C01809173019091740128171F +:101F9000390779F03093740120937301E091750152 +:101FA000F0917601309729F00680F781E02DC90184 +:101FB000099508959C0180917101909172012817F3 +:101FC000390779F03093720120937101E091750126 +:101FD000F0917601309729F00084F185E02DC90158 +:101FE0000995089508950E94F20F08950E946805CA +:101FF00008952F923F925F926F927F928F929F925D +:10200000AF92BF92CF92DF92EF92FF920F931F9306 +:10201000DF93CF93CDB7DEB72A970FB6F894DEBF24 +:102020000FBECDBF0E94230728E7822E21E0922E0B +:10203000AA24BB2491E0292E312C5A2C8A2D0E94EF +:102040006B056C01F401E080F180E826F926E114CB +:10205000F104E1F18091CD0181FF02C00E9474057D +:1020600000E010E03101002E02C0660C771C0A94DB +:10207000E2F7C3018E219F21892B19F10E944C1C8C +:102080009C0109835A821B82C620D720CD2811F0DB +:1020900081E08B83C9018160782F9D838C83498186 +:1020A0005A816B818D810E941C15F501EE0FFF1F77 +:1020B000E858FE4F80819181862597259183808302 +:1020C00021C00F5F1F4F0C30110561F60894A11C51 +:1020D000B11C82E090E0880E991E94E0A916B1042C +:1020E00009F0ABCF0E944C1C2FEF2E832F83188654 +:1020F0008160782F9A8789874FEF5FEF60E08A854C +:102100000E941C150E94B41E109177010E949F0F1F +:10211000181731F00E949F0F809377010E94F60FED +:102120002A960FB6F894DEBF0FBECDBFCF91DF91D8 +:102130001F910F91FF90EF90DF90CF90BF90AF90E5 +:102140009F908F907F906F905F903F902F90089519 +:102150000E94431C0E943F060E94CD1C0E942A221E +:102160000895DF93CF9300D000D00F92CDB7DEB7A4 +:102170000F900F900F900F900F90CF91DF910895D7 +:10218000DF93CF9300D000D000D0CDB7DEB7269636 +:102190000FB6F894DEBF0FBECDBFCF91DF9108958B +:1021A0000E94DA19482F892F82958F70282F30E0EE +:1021B0002C3031054CF42A3031056CF4225030407B +:1021C00022303105E8F407C02C30310579F02F308A +:1021D0003105B1F40BC0403F39F0413F18F4403EA7 +:1021E00078F402C0443F61F481E008959F70892F24 +:1021F00090E023E0969587952A95E1F78170089500 +:1022000080E008950E94431B0E94531B0E94181BEC +:102210000E946B1B0E949D1E0E94A91E80E090E000 +:102220000E94C20F80E090E00E94DA0F08950E94A1 +:10223000331B0E9402110895882321F00E942C1B59 +:102240000E946B1B0895882321F00E94261B0E9488 +:102250006B1B0895282F882309F44EC0823859F447 +:102260000E949F0F81FF48C089E30E94E71A0E94E5 +:102270006B1B89E30CC0833869F40E949F0F80FFB9 +:102280003BC083E50E94E71A0E946B1B83E50E9416 +:10229000051B1FC0843859F40E949F0F82FF2CC079 +:1022A00087E40E94E71A0E946B1B87E4F0CF8450FA +:1022B000813A10F4822FEBCF822F805E883060F459 +:1022C000277081E090E001C0880F2A95EAF70E940C +:1022D0002C1B0E946B1B0895822F855A833028F493 +:1022E00080E090E00E94C20F0895285A233120F424 +:1022F00080E090E00E94DA0F08951F93182F882342 +:1023000009F4D0C0823859F40E949F0F81FDCAC0E1 +:1023100089E30E94E71A0E946B1B89E30CC0833893 +:1023200079F40E949F0F80FDBDC083E50E94E71AEB +:102330000E946B1B83E50E94051B0E946B1BB2C0B1 +:10234000843859F40E949F0F82FDACC087E40E943C +:10235000E71A0E946B1B87E4EECF8450813A50F459 +:10236000812F0E94D020882309F09CC0812F0E94D9 +:10237000E71AE3CF812F805E883050F4177081E038 +:1023800090E001C0880F1A95EAF70E94261BD5CF6E +:10239000812F855A8330A0F4153A19F481E890E032 +:1023A0000CC0163A19F482E890E007C0173A19F009 +:1023B00080E090E002C083E890E00E94C20F72C00B +:1023C000812F885A833108F06DC0183A19F482EED3 +:1023D00090E066C0193A19F489EE90E061C01A3AAB +:1023E00019F48AEE90E05CC01B3A19F485EB90E09A +:1023F00057C01C3A19F486EB90E052C01B3B19F40D +:1024000083EB90E04DC01C3B19F484EB90E048C096 +:102410001D3A19F487EB90E043C0103B19F48CECA3 +:1024200090E03EC01E3A19F48DEC90E039C01F3A9E +:1024300019F483E891E034C0113B19F48AE891E083 +:102440002FC0123B19F482E991E02AC0133B19F422 +:1024500084E991E025C0143B19F481E292E020C0A8 +:10246000153B19F483E292E01BC0163B19F484E299 +:1024700092E016C0173B19F485E292E011C0183BB8 +:1024800019F486E292E00CC0193B19F487E292E05D +:1024900007C01A3B19F080E090E002C08AE292E0A7 +:1024A0000E94DA0F1F9108959F92AF92BF92CF9230 +:1024B000DF92EF92FF920F931F93DF93CF93CDB7ED +:1024C000DEB72A970FB6F894DEBF0FBECDBF5C0112 +:1024D000DE011196FC0185E001900D928150E1F73B +:1024E0000B81F501F580F2944FE0F422DE0116969F +:1024F000FE01319685E001900D928150E1F73E8119 +:102500002F8189859A85892B09F484C22F3F09F090 +:1025100070C23F3F09F06DC27DC20E94431B0E9402 +:10252000E11A882379F0002369F08C2D805E8830D1 +:1025300048F082E00E949C1B0E94E11A9924939427 +:10254000982601C099248D2D82958F7090E085305A +:10255000910509F4B5C08630910554F48430910595 +:102560000CF08FC02D2D207F02970CF049C017C0B2 +:102570008C30910544F48A3091050CF072C10897B3 +:1025800009F023C2A9C08D30910509F4EDC18D3049 +:1025900091050CF4DFC10F9709F017C20FC28D2D02 +:1025A0008F70222311F4182F03C0182F1295107F5B +:1025B000002389F0112309F4B9C18C2D805E883085 +:1025C00020F4812F0E94261B03C0812F0E94361BFE +:1025D0000E946B1BABC18C2D0E942A11112309F4A0 +:1025E000F4C1F0E2CF0E27E02C1520F0812F0E94DD +:1025F0002C1B03C0812F0E943C1B0E946B1BE5C15A +:102600008D2D8F70203211F4182F03C0182F1295C2 +:10261000107FCC2021F081E0C81609F514C00023FA +:1026200049F0FF2031F1E1E0FE1619F5812F0E94FB +:10263000561BCBC1FF2021F0F1E0FF1609F4C5C104 +:102640000E94591B30C1002329F025E02F1508F402 +:10265000BCC10FC084E08F1508F4B7C124C10023AA +:1026600061F0FF2031F0F501858180FF5FC18F703F +:102670008583812F0E942311A8C1FF2009F413C173 +:1026800060C18D2D86958695837090E0009721F02E +:10269000019709F09AC10AC0002319F0C60193708E +:1026A00002C080E090E00E94C20F8FC1002319F0A9 +:1026B000C601937002C080E090E00E94DA0F85C1ED +:1026C000002321F08C2D0E94AB1D03C08C2D0E9495 +:1026D000151E0E94A91E79C18D2D837009F05EC060 +:1026E000002309F072C12C2D229526952770220F08 +:1026F000220F8C2D8F70E82EFF2400E010E0022EB8 +:1027000004C0EE0CFF1C001F111F0A94D2F7C4FC7A +:1027100005C060E070E080E090E00FC06FE070E026 +:1027200080E090E004C0660F771F881F991F2A95EC +:10273000D2F76095709580959095D694D694F3E0F5 +:10274000DF224D2D50E041305105A9F042305105B6 +:102750001CF4452B49F039C14230510589F0433012 +:10276000510509F032C113C06E297F29802B912BAE +:102770000E94B21A2AC16E297F29802B912B0BC08F +:102780006E297F29802B912B0E94A11A1EC10E94C5 +:10279000B21AC801B7010E94C31A17C190E0002302 +:1027A00011F496958795817009F40FC12C2D22950F +:1027B00026952770220F220F8C2D8F70E82EFF2474 +:1027C00000E010E0022E04C0EE0CFF1C001F111FE1 +:1027D0000A94D2F7C4FC05C060E070E080E090E0AD +:1027E0000FC06FE070E080E090E004C0660F771FDC +:1027F000881F991F2A95D2F76095709580959095BE +:10280000D694D69423E0D2224D2D50E0413051058C +:10281000A9F0423051051CF4452B49F0D6C0423096 +:10282000510589F04330510509F0CFC013C06E291E +:102830007F29802B912B0E94051AC7C06E297F2902 +:10284000802B912B0BC06E297F29802B912B0E940E +:10285000F419BBC00E94051AC801B7010E94161ADC +:10286000B4C081EFC81699F18C1540F0E0EECE1699 +:1028700008F458C0FFEEFC1558F419C023EFC21637 +:1028800081F1C21648F184EFC81609F04BC033C07D +:102890001C2D1F708D2D8F71002319F00E94631A5B +:1028A000E8CE0E94431A812F0E941C118EC0002383 +:1028B00029F0E4E0EF1508F488C004C0F5E0FF1546 +:1028C00008F483C08D2D8F710E94271A7EC08D2D34 +:1028D0008F710023E1F130C08D2D8F71002361F1E4 +:1028E00036C0002329F08D2D8F710E947F1A6DC094 +:1028F0000E948F1A6AC0002351F01D2D1F71812F75 +:102900000E94631A812F63E00E94B51B5EC081E0C4 +:102910000E949C1B21E02F1508F057C082E00E9406 +:102920009C1B53C0002359F0FF2021F08C2D0E94E6 +:102930007D114BC08D2D8F710E94631A46C0FF2000 +:1029400021F08C2D0E942A1140C08D2D8F710E9484 +:10295000431A3BC08FE0D822C5016C2D4D2D0E943B +:10296000EE010E94181931C0002379F5EFE0DE2254 +:102970004D2D50E042305105B9F0433051053CF443 +:102980004115510559F041305105F9F40AC0433061 +:10299000510569F044305105C1F40CC00E94152264 +:1029A00014C00E94F82111C00E94E3210EC00E94B1 +:1029B000BC210BC08C2D0E94A02107C0FFE0DF22AC +:1029C000C5016C2D4D2D0E946E02992019F10E94B7 +:1029D000DD1A80FD1FC0F50112820E94D71A0E94E5 +:1029E000631AC5010E9454120E94D71A0E94431A0A +:1029F00011C0C5010E94070269817A81802F0E945F +:102A0000E5196C010E9492190E949119002309F4A2 +:102A100086CD83CD2A960FB6F894DEBF0FBECDBF0C +:102A2000CF91DF911F910F91FF90EF90DF90CF90AA +:102A3000BF90AF909F900895DF93CF93CDB7DEB74F +:102A40002B970FB6F894DEBF0FBECDBF342F4F8348 +:102A5000252F588769877A878B87472F582FFE0144 +:102A6000319686E0DF011D928A95E9F76B83398301 +:102A70002A834C835D83432F522F8D819E810E9438 +:102A800059182B960FB6F894DEBF0FBECDBFCF916D +:102A9000DF9108950F931F930091870115C010E0F7 +:102AA000F801EE0FFF1FE00FF11FEE0FFF1FE857B9 +:102AB000FE4F4081518162817381848195810E94A2 +:102AC000C0100F5F1F4F077080918601081739F7FC +:102AD0001F910F9108954091800150918101609163 +:102AE00082017091830180918401909185010E94FF +:102AF000C01008950F931F93CF93DF9380918501AA +:102B000082958F7009F06DC080918201882309F44D +:102B100068C06091870100918601409183015091C6 +:102B200084011091810170918001EA01C095D095D6 +:102B300055C04115510509F44FC01F3F49F480E0CD +:102B400090E07F3F11F481E090E0882309F044C0D9 +:102B5000262F30E0F901EE0FFF1FE20FF31FDF0118 +:102B6000AA0FBB1FA857BE4F11968C91119718172B +:102B700099F58C91781781F5EE0FFF1FE657FE4F00 +:102B80008081882349F513968D919C911497841721 +:102B9000950718F0841B950B02C08C0F9D1F883C75 +:102BA0009105D0F4809185018F70806180938501BB +:102BB000F901EE0FFF1FE20FF31FEE0FFF1FE357A8 +:102BC000FE4F80818F708061808380E891E00E9459 +:102BD00054120E944A1505C06F5F6770601709F0B4 +:102BE000A8CFDF91CF911F910F910895DF92EF92BF +:102BF000FF920F931F93DF93CF93CDB7DEB76B9701 +:102C00000FB6F894DEBF0FBECDBF8C01DC0112966B +:102C1000DC9012974C9111965C9111971396ED9060 +:102C2000FC9014972091830130918401609181017F +:102C3000709180012115310509F4DBC16F3F09F066 +:102C400003C27F3F09F000C2D4C1E216F30640F090 +:102C5000C701821B930B883C910508F0EEC008C0A9 +:102C6000209530952E0D3F1D283C310508F0E5C01C +:102C700080918501807F09F095C06F3F09F0EAC11E +:102C80007F3F09F0E7C115C0741799F4DD2089F47E +:102C9000809185018F708061809385010E946B1502 +:102CA00080E891E00E94541280918501F8018583AB +:102CB000BCC1FD82EC825A834983DB82DE01169619 +:102CC000FE01319685E001900D928150E1F7688513 +:102CD000DE011B96FE01369685E001900D92815033 +:102CE000E1F72C853B858E859F85892B09F451C0A2 +:102CF0002F3F09F0B3C13F3F09F0B0C14AC0FD8288 +:102D0000EC825A834983DB82DE011B96FE013196F9 +:102D100085E001900D928150E1F7FC847B856D8503 +:102D200080918701909186011FC0282F30E0F90122 +:102D3000EE0FFF1FE20FF31FDF01AA0FBB1FA85703 +:102D4000BE4F11968C911197F81651F48C9178170B +:102D500039F4EE0FFF1FE657FE4F80816817C9F464 +:102D60002F5F3F4F822F87708917F9F68DC19F70B3 +:102D700059F0442349F459C19F7031F0D801159698 +:102D80008C91807F09F451C1405E483008F44DC1F8 +:102D900048C1DD2009F449C180918501816080939B +:102DA000850143C16F3F09F05DC17F3F09F05AC102 +:102DB00014C0741791F4DD2081F480918501F8012D +:102DC0008583C8010E945412A0E8B1E0F80186E0B2 +:102DD00001900D928150E1F720C15A834983898186 +:102DE0009A810E94D010882309F41BC1DD2009F4C8 +:102DF00018C130918501832F82958F7090E00297E2 +:102E00009CF09091810120918001FE01709686E0F6 +:102E1000DF011D928A95E9F7998B288BFC8AEB8A52 +:102E20003D8BCF010E945412A0E8B1E0F80186E08A +:102E300001900D928150E1F7EEC080918501807F75 +:102E4000A9F47E2DFD82EC825A834983DB826D2DAD +:102E50008D810E94B11000E811E0C8010E94541257 +:102E600086E0F80111928A95E9F7C0C06F3F09F03A +:102E7000FDC07F3F09F0FAC014C0741791F4DD2043 +:102E800081F480918501D80115968C93C8010E9428 +:102E90005412E0E8F1E086E0DF011D928A95E9F73F +:102EA000BEC05A83498389819A810E94D0108823A9 +:102EB00009F4B7C0DD2009F4B4C030918501832F37 +:102EC00082958F7090E002979CF090918101209103 +:102ED0008001FE01769686E0DF011D928A95E9F772 +:102EE0009F8B2E8BFA8EE98E3B8FCF010E9454125E +:102EF000A0E8B1E0F80186E001900D928150E1F781 +:102F00008AC06F3F09F0B6C07F3F09F0B3C071C0FF +:102F1000E216F30640F0C701821B930B883C910533 +:102F200008F053C008C0209530952E0D3F1D283C59 +:102F3000310508F04AC0DD2009F473C06F3F09F085 +:102F40009FC07F3F09F09CC029C0741739F590914C +:102F5000850190FD1AC0892F82958F70B1F0F8011C +:102F600095838F3031F08F5F8295807F9F70982B93 +:102F70009583C8010E945412A0E8B1E0F80186E0F0 +:102F800001900D928150E1F748C0A0E8B1E0F8014E +:102F900086E001900D928150E1F741C05A83498348 +:102FA00089819A810E94D010882349F0A0E8B1E07D +:102FB000F80186E001900D928150E1F72CC08091DC +:102FC00085018160809385012CC07E2DFD82EC827D +:102FD0005A834983DB826D2D8D810E94B110E0E818 +:102FE000F1E086E0DF011D928A95E9F70E946B15FA +:102FF0001CC0DD20B1F05A83498389819A810E94E7 +:10300000D010882371F0A0E8B1E0F80186E00190CB +:103010000D928150E1F70E947A150E946B1581E0B4 +:1030200005C0C8010E945412FACF80E06B960FB61B +:10303000F894DEBF0FBECDBFCF91DF911F910F91EE +:10304000FF90EF90DF90089580918201882309F42A +:1030500058CFFBCD651709F02CCE16CE613009F4A0 +:1030600098CE4DCE651709F0B8CEA3CE651709F0FE +:1030700018CF03CF80918201882309F0BACF48CFBF +:10308000651709F08BCF61CF5A83498389819A8173 +:103090000E94DA19482F892F82958F70282F30E0EF +:1030A000223031050CF463CE243031050CF0B9CF59 +:1030B00063CE0F931F93DF93CF93CDB7DEB72C97DB +:1030C0000FB6F894DEBF0FBECDBF4F835887698718 +:1030D0007A878B879C878E01095F1F4FC8010E94EA +:1030E000F6158823D9F028853F818A859B85892B11 +:1030F00009F46BC02F3F49F480E090E03F3F11F4AA +:1031000081E090E0882309F060C04F81588569858F +:103110007A858B859C850E94C01057C0DE01119670 +:10312000F80186E001900D928150E1F7F981EA8182 +:103130004C815D814115510509F447C0EF3F09F00D +:103140004CC0FF3F09F049C040C0F983EA835D836A +:103150004C83F901EE0FFF1FE20FF31FEE0FFF1F6D +:10316000E857FE4FDE01119686E00D9001928150E6 +:10317000E1F7609386010E944A1527C0919FC00124 +:10318000112488579E4F0E94F615882309F445C0E4 +:103190008091870190E0FC01EE0FFF1FE80FF91FFF +:1031A000EE0FFF1FE857FE4F40815181628173810E +:1031B000848195810E94C0108091870190E00196E2 +:1031C000877090708093870101C016E0909187010D +:1031D00080918601981791F620C080918601282F52 +:1031E00030E02F5F3F4FB901677070702150304061 +:1031F0008091870190E06817790709F0A6CF0E94B7 +:1032000017111092860110928701E0E8F1E086E044 +:10321000DF011D928A95E9F7D8CF2C960FB6F89466 +:10322000DEBF0FBECDBFCF91DF911F910F910895EB +:10323000CF92DF92EF92FF921F93CF93DF93EC0137 +:10324000009709F466C010E090EAC92E9FE0D92EDD +:1032500081E0E82EF12CFE0121969491943748F4F8 +:10326000943008F044C0913079F0923009F051C0A8 +:103270001BC0953709F437C0953750F1892F845812 +:10328000803708F046C037C0FE0121969491892FFF +:10329000805E883060F597708E2D01C0880F9A95FA +:1032A000EAF70E94461B0FC0FE0121969491892FD8 +:1032B000805E883058F497708E2D01C0880F9A95E3 +:1032C000EAF70E944C1B0E946B1B19C0892F15C086 +:1032D000FE01249104C0C6010197F1F72150222379 +:1032E000D1F721960CC0FE012196149108C0892FB8 +:1032F0000E947D1104C0892F8F770E942A11212FEF +:1033000004C0C6010197F1F72150222309F4A3CF8D +:10331000F8CFDF91CF911F91FF90EF90DF90CF908A +:10332000089508950895AF92BF92DF92EF92FF92B1 +:103330000F931F93CF93DF935C01E090B801F0905F +:10334000B9010091BA011091BB018091BC0190912B +:10335000BD01A091BE01B091BF01E82AF92A0A2B54 +:103360001B2BCFE1D0E0DC2ED801C7010C2E04C00E +:10337000B695A795979587950A94D2F78170907026 +:10338000892B39F08C2FB5010E94D304813091052F +:1033900031F421978FEFCF3FD80729F7DD248D2D0A +:1033A000DF91CF911F910F91FF90EF90DF90BF9031 +:1033B000AF9008950F931F938C010E949319B80149 +:1033C0000E94D3041F910F910895CB010E94DA1936 +:1033D00008956093BC017093BD018093BE019093EA +:1033E000BF010E94021108959B01AC016091BC01D4 +:1033F0007091BD018091BE019091BF01622773273A +:10340000842795270E94E91908959B01AC016091DA +:10341000BC017091BD018091BE019091BF016223FA +:103420007323842395230E94E91908959B01AC011D +:103430006091BC017091BD018091BE019091BF016E +:10344000622B732B842B952B0E94E919089521E0A0 +:1034500030E040E050E004C0220F331F441F551FEE +:103460008A95D2F78091BC019091BD01A091BE01D7 +:10347000B091BF01282739274A275B27CA01B90124 +:103480000E94E919089521E030E040E050E004C0D6 +:10349000220F331F441F551F8A95D2F72095309570 +:1034A000409550958091BC019091BD01A091BE01C5 +:1034B000B091BF01282339234A235B23CA01B901F4 +:1034C0000E94E919089521E030E040E050E004C096 +:1034D000220F331F441F551F8A95D2F78091BC01DC +:1034E0009091BD01A091BE01B091BF01282B392B55 +:1034F0004A2B5B2BCA01B9010E94E919089521E00A +:1035000030E040E050E004C0220F331F441F551F3D +:103510008A95D2F7CA01B9010E94E919089560E0BD +:1035200070E080E090E00E94E91908956093B8018E +:103530007093B9018093BA019093BB010E9402116C +:1035400008959B01AC016091B8017091B90180911F +:10355000BA019091BB0162277327842795270E94A7 +:10356000961A08959B01AC016091B8017091B90160 +:103570008091BA019091BB01622373238423952328 +:103580000E94961A08959B01AC016091B801709158 +:10359000B9018091BA019091BB01622B732B842BEE +:1035A000952B0E94961A08950E94961A089580916C +:1035B000CC0185958595859508958091CC0187707E +:1035C00008958091CC01877009F081E00895382F2B +:1035D000A0910C01B0910D01FD0120E08FEF9281CF +:1035E000931791F08F3F19F4992309F4822F2F5FDD +:1035F00031962630A1F78F3F39F0992787FD9095B6 +:10360000A80FB91F12963C930895982F20E030E040 +:10361000E0910C01F0910D01E20FF31F82818917F7 +:1036200009F412822F5F3F4F2630310589F7089544 +:1036300081E090E0E0910C01F0910D01E80FF91F9D +:103640001082019688309105A9F708959091C801DC +:10365000982B9093C801089580959091C801982364 +:103660009093C80108951092C80108959091CB01DC +:10367000982B9093CB01089580959091CB0198233E +:103680009093CB0108951092CB0108959091CA01B7 +:10369000982B9093CA01089580959091CA01982320 +:1036A0009093CA0108951092CA0108958093C901A8 +:1036B00008951092C9010895E0910C01F0910D0157 +:1036C00020E091E0818181112F5F9F5F31969830DA +:1036D000C9F7822F0895E0910C01F0910D018091BE +:1036E000C8018083E0910C01F0910D0180819091DF +:1036F000CB01892B8083E0910C01F0910D01808139 +:103700009091CA01892B80839091C901992369F016 +:10371000E0910C01F0910D018081892B80830E9442 +:103720005C1B882311F00E94591B80910C01909121 +:103730000D010E94AC0F08952091CC01482F4095B7 +:1037400042234093CC01842F877071F430E0842FA2 +:10375000992787FD90952817390731F0842F859593 +:10376000859585950E94431A0895982F990F990F72 +:10377000990F962B9093CC010E94631A0895089597 +:1037800008951F920F920FB60F9211248F939F935B +:10379000AF93BF938091CE01882399F48091CF019C +:1037A0009091D001A091D101B091D2014196A11D7B +:1037B000B11D8093CF019093D001A093D101B0931C +:1037C000D201BF91AF919F918F910F900FBE0F903B +:1037D0001F9018950E94171180E00E9423020E94FA +:1037E0002A220E949F0F0E94680508958091E2019D +:1037F000843039F11092CE0120E488E190E00FB6D8 +:10380000F894A895809360000FBE2093600080E03C +:103810000E94230280E00E94680583B7817F846054 +:1038200083BF83B7816083BF7894889583B78E7F89 +:1038300083BF88E10FB6F894809360001092600017 +:103840000FBE089580E00E9423020E94BF1B0E94C9 +:1038500023070E94C01B80E00E946B05892B81F426 +:1038600081E00E946B05892B59F482E00E946B0570 +:10387000892B31F483E00E946B0520E0892B09F04D +:1038800021E0822F089582E084BD93E095BD9AEFF8 +:1038900097BD80936E0008958FB7F8942091CF0163 +:1038A0003091D0014091D1015091D2018FBFC90117 +:1038B0000895EF92FF920F931F93BC018FB7F89476 +:1038C000E090CF01F090D0010091D1011091D20190 +:1038D0008FBFA801970140705070CB01A0E0B0E00D +:1038E000281739074A075B0720F09701261B370B7B +:1038F00005C09B01209530952E0D3F1DC9011F91DC +:103900000F91FF90EF9008951F920F920FB60F92B4 +:1039100011248F939F93AF93BF938091CF01909188 +:10392000D001A091D101B091D2010196A11DB11D8C +:103930008093CF019093D001A093D101B093D20195 +:10394000BF91AF919F918F910F900FBE0F901F90DD +:1039500018950E94850CF89480E29EE420E931E0FD +:10396000F9013197F1F70197D9F787E090EBA7E0DC +:10397000B0EB8093ED019093EE01A093EF01B09333 +:10398000F0012CE088E190E00FB6F894A8958093C0 +:1039900060000FBE20936000FFCF0E94051D8823AA +:1039A00011F40E94101D0E94001D8093CD010E9401 +:1039B000F61C8093EB010E94FB1C90E0A0E0B0E0BD +:1039C000BC01CD010E94D41A0895682F86E090E0D2 +:1039D0000E9493230895682F84E090E00E9493232F +:1039E000089586E090E00E948523089584E090E0A9 +:1039F0000E948523089583E090E00E948523089526 +:103A000082E090E00E948523089580E090E00E948B +:103A10008D2320E08D5E9E4F09F421E0822F0895D2 +:103A200080E090E06DEE7EEF0E94A52382E090E0C2 +:103A300060E00E94932383E090E060E00E94932383 +:103A400084E090E060E00E94932385E090E060E0F5 +:103A50000E94932386E090E060E00E949323089503 +:103A60008091D90180FF0BC09091100185E0989F53 +:103A7000C0011124959587959595879530C081FF54 +:103A800009C09091100185E0989FC001112495957F +:103A9000879525C082FF03C0909110010DC08091D1 +:103AA000D801882319F485E090E008956091110110 +:103AB00090911001861728F085E0989FC00111248D +:103AC0000EC0899F90011124C901880F991F880F8A +:103AD000991F820F931F70E00E945E23CB018038F4 +:103AE000910510F08FE70895009709F481E008959B +:103AF0008091D90180FF05C080911201869586953D +:103B000018C081FF04C080911201869512C082FF07 +:103B100003C0809112010DC02091D801222319F415 +:103B200081E090E0089560911301809112012617C1 +:103B300010F090E007C0289FC001112470E00E949F +:103B40005E23CB018038910510F08FE70895009730 +:103B500009F481E00895803F21F40E94301D819591 +:103B600004C0813F29F40E94301D8093D50108953F +:103B7000823F21F40E94301D819504C0833F29F4C7 +:103B80000E94301D8093D4010895893F19F40E944A +:103B9000781D05C08A3F31F40E94781D819580937D +:103BA000D60108958B3F21F40E94781D819504C0B1 +:103BB0008C3F29F40E94781D8093D7010895843F9B +:103BC00021F48091D301816017C0853F21F4809159 +:103BD000D301826011C0863F21F48091D3018460BB +:103BE0000BC0873F21F48091D301886005C0883FD6 +:103BF00031F48091D30180618093D30108958D3F8A +:103C000021F48091D901816005C08E3F31F480910B +:103C1000D90182608093D90108958F3F29F4809162 +:103C2000D90184608093D9010895803F29F480915F +:103C3000D50187FF6FC007C0813F41F48091D50156 +:103C400018160CF067C01092D50164C0823F29F4A9 +:103C50008091D40187FF5EC007C0833F41F480910B +:103C6000D40118160CF056C01092D40153C0893FED +:103C700029F48091D60118163CF04CC08A3F39F4E3 +:103C80008091D60187FF46C01092D60143C08B3F7A +:103C900029F48091D70187FF3DC006C08C3F39F4DD +:103CA0008091D7011816B4F51092D70133C0843F24 +:103CB00021F48091D3018E7F05C0853F31F480913E +:103CC000D3018D7F8093D30125C0863F21F480915D +:103CD000D3018B7FF7CF873F21F48091D301877F7A +:103CE000F1CF883F21F48091D3018F7EEBCF8D3FC0 +:103CF00021F48091D9018E7F0BC08E3F21F48091F9 +:103D0000D9018D7F05C08F3F29F48091D9018B7F28 +:103D10008093D9018091D401882371F48091D501D9 +:103D2000882351F48091D601882331F48091D70102 +:103D3000882311F41092D8010895E3EDF1E085E0B5 +:103D4000DF011D928A95E9F71092D8011092D901EE +:103D5000089583ED91E00E94B70F0E944C1C909350 +:103D6000DB018093DA0108951F938091DA0190912D +:103D7000DB010E94591CAC012091D801222321F0C3 +:103D800080910F0190E006C090910E018AE0989F0B +:103D9000C00111244817590708F485C09091D40137 +:103DA000992369F48091D501882349F48091D60143 +:103DB000882329F48091D701882309F474C02F3F08 +:103DC00019F02F5F2093D801191624F40E94301D9A +:103DD0008093D4018091D40187FF05C00E94301DDB +:103DE00081958093D4018091D501181624F40E9406 +:103DF000301D8093D5018091D50187FF05C00E94B9 +:103E0000301D81958093D5016091D401662339F1ED +:103E10001091D501112319F1772767FD7095872F30 +:103E2000972F0E946F2223E333E343E35FE30E9473 +:103E3000D3220E943C226093D401612F772767FD33 +:103E40007095872F972F0E946F2223E333E343E37C +:103E50005FE30E94D3220E943C226093D5018091AF +:103E6000D601181624F40E94781D8093D601809103 +:103E7000D60187FF05C00E94781D81958093D601E9 +:103E80008091D701181624F40E94781D8093D701E1 +:103E90008091D70187FF05C00E94781D819580938E +:103EA000D7010E94A91E1F91089580E0089580E027 +:103EB0000895833099F1843030F4813069F0823094 +:103EC00009F06FC01AC0853009F44AC08530B8F1D6 +:103ED000863009F066C055C020910E01822F90E017 +:103EE000860F911D8F3F910520F4260F20930E0120 +:103EF00008958FEF80930E01089520910F01822F76 +:103F000090E0860F911D8F3F910520F4260F20939E +:103F10000F0108958FEF80930F01089520911001F4 +:103F2000822F90E0860F911D8F3F910520F4260F80 +:103F30002093100108958FEF809310010895209130 +:103F40001101822F90E0860F911D8F3F910520F483 +:103F5000260F2093110108958FEF8093110108958A +:103F600020911201822F90E0860F911D8F3F9105C5 +:103F700020F4260F2093120108958FEF80931201F1 +:103F8000089520911301822F90E0860F911D8F3F9D +:103F9000910520F4260F2093130108958FEF80934D +:103FA00013010895833031F1843030F4813061F0B1 +:103FB000823009F04AC013C0853091F1853028F174 +:103FC000863009F042C037C080910E01681720F496 +:103FD000861B80930E01089510920E010895809122 +:103FE0000F01681720F4861B80930F01089510922B +:103FF0000F01089580911001681720F4861B8093AB +:104000001001089510921001089580911101681710 +:1040100020F4861B809311010895109211010895D8 +:1040200080911201681720F4861B80931201089575 +:1040300010921201089580911301681720F4861BD5 +:1040400080931301089510921301089521E030E048 +:1040500040E050E004C0220F331F441F551F8A95D3 +:10406000D2F7CA01B9010E94D41A0E94171108950B +:104070008732F8F48E3108F08AC08E3009F463C0BC +:104080008F3048F4873009F445C08B3009F486C07E +:10409000863039F528C0863109F480C0873118F49C +:1040A0008031F9F45CC0893109F478C08B31C9F4EE +:1040B00040C0883309F472C0893348F4893209F466 +:1040C00068C0853309F465C0873259F462C083340F +:1040D00009F45FC0843418F48A3318F056C0883469 +:1040E00059F080E008958091CD01807F8093CD01CB +:1040F00081E08093DC0108950E94171180E197E22E +:1041000020E931E0F9013197F1F70197D9F70E94E1 +:10411000A91C42C09091CD01892F809581709E7F0E +:10412000982B882311F09E6001C0917F9093CD0160 +:1041300033C08091CD01982F969590959170292F3D +:10414000220F8D7F19C08091CD01982F969596955D +:1041500090959170292F220F220F8B7F0DC0809197 +:10416000CD01982F96959695969590959170292FBB +:10417000220F220F220F877F822B8093CD0199235C +:1041800069F081608093CD0107C0895303C08D51D0 +:1041900001C080E00E94262081E0089581E008951A +:1041A0001F93182F8091DC01813079F0813020F04D +:1041B000823009F0BCC037C0E0910C01F0910D01D4 +:1041C0008081823209F0B5C007C0E0910C01F09106 +:1041D0000D018081823249F4812F0E94551F88236E +:1041E000F9F4812F0E943820A5C0812F0E94571F0B +:1041F0008823B1F4143161F0153128F41B3081F0BB +:10420000103141F40AC0193219F0183319F408C0FA +:104210001092DC0180E090E08DC082E08093DC01B0 +:1042200081E090E087C0193201F11A3270F4143144 +:10423000E1F0153120F4173009F064C065C0812F1A +:104240008E51863008F05EC01BC01E3409F455C084 +:104250001F3420F41B3409F055C049C0113509F44E +:1042600042C0123509F04EC03AC08091DD0188236A +:1042700019F01092DD0146C081E08093DC015AC044 +:104280001232F9F0133260F41F3199F0103218F441 +:104290001E3109F510C0103281F01132E1F40FC067 +:1042A000143299F0143278F0153289F0163299F4FC +:1042B00010C082E011C081E00FC083E00DC084E037 +:1042C0000BC085E009C086E007C087E005C088E034 +:1042D00003C089E001C080E08093DD0113C08091BC +:1042E000DD0161E007C08091DD0161E009C08091DE +:1042F000DD016AE00E94591F05C08091DD016AE07E +:104300000E94D21F81E016C08EE180930E0182E3ED +:1043100080930F018AE08093100184E18093110162 +:1043200088E08093120188E280931301EBCF109212 +:10433000DC0180E01F9108958091EC01869508953D +:104340009091EC01292F26952827220F9170922B0E +:104350009093EC0120E09E7F09F021E08091EC0138 +:104360008E7F822B8093EC010E94E51C8091EC01F2 +:1043700086950E94230208958091EC01282F2695AE +:104380002F5F2F77922F990F8170892B8093EC01EB +:1043900030E0243031051CF081708093EC0190E016 +:1043A0008091EC018E7F09F091E08091EC018E7F8D +:1043B000892B8093EC010E94E51C8091EC0186958D +:1043C0000E94230208958091EC01982F909591709E +:1043D0008E7F892B8093EC010E94E51C8091EC017B +:1043E00080FD02C080E001C086950E9423020895EE +:1043F0008091EC01982F969591F09158990F8170CA +:10440000892B8093EC0190E08E7F09F091E0809100 +:10441000EC018E7F892B8093EC010E94E51C80913A +:10442000EC0186950E94230208952091EC012695C7 +:10443000822F90E0039744F4822F8F5F880F816072 +:104440008093EC010E94E51C8091EC0186950E940E +:10445000230208950E94051D882311F40E94101D57 +:104460000E94F11C8093EC0180FD02C080E001C03D +:1044700086950E942302089504D06894B1118DC0DE +:10448000089570D088F09F5790F0B92F9927B751B1 +:10449000A0F0D1F0660F771F881F991F1AF0BA9508 +:1044A000C9F712C0B13081F077D0B1E0089574C07F +:1044B000672F782F8827B85F39F0B93FCCF38695FE +:1044C00077956795B395D9F73EF49095809570955B +:1044D00061957F4F8F4F9F4F0895E89409C097FBD8 +:1044E0003EF490958095709561957F4F8F4F9F4FCB +:1044F0009923A9F0F92F96E9BB279395F69587950F +:1045000077956795B795F111F8CFFAF4BB0F11F4D1 +:1045100060FF1BC06F5F7F4F8F4F9F4F16C0882378 +:1045200011F096E911C0772321F09EE8872F762FAE +:1045300005C0662371F096E8862F70E060E02AF0EF +:104540009A95660F771F881FDAF7880F96958795DB +:1045500097F9089557FD9058440F551F59F05F3F44 +:1045600071F04795880F97FB991F61F09F3F79F095 +:1045700087950895121613061406551FF2CF469517 +:10458000F1DF08C0161617061806991FF1CF869599 +:104590007105610508940895E894BB27662777277D +:1045A000CB0197F908950BD078C069D028F06ED070 +:1045B00018F0952309F05AC05FC01124EECFCADF6E +:1045C000A0F3959FD1F3950F50E0551F629FF00126 +:1045D000729FBB27F00DB11D639FAA27F00DB11D7F +:1045E000AA1F649F6627B00DA11D661F829F222708 +:1045F000B00DA11D621F739FB00DA11D621F839F8F +:10460000A00D611D221F749F3327A00D611D231F64 +:10461000849F600D211D822F762F6A2F11249F57B2 +:1046200050408AF0E1F088234AF0EE0FFF1FBB1FD5 +:10463000661F771F881F91505040A9F79E3F510574 +:1046400070F014C0AACF5F3FECF3983EDCF3869580 +:1046500077956795B795F795E7959F5FC1F7FE2B1F +:10466000880F911D9695879597F9089597F99F67FB +:1046700080E870E060E008959FEF80EC08950024EA +:104680000A941616170618060906089500240A94B7 +:1046900012161306140605060895092E0394000C3D +:1046A00011F4882352F0BB0F40F4BF2B11F460FFCC +:1046B00004C06F5F7F4F8F4F9F4F089597FB092E68 +:1046C00007260AD077FD04D00CD006D000201AF4BB +:1046D000709561957F4F0895F6F7909581959F4F5E +:1046E0000895AA1BBB1B51E107C0AA1FBB1FA61739 +:1046F000B70710F0A61BB70B881F991F5A95A9F78B +:1047000080959095BC01CD010895F999FECF92BD99 +:1047100081BDF89A992780B50895A8E1B0E042E0FC +:1047200050E00C94AD23262FF999FECF92BD81BDA8 +:10473000F89A019700B4021639F01FBA20BD0FB6DF +:10474000F894FA9AF99A0FBE08950196272F0E94BD +:1047500094230C949323DC01CB01FC01F999FECF47 +:1047600006C0F2BDE1BDF89A319600B40D924150F9 +:0A4770005040B8F70895F894FFCF09 +:10477A00050175080A09E408AE087808C0011E3266 +:10478A000A14082840004500250026006100600040 +:10479A002000370064006500660067004400460098 +:1047AA002400470040004500250026006100600003 +:1047BA002000370064006500660067004400460078 +:0447CA002400470080 +:00000001FF diff --git a/keyboard/planck/keymaps/Jacob/readme.md b/keyboard/planck/keymaps/Jacob/readme.md new file mode 100644 index 000000000..2a4be4ebc --- /dev/null +++ b/keyboard/planck/keymaps/Jacob/readme.md @@ -0,0 +1 @@ +Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. \ No newline at end of file -- cgit v1.3.1 From 1a8c0dd22d6a2255511d0db6a456315541b5815b Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Sun, 15 May 2016 00:27:32 -0400 Subject: Leader key implementation (#326) * implements leader key for planck experimental * allows override of leader timeout * adds ability to use the leader key in seq * fixes leader keycode * adds chording prototype * fixes keycode detection * moves music mode to quantum.c * disables chording by default * updates process_action functions to return bool --- keyboard/atomic/atomic.c | 7 +- keyboard/atomic/atomic.h | 2 +- keyboard/gh60_rev_c/gh60.c | 7 +- keyboard/gh60_rev_c/gh60.h | 2 +- keyboard/planck/keymaps/experimental/keymap.c | 48 +++++--- keyboard/planck/planck.c | 8 +- keyboard/planck/planck.h | 16 +-- keyboard/preonic/preonic.c | 8 +- keyboard/preonic/preonic.h | 2 +- quantum/keymap_common.c | 2 +- quantum/keymap_common.h | 4 +- quantum/matrix.c | 8 +- quantum/quantum.c | 167 ++++++++++++++++++++++++++ quantum/quantum.h | 48 ++++++++ quantum/quantum.mk | 3 +- quantum/template/template.c | 7 +- quantum/template/template.h | 2 +- tmk_core/common/action.c | 7 +- tmk_core/common/action.h | 2 +- tmk_core/common/matrix.h | 4 +- 20 files changed, 290 insertions(+), 64 deletions(-) create mode 100644 quantum/quantum.c create mode 100644 quantum/quantum.h (limited to 'keyboard/planck') diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c index b4b261457..fa218a48f 100644 --- a/keyboard/atomic/atomic.c +++ b/keyboard/atomic/atomic.c @@ -11,8 +11,9 @@ void matrix_scan_user(void) { } __attribute__ ((weak)) -void process_action_user(keyrecord_t *record) { +bool process_action_user(keyrecord_t *record) { // leave this function blank - it can be defined in a keymap file + return true; } __attribute__ ((weak)) @@ -45,11 +46,11 @@ void matrix_scan_kb(void) { matrix_scan_user(); } -void process_action_kb(keyrecord_t *record) { +bool process_action_kb(keyrecord_t *record) { // put your per-action keyboard code here // runs for every action, just before processing by the firmware - process_action_user(record); + return process_action_user(record); } void led_set_kb(uint8_t usb_led) { diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h index 845a9043e..2d6b4c6cb 100644 --- a/keyboard/atomic/atomic.h +++ b/keyboard/atomic/atomic.h @@ -29,7 +29,7 @@ void matrix_init_user(void); void matrix_scan_user(void); -void process_action_user(keyrecord_t *record); +bool process_action_user(keyrecord_t *record); void led_set_user(uint8_t usb_led); void backlight_init_ports(void); diff --git a/keyboard/gh60_rev_c/gh60.c b/keyboard/gh60_rev_c/gh60.c index 8e7219bfe..6da4d8ee3 100644 --- a/keyboard/gh60_rev_c/gh60.c +++ b/keyboard/gh60_rev_c/gh60.c @@ -12,8 +12,9 @@ void matrix_scan_user(void) { } __attribute__ ((weak)) -void process_action_user(keyrecord_t *record) { +bool process_action_user(keyrecord_t *record) { // leave this function blank - it can be defined in a keymap file + return true; } __attribute__ ((weak)) @@ -35,11 +36,11 @@ void matrix_scan_kb(void) { matrix_scan_user(); } -void process_action_kb(keyrecord_t *record) { +bool process_action_kb(keyrecord_t *record) { // put your per-action keyboard code here // runs for every action, just before processing by the firmware - process_action_user(record); + return process_action_user(record); } void led_set_kb(uint8_t usb_led) { diff --git a/keyboard/gh60_rev_c/gh60.h b/keyboard/gh60_rev_c/gh60.h index 2373ad333..95e5e1ebc 100644 --- a/keyboard/gh60_rev_c/gh60.h +++ b/keyboard/gh60_rev_c/gh60.h @@ -75,7 +75,7 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } void matrix_init_user(void); void matrix_scan_user(void); -void process_action_user(keyrecord_t *record); +bool process_action_user(keyrecord_t *record); void led_set_user(uint8_t usb_led); #endif diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c index fc3ac4a97..8dc158c73 100644 --- a/keyboard/planck/keymaps/experimental/keymap.c +++ b/keyboard/planck/keymaps/experimental/keymap.c @@ -6,6 +6,7 @@ #ifdef AUDIO_ENABLE #include "audio.h" #endif + #include "eeconfig.h" extern keymap_config_t keymap_config; @@ -78,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -291,7 +292,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 8: if (record->event.pressed) { #ifdef AUDIO_ENABLE - layer_off(_MUSIC); + music_activated = false; stop_all_notes(); #endif } @@ -300,7 +301,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(music_scale, false, 0); - layer_on(_MUSIC); + music_activated = true; #endif } break; @@ -360,24 +361,35 @@ void matrix_init_user(void) { } #ifdef AUDIO_ENABLE -void play_goodbye_tone() -{ - PLAY_NOTE_ARRAY(goodbye, false, 0); - _delay_ms(150); -} + void play_goodbye_tone(void) + { + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); + } +#endif -uint8_t starting_note = 0x0C; -int offset = 0; +LEADER_EXTERNS(); -void process_action_user(keyrecord_t *record) { +#define LEADER_TIMEOUT 300 - if (IS_LAYER_ON(_MUSIC)) { - if (record->event.pressed) { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } else { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_ONE_KEY(KC_F) { + register_code(KC_S); + unregister_code(KC_S); + } + SEQ_TWO_KEYS(KC_A, KC_S) { + register_code(KC_H); + unregister_code(KC_H); + } + SEQ_THREE_KEYS(KC_A, KC_S, KC_D) { + register_code(KC_LGUI); + register_code(KC_S); + unregister_code(KC_S); + unregister_code(KC_LGUI); } } - } -#endif diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index 446353dbf..da7b3a170 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -7,7 +7,9 @@ __attribute__ ((weak)) void matrix_scan_user(void) {} __attribute__ ((weak)) -void process_action_user(keyrecord_t *record) {} +bool process_action_user(keyrecord_t *record) { + return true; +} __attribute__ ((weak)) void led_set_user(uint8_t usb_led) {} @@ -32,8 +34,8 @@ void matrix_scan_kb(void) { matrix_scan_user(); } -void process_action_kb(keyrecord_t *record) { - process_action_user(record); +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); } void led_set_kb(uint8_t usb_led) { diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index cfd4956bf..8aec6b262 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -1,19 +1,7 @@ #ifndef PLANCK_H #define PLANCK_H -#include "matrix.h" -#include "keymap_common.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif -#ifdef RGBLIGHT_ENABLE - #include "rgblight.h" -#endif -#include -#include -#ifdef MIDI_ENABLE - #include -#endif +#include "quantum.h" #define PLANCK_MIT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ @@ -43,7 +31,7 @@ void matrix_init_user(void); void matrix_scan_user(void); -void process_action_user(keyrecord_t *record); +bool process_action_user(keyrecord_t *record); void led_set_user(uint8_t usb_led); void backlight_init_ports(void); diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c index 211f8d029..13e05c65a 100644 --- a/keyboard/preonic/preonic.c +++ b/keyboard/preonic/preonic.c @@ -11,8 +11,8 @@ void matrix_scan_user(void) { }; __attribute__ ((weak)) -void process_action_user(keyrecord_t *record) { - +bool process_action_user(keyrecord_t *record) { + return true; }; void matrix_init_kb(void) { @@ -36,8 +36,8 @@ void matrix_scan_kb(void) { matrix_scan_user(); }; -void process_action_kb(keyrecord_t *record) { - process_action_user(record); +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); } #ifdef BACKLIGHT_ENABLE diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 030acdadb..2406a11d7 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -47,6 +47,6 @@ void matrix_init_user(void); void matrix_scan_user(void); -void process_action_kb(keyrecord_t *record); +bool process_action_kb(keyrecord_t *record); #endif diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 8f00f9cc3..0184770c4 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -251,7 +251,7 @@ static action_t keycode_to_action(uint16_t keycode) } eeconfig_update_keymap(keymap_config.raw); break; - case 0x5100 ... 0x5FFF: ; + case 0x5100 ... 0x56FF: ; // Layer movement shortcuts // See .h to see constraints/usage int type = (keycode >> 0x8) & 0xF; diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 322fda498..2ad1ba6c6 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -159,7 +159,7 @@ extern const uint16_t fn_actions[]; #define S(kc) LSFT(kc) #define F(kc) FUNC(kc) -#define M(kc) kc | 0x3000 +#define M(kc) (kc | 0x3000) #define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE) @@ -191,6 +191,8 @@ extern const uint16_t fn_actions[]; #define RESET 0x5000 #define DEBUG 0x5001 +#define KC_LEAD 0x5014 + // MAGIC keycodes #define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002 diff --git a/quantum/matrix.c b/quantum/matrix.c index 7d70f728d..cab39e117 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -55,12 +55,12 @@ static void unselect_rows(void); static void select_row(uint8_t row); __attribute__ ((weak)) -void matrix_init_kb(void) { +void matrix_init_quantum(void) { } __attribute__ ((weak)) -void matrix_scan_kb(void) { +void matrix_scan_quantum(void) { } @@ -93,7 +93,7 @@ void matrix_init(void) matrix_debouncing[i] = 0; } - matrix_init_kb(); + matrix_init_quantum(); } @@ -157,7 +157,7 @@ uint8_t matrix_scan(void) } #endif - matrix_scan_kb(); + matrix_scan_quantum(); return 1; } diff --git a/quantum/quantum.c b/quantum/quantum.c new file mode 100644 index 000000000..e274d846f --- /dev/null +++ b/quantum/quantum.c @@ -0,0 +1,167 @@ +#include "quantum.h" + +__attribute__ ((weak)) +void matrix_init_kb(void) {} + +__attribute__ ((weak)) +void matrix_scan_kb(void) {} + +__attribute__ ((weak)) +bool process_action_kb(keyrecord_t *record) { + return true; +} + +__attribute__ ((weak)) +void leader_start(void) {} + +__attribute__ ((weak)) +void leader_end(void) {} + +#ifdef AUDIO_ENABLE + uint8_t starting_note = 0x0C; + int offset = 0; + bool music_activated = false; +#endif + +// Leader key stuff +bool leading = false; +uint16_t leader_time = 0; + +uint16_t leader_sequence[3] = {0, 0, 0}; +uint8_t leader_sequence_size = 0; + +// Chording stuff +#define CHORDING_MAX 4 +bool chording = false; + +uint8_t chord_keys[CHORDING_MAX] = {0}; +uint8_t chord_key_count = 0; +uint8_t chord_key_down = 0; + +bool keys_chord(uint8_t keys[]) { + uint8_t keys_size = sizeof(keys)/sizeof(keys[0]); + bool pass = true; + uint8_t in = 0; + for (uint8_t i = 0; i < chord_key_count; i++) { + bool found = false; + for (uint8_t j = 0; j < keys_size; j++) { + if (chord_keys[i] == (keys[j] & 0xFF)) { + in++; // detects key in chord + found = true; + break; + } + } + if (found) + continue; + if (chord_keys[i] != 0) { + pass = false; // makes sure rest are blank + } + } + return (pass && (in == keys_size)); +} + +bool process_action_quantum(keyrecord_t *record) { + + /* This gets the keycode from the key pressed */ + keypos_t key = record->event.key; + uint16_t keycode; + + #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) + uint8_t layer; + + if (record->event.pressed) { + layer = layer_switch_get_layer(key); + update_source_layers_cache(key, layer); + } else { + layer = read_source_layers_cache(key); + } + keycode = keymap_key_to_keycode(layer, key); + #else + keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key); + #endif + + #ifdef AUDIO_ENABLE + if (music_activated) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through + return false; + } + #endif + + + +#ifndef DISABLE_LEADER + // Leader key set-up + if (record->event.pressed) { + if (!leading && keycode == KC_LEAD) { + leader_start(); + leading = true; + leader_time = timer_read(); + leader_sequence_size = 0; + leader_sequence[0] = 0; + leader_sequence[1] = 0; + leader_sequence[2] = 0; + return false; + } + if (leading && timer_elapsed(leader_time) < LEADER_TIMEOUT) { + leader_sequence[leader_sequence_size] = keycode; + leader_sequence_size++; + return false; + } + } +#endif + +#define DISABLE_CHORDING +#ifndef DISABLE_CHORDING + + if (keycode >= 0x5700 && keycode <= 0x57FF) { + if (record->event.pressed) { + if (!chording) { + chording = true; + for (uint8_t i = 0; i < CHORDING_MAX; i++) + chord_keys[i] = 0; + chord_key_count = 0; + chord_key_down = 0; + } + chord_keys[chord_key_count] = (keycode & 0xFF); + chord_key_count++; + chord_key_down++; + return false; + } else { + if (chording) { + chord_key_down--; + if (chord_key_down == 0) { + chording = false; + // Chord Dictionary + if (keys_chord((uint8_t[]){KC_ENTER, KC_SPACE})) { + register_code(KC_A); + unregister_code(KC_A); + return false; + } + for (uint8_t i = 0; i < chord_key_count; i++) { + register_code(chord_keys[i]); + unregister_code(chord_keys[i]); + return false; + } + } + } + } + } + +#endif + + + return process_action_kb(record); +} + +void matrix_init_quantum() { + matrix_init_kb(); +} + +void matrix_scan_quantum() { + matrix_scan_kb(); +} \ No newline at end of file diff --git a/quantum/quantum.h b/quantum/quantum.h new file mode 100644 index 000000000..db726ad42 --- /dev/null +++ b/quantum/quantum.h @@ -0,0 +1,48 @@ +#ifndef QUANTUM_H +#define QUANTUM_H + +#include "matrix.h" +#include "keymap_common.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif +#ifdef RGBLIGHT_ENABLE + #include "rgblight.h" +#endif +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#ifdef MIDI_ENABLE + #include +#endif +#include "action_layer.h" +#include "eeconfig.h" +#include +#include + +extern uint32_t default_layer_state; + +#ifndef NO_ACTION_LAYER + extern uint32_t layer_state; +#endif + +bool music_activated; + +void matrix_init_kb(void); +void matrix_scan_kb(void); +bool process_action_kb(keyrecord_t *record); + +void leader_start(void); +void leader_end(void); + +#ifndef LEADER_TIMEOUT + #define LEADER_TIMEOUT 200 +#endif +#define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0) +#define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0) +#define SEQ_THREE_KEYS(key1, key2, key3) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == (key3)) + +#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size +#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) + +#endif \ No newline at end of file diff --git a/quantum/quantum.mk b/quantum/quantum.mk index 5f4c2f045..b45ad850a 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -1,7 +1,8 @@ QUANTUM_DIR = quantum # # project specific files -SRC += $(QUANTUM_DIR)/keymap_common.c \ +SRC += $(QUANTUM_DIR)/quantum.c \ + $(QUANTUM_DIR)/keymap_common.c \ $(QUANTUM_DIR)/led.c # ifdef KEYMAP_FILE diff --git a/quantum/template/template.c b/quantum/template/template.c index 6050a2d20..649072eb2 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -11,8 +11,9 @@ void matrix_scan_user(void) { } __attribute__ ((weak)) -void process_action_user(keyrecord_t *record) { +bool process_action_user(keyrecord_t *record) { // leave this function blank - it can be defined in a keymap file + return true; } __attribute__ ((weak)) @@ -34,11 +35,11 @@ void matrix_scan_kb(void) { matrix_scan_user(); } -void process_action_kb(keyrecord_t *record) { +bool process_action_kb(keyrecord_t *record) { // put your per-action keyboard code here // runs for every action, just before processing by the firmware - process_action_user(record); + return process_action_user(record); } void led_set_kb(uint8_t usb_led) { diff --git a/quantum/template/template.h b/quantum/template/template.h index 22742105a..8537e3b4b 100644 --- a/quantum/template/template.h +++ b/quantum/template/template.h @@ -24,7 +24,7 @@ void matrix_init_user(void); void matrix_scan_user(void); -void process_action_user(keyrecord_t *record); +bool process_action_user(keyrecord_t *record); void led_set_user(uint8_t usb_led); #endif diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 081e90b2d..c026b96d9 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -70,7 +70,9 @@ void process_action_nocache(keyrecord_t *record) #endif __attribute__ ((weak)) -void process_action_kb(keyrecord_t *record) {} +bool process_action_quantum(keyrecord_t *record) { + return true; +} void process_action(keyrecord_t *record) { @@ -89,7 +91,8 @@ void process_action(keyrecord_t *record) } #endif - process_action_kb(record); + if (!process_action_quantum(record)) + return; action_t action = store_or_get_action(event.pressed, event.key); dprint("ACTION: "); debug_action(action); diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index 44ec3047b..7d1cbafe9 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -59,7 +59,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt); void action_function(keyrecord_t *record, uint8_t id, uint8_t opt); /* keyboard-specific key event (pre)processing */ -void process_action_kb(keyrecord_t *record); +bool process_action_quantum(keyrecord_t *record); /* Utilities for actions. */ #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index 0b013fc98..ad0871bfb 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -64,8 +64,8 @@ void matrix_power_up(void); void matrix_power_down(void); /* keyboard-specific setup/loop functionality */ -void matrix_init_kb(void); -void matrix_scan_kb(void); +void matrix_init_quantum(void); +void matrix_scan_quantum(void); #ifdef __cplusplus } -- cgit v1.3.1 From 15719f3574c6274ee0f3ec87431927c5a523aa3e Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 15 May 2016 00:40:59 -0400 Subject: adds a sequencer to the music mode (#330) * implements leader key for planck experimental * allows override of leader timeout * adds ability to use the leader key in seq * fixes leader keycode * adds chording prototype * fixes keycode detection * moves music mode to quantum.c * disables chording by default * adds music sequencer functionality * implements audio/music functions in quantum.c * Merge branch 'master' into process-record --- keyboard/planck/keymaps/experimental/keymap.c | 72 +----------------- quantum/audio/audio.c | 11 ++- quantum/audio/audio.h | 1 + quantum/keymap_common.h | 15 +++- quantum/quantum.c | 104 +++++++++++++++++++++++++- 5 files changed, 122 insertions(+), 81 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c index 8dc158c73..8bc7334c9 100644 --- a/keyboard/planck/keymaps/experimental/keymap.c +++ b/keyboard/planck/keymaps/experimental/keymap.c @@ -20,8 +20,7 @@ extern keymap_config_t keymap_config; #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 -#define _MUSIC 5 -#define _PLOVER 6 +#define _PLOVER 5 #define _ADJUST 16 // Macro name shortcuts @@ -31,12 +30,6 @@ extern keymap_config_t keymap_config; #define LOWER M(_LOWER) #define RAISE M(_RAISE) #define M_BL 5 -#define AUD_OFF M(6) -#define AUD_ON M(7) -#define MUS_OFF M(8) -#define MUS_ON M(9) -#define VC_IN M(10) -#define VC_DE M(11) #define PLOVER M(12) #define EXT_PLV M(13) @@ -136,16 +129,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -/* Music (reserved for process_action_user) - * - */ -[_MUSIC] = { - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} -}, - /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | @@ -178,8 +161,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, - {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -205,7 +188,6 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -274,53 +256,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; - case 6: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - case 7: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - } - break; - case 8: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - music_activated = false; - stop_all_notes(); - #endif - } - break; - case 9: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(music_scale, false, 0); - music_activated = true; - #endif - } - break; - case 10: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; - case 11: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; case 12: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -330,7 +265,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) layer_off(_RAISE); layer_off(_LOWER); layer_off(_ADJUST); - layer_off(_MUSIC); layer_on(_PLOVER); if (!eeconfig_is_enabled()) { eeconfig_init(); diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 27b64f8c9..243f49f0e 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -478,12 +478,11 @@ void increase_tempo(uint8_t tempo_change) { // Override these functions in your keymap file to play different tunes on // startup and bootloader jump __attribute__ ((weak)) -void play_startup_tone() -{ -} +void play_startup_tone() {} __attribute__ ((weak)) -void play_goodbye_tone() -{ -} +void play_goodbye_tone() {} + +__attribute__ ((weak)) +void audio_on_callback(void) {} //------------------------------------------------------------------------------ diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index 4ba879bbb..fe8506131 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -29,6 +29,7 @@ bool is_audio_on(void); void audio_toggle(void); void audio_on(void); void audio_off(void); +void audio_on_callback(void); // Vibrato rate functions diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 2ad1ba6c6..4107d575b 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -191,8 +191,6 @@ extern const uint16_t fn_actions[]; #define RESET 0x5000 #define DEBUG 0x5001 -#define KC_LEAD 0x5014 - // MAGIC keycodes #define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002 @@ -217,6 +215,19 @@ extern const uint16_t fn_actions[]; #define AG_SWAP MAGIC_SWAP_ALT_GUI #define AG_NORM MAGIC_UNSWAP_ALT_GUI +#define KC_LEAD 0x5014 + +// Audio on/off +#define AU_ON 0x5020 +#define AU_OFF 0x5021 + +// Music mode on/off +#define MU_ON 0x5022 +#define MU_OFF 0x5023 + +// Music voice iterate +#define MUV_IN 0x5024 +#define MUV_DE 0x5025 // GOTO layer - 16 layers max // when: diff --git a/quantum/quantum.c b/quantum/quantum.c index e274d846f..cd7fdbb7f 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -21,6 +21,7 @@ void leader_end(void) {} uint8_t starting_note = 0x0C; int offset = 0; bool music_activated = false; + float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif // Leader key stuff @@ -60,6 +61,15 @@ bool keys_chord(uint8_t keys[]) { return (pass && (in == keys_size)); } +static bool music_sequence_recording = false; +static bool music_sequence_playing = false; +static float music_sequence[16] = {0}; +static uint8_t music_sequence_count = 0; +static uint8_t music_sequence_position = 0; + +static uint16_t music_sequence_timer = 0; +static uint16_t music_sequence_interval = 100; + bool process_action_quantum(keyrecord_t *record) { /* This gets the keycode from the key pressed */ @@ -81,12 +91,87 @@ bool process_action_quantum(keyrecord_t *record) { #endif #ifdef AUDIO_ENABLE - if (music_activated) { + if (keycode == AU_ON && record->event.pressed) { + audio_on(); + audio_on_callback(); + return false; + } + + if (keycode == AU_OFF && record->event.pressed) { + audio_off(); + return false; + } + + if (keycode == MU_ON && record->event.pressed) { + music_activated = true; + PLAY_NOTE_ARRAY(music_scale, false, 0); + return false; + } + + if (keycode == MU_OFF && record->event.pressed) { + music_activated = false; + stop_all_notes(); + return false; + } + + if (keycode == MUV_IN && record->event.pressed) { + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + return false; + } + + if (keycode == MUV_DE && record->event.pressed) { + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + return false; + } + + if (music_activated) { + + if (keycode == KC_LCTL && record->event.pressed) { // Start recording + stop_all_notes(); + music_sequence_recording = true; + music_sequence_playing = false; + music_sequence_count = 0; + return false; + } + if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing + stop_all_notes(); + music_sequence_recording = false; + music_sequence_playing = false; + return false; + } + if (keycode == KC_LGUI && record->event.pressed) { // Start playing + stop_all_notes(); + music_sequence_recording = false; + music_sequence_playing = true; + music_sequence_position = 0; + music_sequence_timer = 0; + return false; + } + + if (keycode == KC_UP) { + if (record->event.pressed) + music_sequence_interval-=10; + return false; + } + if (keycode == KC_DOWN) { + if (record->event.pressed) + music_sequence_interval+=10; + return false; + } + + float freq = ((float)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)); if (record->event.pressed) { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + play_note(freq, 0xF); + if (music_sequence_recording) { + music_sequence[music_sequence_count] = freq; + music_sequence_count++; + } } else { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } + stop_note(freq); + } + if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through return false; } @@ -163,5 +248,16 @@ void matrix_init_quantum() { } void matrix_scan_quantum() { + #ifdef AUDIO_ENABLE + if (music_sequence_playing) { + if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) { + music_sequence_timer = timer_read(); + stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); + play_note(music_sequence[music_sequence_position], 0xF); + music_sequence_position = (music_sequence_position + 1) % music_sequence_count; + } + } + + #endif matrix_scan_kb(); } \ No newline at end of file -- cgit v1.3.1 From fde477a927edc6b4207a6968d44aeed021e8b300 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 15 May 2016 00:51:06 -0400 Subject: updates midi functionality (#331) * implements leader key for planck experimental * allows override of leader timeout * adds ability to use the leader key in seq * fixes leader keycode * adds chording prototype * fixes keycode detection * moves music mode to quantum.c * disables chording by default * adds music sequencer functionality * implements audio/music functions in quantum.c * splits up process_action to allow independent processing of actions * moves midi stuff to quantum.c * adds additional scales for midi --- keyboard/planck/keymaps/experimental/keymap.c | 6 +- keyboard/planck/keymaps/experimental/makefile.mk | 5 +- quantum/keymap_common.c | 5 -- quantum/keymap_common.h | 5 ++ quantum/quantum.c | 88 ++++++++++++++++++++++-- quantum/quantum.h | 3 +- quantum/quantum.mk | 6 +- tmk_core/protocol/lufa/lufa.c | 2 +- 8 files changed, 103 insertions(+), 17 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c index 8bc7334c9..2f8a0510a 100644 --- a/keyboard/planck/keymaps/experimental/keymap.c +++ b/keyboard/planck/keymaps/experimental/keymap.c @@ -162,7 +162,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, - {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -227,8 +227,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case _LOWER: if (record->event.pressed) { layer_on(_LOWER); + #ifdef BACKLIGHT_ENABLE breathing_speed_set(2); breathing_pulse(); + #endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_LOWER); @@ -238,8 +240,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case _RAISE: if (record->event.pressed) { layer_on(_RAISE); + #ifdef BACKLIGHT_ENABLE breathing_speed_set(2); breathing_pulse(); + #endif update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_RAISE); diff --git a/keyboard/planck/keymaps/experimental/makefile.mk b/keyboard/planck/keymaps/experimental/makefile.mk index 99fbfbd0b..6c1e05b65 100644 --- a/keyboard/planck/keymaps/experimental/makefile.mk +++ b/keyboard/planck/keymaps/experimental/makefile.mk @@ -1,2 +1,5 @@ AUDIO_ENABLE = yes -NKRO_ENABLE = yes \ No newline at end of file +NKRO_ENABLE = yes +MIDI_ENABLE = yes +BACKLIGHT_ENABLE = no +COMMAND_ENABLE = no \ No newline at end of file diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 0184770c4..2aae13e67 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -282,11 +282,6 @@ static action_t keycode_to_action(uint16_t keycode) action.code = ACTION_MODS_ONESHOT(mod); } break; - #ifdef MIDI_ENABLE - case 0x6000 ... 0x6FFF: - action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); - break; - #endif case 0x7000 ... 0x7FFF: action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); break; diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 0074ab164..07020150a 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -195,6 +195,7 @@ extern const uint16_t fn_actions[]; + // MAGIC keycodes #define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002 #define MAGIC_UNSWAP_CONTROL_CAPSLOCK 0x5003 @@ -232,6 +233,10 @@ extern const uint16_t fn_actions[]; #define MUV_IN 0x5024 #define MUV_DE 0x5025 +// Midi mode on/off +#define MI_ON 0x5026 +#define MI_OFF 0x5027 + // GOTO layer - 16 layers max // when: // ON_PRESS = 1 diff --git a/quantum/quantum.c b/quantum/quantum.c index dd5d84f82..5a978d332 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -19,11 +19,15 @@ void leader_end(void) {} #ifdef AUDIO_ENABLE uint8_t starting_note = 0x0C; - int offset = 0; + int offset = 7; bool music_activated = false; float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif +#ifdef MIDI_ENABLE + bool midi_activated = false; +#endif + // Leader key stuff bool leading = false; uint16_t leader_time = 0; @@ -98,6 +102,82 @@ bool process_record_quantum(keyrecord_t *record) { // return false; // } + #ifdef MIDI_ENABLE + if (keycode == MI_ON && record->event.pressed) { + midi_activated = true; + PLAY_NOTE_ARRAY(music_scale, false, 0); + return false; + } + + if (keycode == MI_OFF && record->event.pressed) { + midi_activated = false; + midi_send_cc(&midi_device, 0, 0x7B, 0); + return false; + } + + if (midi_activated) { + if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { + if (record->event.pressed) { + starting_note++; // Change key + midi_send_cc(&midi_device, 0, 0x7B, 0); + // midi_send_cc(&midi_device, 1, 0x7B, 0); + // midi_send_cc(&midi_device, 2, 0x7B, 0); + // midi_send_cc(&midi_device, 3, 0x7B, 0); + // midi_send_cc(&midi_device, 4, 0x7B, 0); + } + return false; + } + if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { + if (record->event.pressed) { + starting_note--; // Change key + midi_send_cc(&midi_device, 0, 0x7B, 0); + // midi_send_cc(&midi_device, 1, 0x7B, 0); + // midi_send_cc(&midi_device, 2, 0x7B, 0); + // midi_send_cc(&midi_device, 3, 0x7B, 0); + // midi_send_cc(&midi_device, 4, 0x7B, 0); + } + return false; + } + if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { + offset++; // Change scale + midi_send_cc(&midi_device, 0, 0x7B, 0); + // midi_send_cc(&midi_device, 1, 0x7B, 0); + // midi_send_cc(&midi_device, 2, 0x7B, 0); + // midi_send_cc(&midi_device, 3, 0x7B, 0); + // midi_send_cc(&midi_device, 4, 0x7B, 0); + return false; + } + if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { + offset--; // Change scale + midi_send_cc(&midi_device, 0, 0x7B, 0); + // midi_send_cc(&midi_device, 1, 0x7B, 0); + // midi_send_cc(&midi_device, 2, 0x7B, 0); + // midi_send_cc(&midi_device, 3, 0x7B, 0); + // midi_send_cc(&midi_device, 4, 0x7B, 0); + return false; + } + // basic + // uint8_t note = (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row); + // advanced + // uint8_t note = (starting_note + record->event.key.col + offset)+12*(MATRIX_ROWS - record->event.key.row); + // guitar + uint8_t note = (starting_note + record->event.key.col + offset)+5*(MATRIX_ROWS - record->event.key.row); + // violin + // uint8_t note = (starting_note + record->event.key.col + offset)+7*(MATRIX_ROWS - record->event.key.row); + + if (record->event.pressed) { + // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); + midi_send_noteon(&midi_device, 0, note, 127); + } else { + // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); + midi_send_noteoff(&midi_device, 0, note, 127); + } + + if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through + return false; + } + #endif + #ifdef AUDIO_ENABLE if (keycode == AU_ON && record->event.pressed) { audio_on(); @@ -169,7 +249,7 @@ bool process_record_quantum(keyrecord_t *record) { return false; } - float freq = ((float)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)); + float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)); if (record->event.pressed) { play_note(freq, 0xF); if (music_sequence_recording) { @@ -185,8 +265,6 @@ bool process_record_quantum(keyrecord_t *record) { } #endif - - #ifndef DISABLE_LEADER // Leader key set-up if (record->event.pressed) { @@ -267,6 +345,6 @@ void matrix_scan_quantum() { } #endif - + matrix_scan_kb(); } \ No newline at end of file diff --git a/quantum/quantum.h b/quantum/quantum.h index db726ad42..bfecdb262 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -13,7 +13,8 @@ #include "audio.h" #endif #ifdef MIDI_ENABLE - #include + // #include + #include #endif #include "action_layer.h" #include "eeconfig.h" diff --git a/quantum/quantum.mk b/quantum/quantum.mk index b45ad850a..e7ccfd659 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -24,9 +24,9 @@ ifndef CUSTOM_MATRIX SRC += $(QUANTUM_DIR)/matrix.c endif -ifeq ($(strip $(MIDI_ENABLE)), yes) - SRC += $(QUANTUM_DIR)/keymap_midi.c -endif +#ifeq ($(strip $(MIDI_ENABLE)), yes) +# SRC += $(QUANTUM_DIR)/keymap_midi.c +#endif ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/audio.c diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index f03f9a9b9..aba94cd59 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -883,7 +883,7 @@ int main(void) midi_register_cc_callback(&midi_device, cc_callback); midi_register_sysex_callback(&midi_device, sysex_callback); - init_notes(); + // init_notes(); // midi_send_cc(&midi_device, 0, 1, 2); // midi_send_cc(&midi_device, 15, 1, 0); // midi_send_noteon(&midi_device, 0, 64, 127); -- cgit v1.3.1 From e2aa980ad5d92f76dadf1de9dbadb9eacbddd5df Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 15 May 2016 01:07:48 -0400 Subject: cleans up default keymaps (olkb) --- keyboard/atomic/atomic.h | 6 +-- keyboard/planck/keymaps/default/keymap.c | 86 ++----------------------------- keyboard/preonic/keymaps/default/keymap.c | 85 +----------------------------- keyboard/preonic/preonic.h | 14 +---- 4 files changed, 7 insertions(+), 184 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h index 2d6b4c6cb..456c3fbdf 100644 --- a/keyboard/atomic/atomic.h +++ b/keyboard/atomic/atomic.h @@ -1,11 +1,7 @@ #ifndef ATOMIC_H #define ATOMIC_H -#include "matrix.h" -#include "keymap_common.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif +#include "quantum.h" #include #include diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index 56f20a3b9..79bf62436 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -19,8 +19,7 @@ extern keymap_config_t keymap_config; #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 -#define _MUSIC 5 -#define _PLOVER 6 +#define _PLOVER 5 #define _ADJUST 16 // Macro name shortcuts @@ -30,12 +29,6 @@ extern keymap_config_t keymap_config; #define LOWER M(_LOWER) #define RAISE M(_RAISE) #define M_BL 5 -#define AUD_OFF M(6) -#define AUD_ON M(7) -#define MUS_OFF M(8) -#define MUS_ON M(9) -#define VC_IN M(10) -#define VC_DE M(11) #define PLOVER M(12) #define EXT_PLV M(13) #define TOG_OUT M(14) @@ -136,16 +129,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -/* Music (reserved for process_action_user) - * - */ -[_MUSIC] = { - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} -}, - /* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. * | # | # | # | # | # | # | # | # | # | # | # | # | @@ -178,8 +161,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_ADJUST] = { {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, - {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -205,7 +188,6 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -270,53 +252,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; - case 6: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - case 7: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - } - break; - case 8: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - layer_off(_MUSIC); - stop_all_notes(); - #endif - } - break; - case 9: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(music_scale, false, 0); - layer_on(_MUSIC); - #endif - } - break; - case 10: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; - case 11: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; case 12: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -366,19 +301,4 @@ void play_goodbye_tone() PLAY_NOTE_ARRAY(goodbye, false, 0); _delay_ms(150); } - -uint8_t starting_note = 0x0C; -int offset = 0; - -void process_action_user(keyrecord_t *record) { - - if (IS_LAYER_ON(_MUSIC)) { - if (record->event.pressed) { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } else { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } - } - -} #endif diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index b3aa14dcb..f808ab1ce 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -14,7 +14,6 @@ #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 -#define _MUSIC 5 #define _ADJUST 16 // Macro name shortcuts @@ -24,12 +23,6 @@ #define LOWER M(_LOWER) #define RAISE M(_RAISE) #define M_BL 5 -#define AUD_OFF M(6) -#define AUD_ON M(7) -#define MUS_OFF M(8) -#define MUS_ON M(9) -#define VC_IN M(10) -#define VC_DE M(11) // Fillers to make layering more clear #define _______ KC_TRNS @@ -142,17 +135,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -/* Music (reserved for process_action_user) - * - */ -[_MUSIC] = { - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, - {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} -}, - /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | @@ -169,8 +151,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, - {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, - {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } @@ -193,7 +175,6 @@ float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -257,53 +238,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; - case 6: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - case 7: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(start_up, false, 0); - #endif - } - break; - case 8: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - layer_off(_MUSIC); - stop_all_notes(); - #endif - } - break; - case 9: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(music_scale, false, 0); - layer_on(_MUSIC); - #endif - } - break; - case 10: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; - case 11: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, 0); - #endif - } - break; } return MACRO_NONE; }; @@ -318,21 +252,6 @@ void matrix_init_user(void) { #ifdef AUDIO_ENABLE -uint8_t starting_note = 0x0C; -int offset = 0; - -void process_action_user(keyrecord_t *record) { - - if (IS_LAYER_ON(_MUSIC)) { - if (record->event.pressed) { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } else { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } - } - -} - void play_goodbye_tone() { PLAY_NOTE_ARRAY(goodbye, false, 0); diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 2406a11d7..feb879774 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -1,19 +1,7 @@ #ifndef PREONIC_H #define PREONIC_H -#include "matrix.h" -#include "keymap_common.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif -#ifdef RGBLIGHT_ENABLE - #include "rgblight.h" -#endif -#include -#include -#ifdef MIDI_ENABLE - #include -#endif +#include "quantum.h" #define PREONIC_MIT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ -- cgit v1.3.1 From b79400e0e9080112fbdcf9ae1672297286b7938a Mon Sep 17 00:00:00 2001 From: Jacob Bilger Date: Sun, 15 May 2016 01:22:51 -0400 Subject: Folders for each keymap.c file (#332) * Add folders to keymaps * test * test --- keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG | Bin 17292 -> 0 bytes keyboard/planck/keymaps/Jacob/keymap.c | 56 - keyboard/planck/keymaps/Jacob/planck.hex | 1151 -------------------- keyboard/planck/keymaps/Jacob/readme.md | 1 - keyboard/planck/keymaps/alexey.c | 51 - keyboard/planck/keymaps/alexey/alexey.c | 51 + keyboard/planck/keymaps/angerthosenear.c | 50 - .../planck/keymaps/angerthosenear/angerthosenear.c | 50 + keyboard/planck/keymaps/austin.c | 50 - keyboard/planck/keymaps/austin/austin.c | 50 + keyboard/planck/keymaps/bone2planck.c | 112 -- keyboard/planck/keymaps/bone2planck/bone2planck.c | 112 ++ keyboard/planck/keymaps/brandon.c | 134 --- keyboard/planck/keymaps/brandon/brandon.c | 134 +++ keyboard/planck/keymaps/charlie.c | 54 - keyboard/planck/keymaps/charlie/charlie.c | 54 + keyboard/planck/keymaps/daniel.c | 48 - keyboard/planck/keymaps/daniel/daniel.c | 48 + keyboard/planck/keymaps/david.c | 76 -- keyboard/planck/keymaps/david/david.c | 76 ++ keyboard/planck/keymaps/dzobert.c | 49 - keyboard/planck/keymaps/dzobert/dzobert.c | 49 + keyboard/planck/keymaps/gabriel.c | 108 -- keyboard/planck/keymaps/gabriel/gabriel.c | 108 ++ keyboard/planck/keymaps/jacob/Keyboard Layout.PNG | Bin 0 -> 17292 bytes keyboard/planck/keymaps/jacob/keymap.c | 56 + keyboard/planck/keymaps/jacob/readme.md | 1 + keyboard/planck/keymaps/joe.c | 88 -- keyboard/planck/keymaps/joe/joe.c | 88 ++ keyboard/planck/keymaps/kyle.c | 49 - keyboard/planck/keymaps/kyle/kyle.c | 49 + keyboard/planck/keymaps/leo.c | 46 - keyboard/planck/keymaps/leo/leo.c | 46 + keyboard/planck/keymaps/lucas.c | 163 --- keyboard/planck/keymaps/lucas/lucas.c | 163 +++ keyboard/planck/keymaps/lukas.c | 64 -- keyboard/planck/keymaps/lukas/lukas.c | 64 ++ keyboard/planck/keymaps/max.c | 49 - keyboard/planck/keymaps/max/max.c | 49 + keyboard/planck/keymaps/mollat.c | 149 --- keyboard/planck/keymaps/mollat/mollat.c | 149 +++ keyboard/planck/keymaps/monkey.c | 76 -- keyboard/planck/keymaps/monkey/monkey.c | 76 ++ keyboard/planck/keymaps/nico.c | 69 -- keyboard/planck/keymaps/nico/nico.c | 69 ++ keyboard/planck/keymaps/numpad.c | 26 - keyboard/planck/keymaps/numpad/numpad.c | 26 + keyboard/planck/keymaps/tak3over.c | 130 --- keyboard/planck/keymaps/tak3over/tak3over.c | 130 +++ 49 files changed, 1698 insertions(+), 2849 deletions(-) delete mode 100644 keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG delete mode 100644 keyboard/planck/keymaps/Jacob/keymap.c delete mode 100644 keyboard/planck/keymaps/Jacob/planck.hex delete mode 100644 keyboard/planck/keymaps/Jacob/readme.md delete mode 100644 keyboard/planck/keymaps/alexey.c create mode 100644 keyboard/planck/keymaps/alexey/alexey.c delete mode 100644 keyboard/planck/keymaps/angerthosenear.c create mode 100644 keyboard/planck/keymaps/angerthosenear/angerthosenear.c delete mode 100644 keyboard/planck/keymaps/austin.c create mode 100644 keyboard/planck/keymaps/austin/austin.c delete mode 100644 keyboard/planck/keymaps/bone2planck.c create mode 100644 keyboard/planck/keymaps/bone2planck/bone2planck.c delete mode 100644 keyboard/planck/keymaps/brandon.c create mode 100644 keyboard/planck/keymaps/brandon/brandon.c delete mode 100644 keyboard/planck/keymaps/charlie.c create mode 100644 keyboard/planck/keymaps/charlie/charlie.c delete mode 100644 keyboard/planck/keymaps/daniel.c create mode 100644 keyboard/planck/keymaps/daniel/daniel.c delete mode 100644 keyboard/planck/keymaps/david.c create mode 100644 keyboard/planck/keymaps/david/david.c delete mode 100644 keyboard/planck/keymaps/dzobert.c create mode 100644 keyboard/planck/keymaps/dzobert/dzobert.c delete mode 100644 keyboard/planck/keymaps/gabriel.c create mode 100644 keyboard/planck/keymaps/gabriel/gabriel.c create mode 100644 keyboard/planck/keymaps/jacob/Keyboard Layout.PNG create mode 100644 keyboard/planck/keymaps/jacob/keymap.c create mode 100644 keyboard/planck/keymaps/jacob/readme.md delete mode 100644 keyboard/planck/keymaps/joe.c create mode 100644 keyboard/planck/keymaps/joe/joe.c delete mode 100644 keyboard/planck/keymaps/kyle.c create mode 100644 keyboard/planck/keymaps/kyle/kyle.c delete mode 100644 keyboard/planck/keymaps/leo.c create mode 100644 keyboard/planck/keymaps/leo/leo.c delete mode 100644 keyboard/planck/keymaps/lucas.c create mode 100644 keyboard/planck/keymaps/lucas/lucas.c delete mode 100644 keyboard/planck/keymaps/lukas.c create mode 100644 keyboard/planck/keymaps/lukas/lukas.c delete mode 100644 keyboard/planck/keymaps/max.c create mode 100644 keyboard/planck/keymaps/max/max.c delete mode 100644 keyboard/planck/keymaps/mollat.c create mode 100644 keyboard/planck/keymaps/mollat/mollat.c delete mode 100644 keyboard/planck/keymaps/monkey.c create mode 100644 keyboard/planck/keymaps/monkey/monkey.c delete mode 100644 keyboard/planck/keymaps/nico.c create mode 100644 keyboard/planck/keymaps/nico/nico.c delete mode 100644 keyboard/planck/keymaps/numpad.c create mode 100644 keyboard/planck/keymaps/numpad/numpad.c delete mode 100644 keyboard/planck/keymaps/tak3over.c create mode 100644 keyboard/planck/keymaps/tak3over/tak3over.c (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG b/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG deleted file mode 100644 index 40f0b8942..000000000 Binary files a/keyboard/planck/keymaps/Jacob/Keyboard Layout.PNG and /dev/null differ diff --git a/keyboard/planck/keymaps/Jacob/keymap.c b/keyboard/planck/keymaps/Jacob/keymap.c deleted file mode 100644 index 5e6e8498e..000000000 --- a/keyboard/planck/keymaps/Jacob/keymap.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "planck.h" -#include "action_layer.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif - -//Simple Keymap where CTRL, WINKEY, and ALT keys are placed in a more familiar location for Windows users. -//Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -#define _QW 0 -#define _LW 1 -#define _RS 2 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT)}, - {KC_LCTL, KC_LGUI, KC_LALT, M(0), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - }, - [_RS] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - }, - [_LW] = { /* LOWER */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/Jacob/planck.hex b/keyboard/planck/keymaps/Jacob/planck.hex deleted file mode 100644 index 3ea701202..000000000 --- a/keyboard/planck/keymaps/Jacob/planck.hex +++ /dev/null @@ -1,1151 +0,0 @@ -:100000000C94A8010C94EC010C94EC010C94EC0100 -:100010000C94EC010C94EC010C94EC010C94EC01AC -:100020000C94EC010C94EC010C94410D0C94050D16 -:100030000C94C11B0C94EC010C94EC010C94EC019D -:100040000C94EC010C94EC010C94EC010C94EC017C -:100050000C94EC010C94841C0C94EC010C94EC01B9 -:100060000C94EC010C94EC010C94EC010C94EC015C -:100070000C94EC010C94EC010C94EC010C94EC014C -:100080000C94EC010C94EC010C94EC010C94EC013C -:100090000C94EC010C94EC010C94EC010C94EC012C -:1000A0000C94EC010C94EC010C94EC012B0014006A -:1000B0001A000800150017001C0018000C001200A0 -:1000C00013002A00290004001600070009000A0096 -:1000D0000B000D000E000F0033003400E1001D0086 -:1000E0001B00060019000500110010003600370043 -:1000F00038002872E000E300E200003001522C00DA -:100100002C0002525000510052004F0035021E02D6 -:100110001F022002210222022302240225022602BB -:1001200027024C0001000100010001000100010054 -:1001300001002D022E022F023002310201000100C7 -:1001400001000100010001000100010001002F0079 -:100150003000010001000100010001000100010068 -:1001600001000100010001000100010035001E0036 -:100170001F0020002100220023002400250026006B -:1001800027004C0001003A003B003C003D003E00CF -:100190003F002D002E002F003000310001004000F4 -:1001A00041004200430044004500010001000100FD -:1001B0000100010001000100010001000100010037 -:1001C0000100010001000100010001000501090614 -:1001D000A101050719E029E715002501950875011A -:1001E0008102950175088101050819012905950508 -:1001F000750191029501750391010507190029FF09 -:10020000150025FF950675088100C005010902A1AA -:10021000010901A10005091901290515002501950C -:1002200005750181029501750381010501093009F8 -:10023000311581257F9502750881060938158125BC -:100240007F950175088106050C0A38021581257F06 -:10025000950175088106C0C005010980A1018502CC -:1002600016010026B7001A01002AB7007510950183 -:100270008100C0050C0901A1018503160100269C1F -:10028000021A01002A9C02751095018100C012011A -:10029000100100000008EDFE606001000102000195 -:1002A00009025400030100A0FA090400000103013F -:1002B0000100092111010001223F00070581030807 -:1002C000000A0904010001030102000921110100D3 -:1002D00001224D000705820308000A0904020001FB -:1002E00003000000092111010001223600070583E7 -:1002F0000308000A040309042C034F007200740071 -:1003000068006F006C0069006E006500610072009B -:1003100020004B006500790062006F0061007200F0 -:10032000640073000000280354006800650020008A -:1003300050006C0061006E0063006B0020004B00F9 -:100340006500790062006F006100720064000000C7 -:1003500011241FBECFEFDAE0DEBFCDBF04B603FE2F -:1003600024C08091ED019091EE01A091EF01B09138 -:10037000F0018750904BA740B04BB9F41092ED01BB -:100380001092EE011092EF011092F00114BE84B7AA -:10039000877F84BF88E10FB6F89480936000109245 -:1003A00060000FBEE0E0F8E3099511E0A0E0B1E0E5 -:1003B000EAE7F7E402C005900D92A435B107D9F73A -:1003C00011E0A4E5B1E001C01D92AD3EB107E1F737 -:1003D0000E9441090C94BB230C940000FC0166238D -:1003E00061F48281882331F085EE0E947D110E94A4 -:1003F000BC2103C085EE0E942A1180E090E00895A0 -:1004000008950895089508950E94010208950E9494 -:10041000020208950E940302089584E0809355012A -:1004200008950E949C2123E030E0281B3109220F0F -:10043000331F2093540108950E9411020E940D025F -:10044000109256010895982F2F98882351F4809187 -:100450008000877F8093800010928D0010928C0026 -:1004600020C0833041F480918000886080938000B8 -:100470008FEF9FEF12C08091800088608093800092 -:1004800023E030E0291B3109220F331F8FEF9FEF4C -:1004900002C0969587952A95E2F790938D008093F8 -:1004A0008C000E9411020895279A2F988FEF9FEFDA -:1004B00090938700809386008AE08093800089E192 -:1004C000809381000E942A220E941C0208950E94AB -:1004D00054026E9A769A0E94000208950895E62FBB -:1004E000F0E0EE0FFF1F98E1799F90011124E20FD9 -:1004F000F31F90E6899FC0011124E80FF91FE4550E -:10050000FF4F25913491C9010895FC01EE0FFF1FA3 -:10051000E45BFF4F25913491C9010895FC01EE0F72 -:10052000FF1FE453FE4F25913491C9010895CF93E5 -:10053000DF93EC0180E4C030D807A0F590E3C03031 -:10054000D90708F005C1C83ED105E8F4C03ED10581 -:1005500008F069C0C83AD10588F4C53AD10508F059 -:1005600064C0C130D10509F4E8C0C130D10508F438 -:1005700014C2C430D10508F410C255C0CB3BD1051C -:1005800008F00BC261C080E2C030D80708F0DBC0C1 -:1005900091E0C030D90708F0D3C0C03FD10508F4BE -:1005A000FCC1C8C080E5C130D80709F4F4C090E5AB -:1005B000C230D907F0F480E4C131D80709F4D4C0BF -:1005C00090E4C231D90730F480E4C031D80708F490 -:1005D000C3C0C7C090E4C331D90709F4CBC080E4DD -:1005E000C331D80708F4C3C0C050D04509F0D5C105 -:1005F000C4C080E6C030D80730F491E5C030D907D8 -:1006000008F05EC1CEC080E7C030D80708F4C5C18D -:1006100090E8C030D90708F4B8C180E9C030D807E5 -:1006200008F0BBC1B6C19E01BAC1C53AD10519F4E3 -:1006300081E890E47DC0C63AD10519F083E890E4E2 -:1006400077C082E890E474C0C83AD10519F482EE0C -:1006500094E46EC0C93AD10519F489EE94E468C0F7 -:10066000CA3AD10519F48AEE94E462C0CB3AD105B6 -:1006700019F485EB94E45CC0CC3AD10519F486EB0F -:1006800094E456C0CD3AD10519F487EB94E450C0F8 -:10069000C03BD10519F48CEC94E44AC0CE3AD105A4 -:1006A00019F48DEC94E444C0CF3AD10519F483E8F1 -:1006B00095E43EC0C13BD10519F48AE895E438C001 -:1006C000C23BD10519F482E995E432C0C33BD105A0 -:1006D00019F484E995E42CC0C43BD10519F481E2F6 -:1006E00096E426C0C53BD10519F483E296E420C008 -:1006F000C63BD10519F484E296E41AC0C73BD10584 -:1007000019F485E296E414C0C83BD10519F486E2D9 -:1007100096E40EC0C93BD10519F487E296E408C0FF -:10072000CA3BD10519F080E094E402C08AE296E465 -:100730009C0135C19E01306532C121E030E02FC1FE -:100740009E013F712CC1CE019F700E948E0228C174 -:100750009E013070306C23C19E012F703070346D5B -:100760001EC120E031ED1BC120E030ED18C120E0BA -:1007700032ED15C120E033ED12C10E94171184EC57 -:1007800099E020E931E0F9013197F1F70197D9F7C4 -:100790000E94A91C04C18091CD0181608093CD018C -:1007A000FEC00E94051D882311F40E94101D0E94A6 -:1007B000F61C8093EB011092EC0190E5C230D90752 -:1007C00011F4816076C090E5C430D90711F48260DD -:1007D00070C090E5C630D90711F484606AC090E516 -:1007E000C830D90711F4886064C090E5CA30D907D1 -:1007F00011F480615EC090E5CC30D90711F48062BD -:1008000058C090E5CE30D90711F4806452C090E50D -:10081000C031D90711F480684CC090E5C231D907C6 -:1008200011F48C6046C080E5C330D80721F4809174 -:10083000EB018E7F3EC090E5C530D90721F4809151 -:10084000EB018D7F36C080E5C730D80721F4809159 -:10085000EB018B7F2EC090E5C930D90721F4809140 -:10086000EB01877F26C080E5CB30D80721F480914B -:10087000EB018F7E1EC090E5CD30D90721F4809129 -:10088000EB018F7D16C080E5CF30D80721F4809131 -:10089000EB018F7B0EC090E5C131D90721F4809127 -:1008A000EB018F7706C0C351D04529F48091EB014D -:1008B000837F8093EB018091EB010E94EB1C6FC062 -:1008C0004D2F55274F70507041305105F9F49E015E -:1008D000A4E0220F331FAA95E1F720703370CE01F8 -:1008E000F3E0880F991FFA95E1F780769070282B36 -:1008F000392B3C68C370D07002C0440F551FCA9595 -:10090000E2F74F715070242B352B49C0423051050E -:1009100029F43C2F2227216F306A41C04330510512 -:1009200051F49E0173E0220F331F7A95E1F7207E88 -:1009300037703C680CC044305105B9F49E0163E047 -:10094000220F331F6A95E1F7207E37703A68C37033 -:10095000D07081E090E002C0880F991FCA95E2F73D -:100960008F719070282B392B1AC04530510529F40E -:100970003C2F2227246F306A12C04630510579F48B -:10098000CF71D0703C2F222702C09E013F70306291 -:1009900006C09E013F70306A02C020E030E0C9010D -:1009A000DF91CF9108950E946F02803E9105F0F48F -:1009B000803C910588F58133910509F475C0823337 -:1009C000910548F48932910509F464C08A32910591 -:1009D00009F07BC06EC08933910509F18238910519 -:1009E000F1F08533910509F070C04FC0833E910549 -:1009F00061F1843E910540F4803E9105B9F0823E5C -:100A0000910509F062C01CC0863E910551F1873EF8 -:100A1000910509F05AC02AC00E94850208952091CC -:100A2000EB0120FD0AC021FD08C04CC08091EB0104 -:100A300080FF03C089E390E045C080EE90E042C0B3 -:100A40008091EB0182FD08C004C08091EB0182FF20 -:100A500003C082EE90E036C084FD11C083EE90E0CA -:100A600031C08091EB0183FD08C004C08091EB018F -:100A700083FF03C086EE90E025C084FF03C080E0C2 -:100A800090E020C087EE90E01DC08091EB0185FFD3 -:100A900005C007C08091EB0185FF03C085E390E0AE -:100AA00011C089E290E00EC08091EB0186FF05C085 -:100AB00007C08091EB0186FF03C081E390E002C094 -:100AC0008AE290E00E94970208950E94970208959A -:100AD0000E940A020895E82FF0E0EE0FFF1FE95A86 -:100AE000FE4F80819181089508954F925F926F9299 -:100AF0007F928F929F92AF92BF92CF92DF92EF92AE -:100B0000FF920F931F93DF93CF93CDB7DEB7289754 -:100B10000FB6F894DEBF0FBECDBFAE014F5F5F4F83 -:100B200060E070E0EE24FF24CC24DD24AA24BB2462 -:100B3000882499242A0101E010E029E0622E712C1A -:100B40006C0E7D1ED201E4E3F1E088E001900D928D -:100B50008150E1F7FA01808191819C01207F307002 -:100B60002032310559F48F709070980102C0220F25 -:100B7000331F8A95E2F7622B732B37C02033310580 -:100B800059F48F709070F80102C0EE0FFF1F8A9524 -:100B9000E2F7EE2AFF2A29C02034310559F48F707C -:100BA0009070980102C0220F331F8A95E2F7C22A83 -:100BB000D32A1BC02035310559F48F709070F8018D -:100BC00002C0EE0FFF1F8A95E2F7AE2ABF2A0DC0C2 -:100BD0002036310551F48F709070980102C0220FB9 -:100BE000331F8A95E2F7822A932A4E5F5F4F46159C -:100BF000570509F0A7CF24B1962F862F8095822321 -:100C000084B985B1982B95B927B19E2D8E2D8095ED -:100C1000822387B988B1982B98B92AB19C2D8C2D45 -:100C2000809582238AB98BB1982B9BB92DB19A2DCF -:100C30008A2D809582238DB98EB1982B9EB920B3D1 -:100C4000982D882D8095822380BB81B3982B91BBF2 -:100C500028960FB6F894DEBF0FBECDBFCF91DF91BF -:100C60001F910F91FF90EF90DF90CF90BF90AF90CA -:100C70009F908F907F906F905F904F9008954F92CC -:100C80005F926F927F928F929F92AF92BF92CF921C -:100C9000DF92EF92FF920F931F93DF93CF93CDB725 -:100CA000DEB768970FB6F894DEBF0FBECDBF85B72D -:100CB000806885BF85B7806885BF0E947505AE01D5 -:100CC0004F5F5F4F60E070E0EE24FF24CC24DD2412 -:100CD000AA24BB24882499242A0101E010E039E1E8 -:100CE000632E712C6C0E7D1ED201ECE3F1E088E1E5 -:100CF00001900D928150E1F7FA01808191819C0170 -:100D0000207F30702032310559F48F709070980137 -:100D100002C0220F331F8A95E2F7622B732B37C074 -:100D20002033310559F48F709070F80102C0EE0F36 -:100D3000FF1F8A95E2F7EE2AFF2A29C020343105E9 -:100D400059F48F709070980102C0220F331F8A955A -:100D5000E2F7C22AD32A1BC02035310559F48F701F -:100D60009070F80102C0EE0FFF1F8A95E2F7AE2ADD -:100D7000BF2A0DC02036310551F48F709070980154 -:100D800002C0220F331F8A95E2F7822A932A4E5F10 -:100D90005F4F4615570509F0A7CF24B1962F862F30 -:100DA0008095822384B985B1982B95B927B19E2D62 -:100DB0008E2D8095822387B988B1982B98B92AB156 -:100DC0009C2D8C2D809582238AB98BB1982B9BB951 -:100DD0002DB19A2D8A2D809582238DB98EB1982BB5 -:100DE0009EB920B3982D882D8095822380BB81B336 -:100DF000982B91BB80E090E0FC01E95AFE4F1182F4 -:100E00001082FC01E15AFE4F118210820296883056 -:100E1000910591F70E94670268960FB6F894DEBFBD -:100E20000FBECDBFCF91DF911F910F91FF90EF903B -:100E3000DF90CF90BF90AF909F908F907F906F90FA -:100E40005F904F9008954F925F926F927F928F9232 -:100E50009F92AF92BF92CF92DF92EF92FF920F9349 -:100E60001F93DF93CF93CDB7DEB7A0970FB6F8945B -:100E7000DEBF0FBECDBF909000016E010894C11C73 -:100E8000D11CEFE5AE2EE1E0BE2EC6015C2C892E12 -:100E900071E0E72EF12C60EA462E59E0652E712CA8 -:100EA0006C0E7D1E852D982DDC01E4E1F1E088E0DB -:100EB00001900D928150E1F7F60120813181C90145 -:100EC000807F90708032910589F484B12F703070EA -:100ED000A70102C0440F551F2A95E2F79A01842BFF -:100EE00084B985B12095282325B94FC08033910559 -:100EF00089F487B12F703070F70102C0EE0FFF1F29 -:100F00002A95E2F79F018E2B87B988B12095282377 -:100F100028B93BC08034910589F48AB12F703070B4 -:100F2000A70102C0440F551F2A95E2F79A01842BAE -:100F30008AB98BB1209528232BB927C0803591051C -:100F400089F48DB12F703070F70102C0EE0FFF1FD2 -:100F50002A95E2F79F018E2B8DB98EB1209528231B -:100F60002EB913C08036910581F480B32F70307094 -:100F7000A70102C0440F551F2A95E2F79A01842B5E -:100F800080BB81B32095282321BB842D8A95F1F75E -:100F9000830160E070E040E050E0D301ECE1F1E07B -:100FA00088E101900D928150E1F7F80120813181B3 -:100FB000C901807F90708032910511F483B113C014 -:100FC0008033910511F486B10EC08034910511F47F -:100FD00089B109C08035910511F48CB104C0803607 -:100FE0009105B9F48FB190E02F70307002C09595E3 -:100FF00087952A95E2F780FF03C080E090E007C064 -:10100000C701062E02C0880F991F0A94E2F7482BE9 -:10101000592B6F5F7F4F0E5F1F4F6C30710509F0CA -:10102000BCCFF501808191818417950721F0518310 -:10103000408345E0942E0E94750542E050E0C40EC6 -:10104000D51EA40EB51EC614D70409F02BCF90925E -:101050000001992059F1892D815080930001882346 -:1010600029F080EA9FE00197F1F720C080915F01AD -:101070009091600190935801809357018091610194 -:101080009091620190935A0180935901809163017C -:101090009091640190935C0180935B018091650164 -:1010A0009091660190935E0180935D010E9404021D -:1010B00081E0A0960FB6F894DEBF0FBECDBFCF91F2 -:1010C000DF911F910F91FF90EF90DF90CF90BF9035 -:1010D000AF909F908F907F906F905F904F9008950A -:1010E0001092E1010895089508958091680108958E -:1010F000DF93CF9300D00F92CDB7DEB7AC018091D4 -:10110000E201843029F583E08093E9002FEF95ED2B -:1011100005C0892F8A95F1F7222329F08091E800F4 -:10112000215085FFF6CF8091E80085FF11C05B83D9 -:101130004A8383E08983CE01019663E070E040E05A -:1011400050E00E94A70B8091E8008E778093E80022 -:101150000F900F900F90CF91DF910895DF93CF9371 -:1011600000D00F92CDB7DEB7AC018091E2018430A0 -:1011700029F583E08093E9002FEF95ED05C0892FD5 -:101180008A95F1F7222329F08091E800215085FF0C -:10119000F6CF8091E80085FF11C05B834A8382E02F -:1011A0008983CE01019663E070E040E050E00E9448 -:1011B000A70B8091E8008E778093E8000F900F9046 -:1011C0000F90CF91DF910895AC018091E2018430BE -:1011D00001F582E08093E9002FEF95ED05C0892F9E -:1011E0008A95F1F7222329F08091E800215085FFAC -:1011F000F6CF8091E80085FF0CC0CA0165E070E081 -:1012000040E050E00E94A70B8091E8008E77809329 -:10121000E80008950F931F93182F092F8091E20182 -:10122000843061F581E08093E9009FEF25ED05C0F2 -:10123000822F8A95F1F7992329F08091E800915047 -:1012400085FFF6CF8091E80085FF18C0812F902F91 -:1012500068E070E040E050E00E94A70B8091E80059 -:101260008E778093E800A9E6B1E0212F302FC901E5 -:10127000FC0188E001900D928150E1F71F910F91E0 -:10128000089584B7877F84BF88E10FB6F894809370 -:101290006000109260000FBE80E090E020E80FB682 -:1012A000F89420936100809361000FBE0E94F30FB9 -:1012B0000E94850C0E94E60C8091E200846080937D -:1012C000E20078940E94840F0E94A81082E091E0CE -:1012D0000E949A0F0CC00E94F61B8091E0018823A7 -:1012E00031F00E94221C882311F00E94BC0A8091D8 -:1012F000E201853081F30E94F90FF9CF8091E1017D -:10130000882349F40E94850C0E94E60C8091E2003B -:1013100084608093E20008958091E401833009F4B1 -:1013200055C0843030F4813071F0823009F0AFC0A4 -:1013300096C08A3009F483C08B3009F468C08930C4 -:1013400009F0A5C020C08091E301813A09F09FC057 -:101350008091E800877F8093E8008091E701909179 -:10136000E801892B21F489E691E068E003C080E080 -:1013700090E060E070E00E94D20A8091E8008B77F4 -:101380008093E80008958091E301813209F07FC0E5 -:101390008091E7019091E801892B09F078C0809154 -:1013A000E800877F8093E80005C08091E2018823F0 -:1013B00009F46DC08091E80082FFF7CF8091F100C1 -:1013C000809368018091E8008B771CC08091E301D5 -:1013D000813A09F05CC08091E7019091E801892B86 -:1013E00009F055C08091E800877F8093E8008091E4 -:1013F000E80080FFFCCF809101018093F100809193 -:10140000E8008E778093E8000E94320C0895809166 -:10141000E3018132E1F58091E7019091E801892BA8 -:10142000B1F58091E800877F8093E8000E94320C3C -:101430008091E501809301010E9417110895809128 -:10144000E301813221F58091E800877F8093E800F5 -:101450000E94320C8091E60180936701089580918B -:10146000E301813AA1F48091E800877F8093E8004E -:101470008091E80080FFFCCF809167018093F100AC -:101480008091E8008E778093E8000E94320C0895E6 -:1014900081E061EC42E00E94FA0B82E061EC42E004 -:1014A0000E94FA0B83E061EC42E00E94FA0B08957F -:1014B0000E94EA1B0895DA019330C1F0943030F4B1 -:1014C000913051F0923009F04FC00BC0913221F1B0 -:1014D000923209F049C032C0EEE8F2E022E130E099 -:1014E00047C0E0EAF2E024E530E042C0813051F04C -:1014F000813020F0823009F037C008C0E4EFF2E01C -:10150000849107C0E8EFF2E0849103C0E6E2F3E0E3 -:101510008491282F30E02CC0613041F0613018F008 -:10152000623011F508C0E2EBF2E002C0EBECF2E051 -:1015300029E030E01DC0E4EEF2E0FACF613051F076 -:10154000613018F0623081F40AC0ECECF1E02FE376 -:1015500030E00EC0EBE0F2E02DE430E009C0E8E559 -:10156000F2E026E330E004C0E0E0F0E020E030E02C -:10157000ED93FC93C901089580E189BD82E189BDA5 -:1015800009B400FEFDCF8091D8008F7D8093D800F4 -:101590008091E00082608093E0008091E00081FD16 -:1015A000FCCF08959C014091E9015091EA01461752 -:1015B000570718F4F90190E043C06115710511F067 -:1015C000AB01F8CF8091E8008E778093E80040E08F -:1015D00050E0F0CF8091E201882309F447C08530C4 -:1015E00009F446C08091E80083FD44C08091E80082 -:1015F00082FD36C08091E80080FF22C08091F30018 -:101600009091F200782F60E0292F30E0262B372BC5 -:1016100007C081918093F100415050402F5F3F4FB0 -:101620004115510519F02830310598F390E0283024 -:10163000310509F491E08091E8008E778093E8000D -:101640004115510539F6992329F60AC08091E20126 -:10165000882361F0853061F08091E80083FD0AC045 -:101660008091E80082FFF2CF80E0089582E0089543 -:1016700083E0089581E008959C014091E901509133 -:10168000EA014617570718F4F90190E044C06115C4 -:10169000710511F0AB01F8CF8091E8008E7780934F -:1016A000E80040E050E0F0CF8091E201882309F4A7 -:1016B00048C0853009F447C08091E80083FD45C0EB -:1016C0008091E80082FD37C08091E80080FF23C050 -:1016D0008091F3009091F200782F60E0292F30E0A4 -:1016E000262B372B08C084918093F100319641500E -:1016F00050402F5F3F4F4115510519F028303105FB -:1017000090F390E02830310509F491E08091E800F1 -:101710008E778093E8004115510531F6992321F623 -:101720000AC08091E201882361F0853061F08091E8 -:10173000E80083FD0AC08091E80082FFF2CF80E0DC -:10174000089582E0089583E0089581E00895BF92AE -:10175000CF92DF92EF92FF920F931F93CF93DF937D -:10176000182F092F7B016A010E94530CB82E882381 -:10177000B1F5812F902F9C01E901C114D10439F0FA -:10178000F60180819181E81AF90AC80FD91F00E09B -:1017900010E022C08091E80085FD16C08091E8002D -:1017A0008E778093E800C114D10449F0F60180815E -:1017B0009181800F911F9183808385E011C00E94E9 -:1017C000530C882349F00CC089918093F100089450 -:1017D000E108F1080F5F1F4FE114F104D9F68B2DDA -:1017E000DF91CF911F910F91FF90EF90DF90CF90FD -:1017F000BF900895382F282F2EC0822F8F7080938E -:10180000E900231721F4762F942F50E006C0709141 -:10181000EC009091ED005091F00091FF1BC0809181 -:10182000EB008E7F8093EB008091ED008D7F8093A5 -:10183000ED008091EB0081608093EB007093EC00F1 -:101840009093ED005093F0008091EE0087FD02C070 -:1018500080E008952F5F273080F23F703093E900D9 -:1018600081E008958091E30188239CF404C0809175 -:10187000E2018823B9F08091E80082FFF8CF8091DF -:10188000E8008B778093E80008958091E201882337 -:1018900049F08091E80080FFF8CF8091E8008E77D2 -:1018A0008093E80008954091E4005091E50024E61B -:1018B0008091EC0080FF24C08091E80080FD1EC074 -:1018C0008091E201882311F482E00895853011F4BB -:1018D00083E008958091EB0085FF02C081E00895C8 -:1018E0008091E4009091E5008417950709F3222385 -:1018F00011F484E008952150AC01DACF80E008951E -:101900008091E80082FFDCCFF9CF0E94F80C0E94A2 -:10191000000DE0EEF0E0808181608083A8EDB0E012 -:101920008C918F778C9319BCE7EDF0E080818E7FEE -:1019300080838C918F7E8C931092E1010895EF92B9 -:10194000FF920F931F930E94F80C0E94000D08ED68 -:1019500010E0F80180818F778083808180688083A8 -:1019600080818F7D808319BC1092E2011092DE018C -:101970001092E0011092DF0180EEE82EF12CF701C9 -:1019800080818B7F8083F80180818160808380E00B -:1019900060E042E00E94FA0BE1EEF0E080818E7F91 -:1019A0008083E2EEF0E080818160808380818860C6 -:1019B0008083F70180818E7F8083F8018081806140 -:1019C00080831F910F91FF90EF900895E8EDF0E074 -:1019D00080818F7E8083E7EDF0E08081816080836D -:1019E00084E082BF81E08093E1010E949F0C089512 -:1019F000E8EDF0E080818E7F80831092E200089510 -:101A00001092DA001092E10008951F920F920FB623 -:101A10000F9211241F932F933F934F935F936F93D4 -:101A20007F938F939F93AF93BF93EF93FF93109107 -:101A3000E9008091EC001092E9008091F000877F2E -:101A40008093F00078940E94130E1092E900809128 -:101A5000F00088608093F0001F701093E900FF9100 -:101A6000EF91BF91AF919F918F917F916F915F9116 -:101A70004F913F912F911F910F900FBE0F901F908C -:101A800018951F920F920FB60F9211242F933F9328 -:101A90004F935F936F937F938F939F93AF93BF9376 -:101AA000EF93FF938091E10082FF0BC08091E200F1 -:101AB00082FF07C08091E1008B7F8093E1000E944C -:101AC000830F8091DA0080FF1FC08091D80080FFD3 -:101AD0001BC08091DA008E7F8093DA008091D9005C -:101AE00080FF0DC080E189BD82E189BD09B400FE9F -:101AF000FDCF81E08093E2010E947E0905C019BC00 -:101B00001092E2010E9470088091E10080FF19C0EC -:101B10008091E20080FF15C08091E2008E7F80936B -:101B2000E2008091E20080618093E2008091D80021 -:101B300080628093D80019BC85E08093E2010E9406 -:101B400074088091E10084FF30C08091E20084FF3E -:101B50002CC080E189BD82E189BD09B400FEFDCFC2 -:101B60008091D8008F7D8093D8008091E1008F7E96 -:101B70008093E1008091E2008F7E8093E20080916B -:101B8000E20081608093E2008091DE01882311F001 -:101B900084E007C08091E30087FD02C081E001C0BE -:101BA00083E08093E2010E94580A8091E10083FF64 -:101BB00029C08091E20083FF25C08091E100877FEA -:101BC0008093E10082E08093E2011092DE01809137 -:101BD000E1008E7F8093E1008091E2008E7F809310 -:101BE000E2008091E20080618093E20080E060E0AA -:101BF00042E00E94FA0B8091F00088608093F00030 -:101C00000E947308FF91EF91BF91AF919F918F91C7 -:101C10007F916F915F914F913F912F910F900FBEE8 -:101C20000F901F9018951F93DF93CF93CDB7DEB71A -:101C3000AC970FB6F894DEBF0FBECDBFE3EEF1E078 -:101C40008091F100819321E0EB3EF207C9F70E94F9 -:101C50008C098091E80083FF3EC18091E3013091BF -:101C6000E401353009F487C0363040F43130C9F131 -:101C7000313070F0333009F02EC133C0383009F400 -:101C8000F9C0393009F409C1363009F024C197C0D0 -:101C9000803821F0823809F01EC108C09091DF0120 -:101CA0008091E001882399F0926011C08091E70152 -:101CB0008F708093E9008091EB0090E025E096958D -:101CC00087952A95E1F7982F91701092E9008091FD -:101CD000E800877F8093E8009093F1001092F10074 -:101CE000D4C0882319F0823009F0F5C090E08F71DC -:101CF0009070009721F0029709F0EDC00CC0809120 -:101D0000E501813009F0E7C01092E001333069F558 -:101D10008093E0012AC08091E501882331F520916C -:101D2000E7012F7009F4D7C02093E9008091EB0000 -:101D300080FF1BC0333021F48091EB00806213C020 -:101D40008091EB0080618093EB0081E090E002C025 -:101D5000880F991F2A95E2F78093EA001092EA0013 -:101D60008091EB0088608093EB001092E9008091F5 -:101D7000E800877F8DC0882309F0ADC01091E50190 -:101D80001F778091E3008078812B8093E30080911E -:101D9000E800877F8093E8000E94320C8091E80081 -:101DA00080FFFCCF8091E30080688093E3001123E3 -:101DB00011F482E001C083E08093E2018CC080587E -:101DC000823008F088C08091E5019091E60123E01F -:101DD0008C3D920709F034C083E08C838AE28B83C8 -:101DE0007FB7F894DE0115966EE040E050E011E216 -:101DF000E62FF0E010935700849140FF03C08295D6 -:101E00008F706F5F8F70282F30E08A3018F0C90113 -:101E1000C79602C0C901C0968D939D934F5F5F4FD7 -:101E20004431510529F77FBF8091E800877F809377 -:101E3000E800CE0103966AE270E00E94D20A14C064 -:101E40006091E701AE014F5F5F4F0E945B0ABC01EA -:101E5000009709F440C08091E800877F8093E800F4 -:101E600089819A810E943C0B8091E8008B77809356 -:101E7000E80031C0803879F58091E800877F809351 -:101E8000E8008091DE018093F1008091E8008E7778 -:101E90008093E8000E94320C1EC08823E1F49091E8 -:101EA000E5019230C0F48091E800877F8093E800DC -:101EB0009093DE010E94320C8091DE01882331F480 -:101EC0008091E30087FD02C081E001C084E080933F -:101ED000E2010E94480A8091E80083FF0AC08091D5 -:101EE000E800877F8093E8008091EB008062809318 -:101EF000EB00AC960FB6F894DEBF0FBECDBFCF910E -:101F0000DF911F91089508951F938091E201882326 -:101F100079F01091E9008091EC001092E900809135 -:101F2000E80083FF02C00E94130E1F701093E900A7 -:101F30001F91089590937601809375010895E09123 -:101F40007501F0917601309711F480E008950190C9 -:101F5000F081E02D09950895E0917501F0917601E9 -:101F6000309721F00280F381E02D09950895E091EA -:101F70007501F0917601309721F00480F581E02D14 -:101F8000099508959C01809173019091740128171F -:101F9000390779F03093740120937301E091750152 -:101FA000F0917601309729F00680F781E02DC90184 -:101FB000099508959C0180917101909172012817F3 -:101FC000390779F03093720120937101E091750126 -:101FD000F0917601309729F00084F185E02DC90158 -:101FE0000995089508950E94F20F08950E946805CA -:101FF00008952F923F925F926F927F928F929F925D -:10200000AF92BF92CF92DF92EF92FF920F931F9306 -:10201000DF93CF93CDB7DEB72A970FB6F894DEBF24 -:102020000FBECDBF0E94230728E7822E21E0922E0B -:10203000AA24BB2491E0292E312C5A2C8A2D0E94EF -:102040006B056C01F401E080F180E826F926E114CB -:10205000F104E1F18091CD0181FF02C00E9474057D -:1020600000E010E03101002E02C0660C771C0A94DB -:10207000E2F7C3018E219F21892B19F10E944C1C8C -:102080009C0109835A821B82C620D720CD2811F0DB -:1020900081E08B83C9018160782F9D838C83498186 -:1020A0005A816B818D810E941C15F501EE0FFF1F77 -:1020B000E858FE4F80819181862597259183808302 -:1020C00021C00F5F1F4F0C30110561F60894A11C51 -:1020D000B11C82E090E0880E991E94E0A916B1042C -:1020E00009F0ABCF0E944C1C2FEF2E832F83188654 -:1020F0008160782F9A8789874FEF5FEF60E08A854C -:102100000E941C150E94B41E109177010E949F0F1F -:10211000181731F00E949F0F809377010E94F60FED -:102120002A960FB6F894DEBF0FBECDBFCF91DF91D8 -:102130001F910F91FF90EF90DF90CF90BF90AF90E5 -:102140009F908F907F906F905F903F902F90089519 -:102150000E94431C0E943F060E94CD1C0E942A221E -:102160000895DF93CF9300D000D00F92CDB7DEB7A4 -:102170000F900F900F900F900F90CF91DF910895D7 -:10218000DF93CF9300D000D000D0CDB7DEB7269636 -:102190000FB6F894DEBF0FBECDBFCF91DF9108958B -:1021A0000E94DA19482F892F82958F70282F30E0EE -:1021B0002C3031054CF42A3031056CF4225030407B -:1021C00022303105E8F407C02C30310579F02F308A -:1021D0003105B1F40BC0403F39F0413F18F4403EA7 -:1021E00078F402C0443F61F481E008959F70892F24 -:1021F00090E023E0969587952A95E1F78170089500 -:1022000080E008950E94431B0E94531B0E94181BEC -:102210000E946B1B0E949D1E0E94A91E80E090E000 -:102220000E94C20F80E090E00E94DA0F08950E94A1 -:10223000331B0E9402110895882321F00E942C1B59 -:102240000E946B1B0895882321F00E94261B0E9488 -:102250006B1B0895282F882309F44EC0823859F447 -:102260000E949F0F81FF48C089E30E94E71A0E94E5 -:102270006B1B89E30CC0833869F40E949F0F80FFB9 -:102280003BC083E50E94E71A0E946B1B83E50E9416 -:10229000051B1FC0843859F40E949F0F82FF2CC079 -:1022A00087E40E94E71A0E946B1B87E4F0CF8450FA -:1022B000813A10F4822FEBCF822F805E883060F459 -:1022C000277081E090E001C0880F2A95EAF70E940C -:1022D0002C1B0E946B1B0895822F855A833028F493 -:1022E00080E090E00E94C20F0895285A233120F424 -:1022F00080E090E00E94DA0F08951F93182F882342 -:1023000009F4D0C0823859F40E949F0F81FDCAC0E1 -:1023100089E30E94E71A0E946B1B89E30CC0833893 -:1023200079F40E949F0F80FDBDC083E50E94E71AEB -:102330000E946B1B83E50E94051B0E946B1BB2C0B1 -:10234000843859F40E949F0F82FDACC087E40E943C -:10235000E71A0E946B1B87E4EECF8450813A50F459 -:10236000812F0E94D020882309F09CC0812F0E94D9 -:10237000E71AE3CF812F805E883050F4177081E038 -:1023800090E001C0880F1A95EAF70E94261BD5CF6E -:10239000812F855A8330A0F4153A19F481E890E032 -:1023A0000CC0163A19F482E890E007C0173A19F009 -:1023B00080E090E002C083E890E00E94C20F72C00B -:1023C000812F885A833108F06DC0183A19F482EED3 -:1023D00090E066C0193A19F489EE90E061C01A3AAB -:1023E00019F48AEE90E05CC01B3A19F485EB90E09A -:1023F00057C01C3A19F486EB90E052C01B3B19F40D -:1024000083EB90E04DC01C3B19F484EB90E048C096 -:102410001D3A19F487EB90E043C0103B19F48CECA3 -:1024200090E03EC01E3A19F48DEC90E039C01F3A9E -:1024300019F483E891E034C0113B19F48AE891E083 -:102440002FC0123B19F482E991E02AC0133B19F422 -:1024500084E991E025C0143B19F481E292E020C0A8 -:10246000153B19F483E292E01BC0163B19F484E299 -:1024700092E016C0173B19F485E292E011C0183BB8 -:1024800019F486E292E00CC0193B19F487E292E05D -:1024900007C01A3B19F080E090E002C08AE292E0A7 -:1024A0000E94DA0F1F9108959F92AF92BF92CF9230 -:1024B000DF92EF92FF920F931F93DF93CF93CDB7ED -:1024C000DEB72A970FB6F894DEBF0FBECDBF5C0112 -:1024D000DE011196FC0185E001900D928150E1F73B -:1024E0000B81F501F580F2944FE0F422DE0116969F -:1024F000FE01319685E001900D928150E1F73E8119 -:102500002F8189859A85892B09F484C22F3F09F090 -:1025100070C23F3F09F06DC27DC20E94431B0E9402 -:10252000E11A882379F0002369F08C2D805E8830D1 -:1025300048F082E00E949C1B0E94E11A9924939427 -:10254000982601C099248D2D82958F7090E085305A -:10255000910509F4B5C08630910554F48430910595 -:102560000CF08FC02D2D207F02970CF049C017C0B2 -:102570008C30910544F48A3091050CF072C10897B3 -:1025800009F023C2A9C08D30910509F4EDC18D3049 -:1025900091050CF4DFC10F9709F017C20FC28D2D02 -:1025A0008F70222311F4182F03C0182F1295107F5B -:1025B000002389F0112309F4B9C18C2D805E883085 -:1025C00020F4812F0E94261B03C0812F0E94361BFE -:1025D0000E946B1BABC18C2D0E942A11112309F4A0 -:1025E000F4C1F0E2CF0E27E02C1520F0812F0E94DD -:1025F0002C1B03C0812F0E943C1B0E946B1BE5C15A -:102600008D2D8F70203211F4182F03C0182F1295C2 -:10261000107FCC2021F081E0C81609F514C00023FA -:1026200049F0FF2031F1E1E0FE1619F5812F0E94FB -:10263000561BCBC1FF2021F0F1E0FF1609F4C5C104 -:102640000E94591B30C1002329F025E02F1508F402 -:10265000BCC10FC084E08F1508F4B7C124C10023AA -:1026600061F0FF2031F0F501858180FF5FC18F703F -:102670008583812F0E942311A8C1FF2009F413C173 -:1026800060C18D2D86958695837090E0009721F02E -:10269000019709F09AC10AC0002319F0C60193708E -:1026A00002C080E090E00E94C20F8FC1002319F0A9 -:1026B000C601937002C080E090E00E94DA0F85C1ED -:1026C000002321F08C2D0E94AB1D03C08C2D0E9495 -:1026D000151E0E94A91E79C18D2D837009F05EC060 -:1026E000002309F072C12C2D229526952770220F08 -:1026F000220F8C2D8F70E82EFF2400E010E0022EB8 -:1027000004C0EE0CFF1C001F111F0A94D2F7C4FC7A -:1027100005C060E070E080E090E00FC06FE070E026 -:1027200080E090E004C0660F771F881F991F2A95EC -:10273000D2F76095709580959095D694D694F3E0F5 -:10274000DF224D2D50E041305105A9F042305105B6 -:102750001CF4452B49F039C14230510589F0433012 -:10276000510509F032C113C06E297F29802B912BAE -:102770000E94B21A2AC16E297F29802B912B0BC08F -:102780006E297F29802B912B0E94A11A1EC10E94C5 -:10279000B21AC801B7010E94C31A17C190E0002302 -:1027A00011F496958795817009F40FC12C2D22950F -:1027B00026952770220F220F8C2D8F70E82EFF2474 -:1027C00000E010E0022E04C0EE0CFF1C001F111FE1 -:1027D0000A94D2F7C4FC05C060E070E080E090E0AD -:1027E0000FC06FE070E080E090E004C0660F771FDC -:1027F000881F991F2A95D2F76095709580959095BE -:10280000D694D69423E0D2224D2D50E0413051058C -:10281000A9F0423051051CF4452B49F0D6C0423096 -:10282000510589F04330510509F0CFC013C06E291E -:102830007F29802B912B0E94051AC7C06E297F2902 -:10284000802B912B0BC06E297F29802B912B0E940E -:10285000F419BBC00E94051AC801B7010E94161ADC -:10286000B4C081EFC81699F18C1540F0E0EECE1699 -:1028700008F458C0FFEEFC1558F419C023EFC21637 -:1028800081F1C21648F184EFC81609F04BC033C07D -:102890001C2D1F708D2D8F71002319F00E94631A5B -:1028A000E8CE0E94431A812F0E941C118EC0002383 -:1028B00029F0E4E0EF1508F488C004C0F5E0FF1546 -:1028C00008F483C08D2D8F710E94271A7EC08D2D34 -:1028D0008F710023E1F130C08D2D8F71002361F1E4 -:1028E00036C0002329F08D2D8F710E947F1A6DC094 -:1028F0000E948F1A6AC0002351F01D2D1F71812F75 -:102900000E94631A812F63E00E94B51B5EC081E0C4 -:102910000E949C1B21E02F1508F057C082E00E9406 -:102920009C1B53C0002359F0FF2021F08C2D0E94E6 -:102930007D114BC08D2D8F710E94631A46C0FF2000 -:1029400021F08C2D0E942A1140C08D2D8F710E9484 -:10295000431A3BC08FE0D822C5016C2D4D2D0E943B -:10296000EE010E94181931C0002379F5EFE0DE2254 -:102970004D2D50E042305105B9F0433051053CF443 -:102980004115510559F041305105F9F40AC0433061 -:10299000510569F044305105C1F40CC00E94152264 -:1029A00014C00E94F82111C00E94E3210EC00E94B1 -:1029B000BC210BC08C2D0E94A02107C0FFE0DF22AC -:1029C000C5016C2D4D2D0E946E02992019F10E94B7 -:1029D000DD1A80FD1FC0F50112820E94D71A0E94E5 -:1029E000631AC5010E9454120E94D71A0E94431A0A -:1029F00011C0C5010E94070269817A81802F0E945F -:102A0000E5196C010E9492190E949119002309F4A2 -:102A100086CD83CD2A960FB6F894DEBF0FBECDBF0C -:102A2000CF91DF911F910F91FF90EF90DF90CF90AA -:102A3000BF90AF909F900895DF93CF93CDB7DEB74F -:102A40002B970FB6F894DEBF0FBECDBF342F4F8348 -:102A5000252F588769877A878B87472F582FFE0144 -:102A6000319686E0DF011D928A95E9F76B83398301 -:102A70002A834C835D83432F522F8D819E810E9438 -:102A800059182B960FB6F894DEBF0FBECDBFCF916D -:102A9000DF9108950F931F930091870115C010E0F7 -:102AA000F801EE0FFF1FE00FF11FEE0FFF1FE857B9 -:102AB000FE4F4081518162817381848195810E94A2 -:102AC000C0100F5F1F4F077080918601081739F7FC -:102AD0001F910F9108954091800150918101609163 -:102AE00082017091830180918401909185010E94FF -:102AF000C01008950F931F93CF93DF9380918501AA -:102B000082958F7009F06DC080918201882309F44D -:102B100068C06091870100918601409183015091C6 -:102B200084011091810170918001EA01C095D095D6 -:102B300055C04115510509F44FC01F3F49F480E0CD -:102B400090E07F3F11F481E090E0882309F044C0D9 -:102B5000262F30E0F901EE0FFF1FE20FF31FDF0118 -:102B6000AA0FBB1FA857BE4F11968C91119718172B -:102B700099F58C91781781F5EE0FFF1FE657FE4F00 -:102B80008081882349F513968D919C911497841721 -:102B9000950718F0841B950B02C08C0F9D1F883C75 -:102BA0009105D0F4809185018F70806180938501BB -:102BB000F901EE0FFF1FE20FF31FEE0FFF1FE357A8 -:102BC000FE4F80818F708061808380E891E00E9459 -:102BD00054120E944A1505C06F5F6770601709F0B4 -:102BE000A8CFDF91CF911F910F910895DF92EF92BF -:102BF000FF920F931F93DF93CF93CDB7DEB76B9701 -:102C00000FB6F894DEBF0FBECDBF8C01DC0112966B -:102C1000DC9012974C9111965C9111971396ED9060 -:102C2000FC9014972091830130918401609181017F -:102C3000709180012115310509F4DBC16F3F09F066 -:102C400003C27F3F09F000C2D4C1E216F30640F090 -:102C5000C701821B930B883C910508F0EEC008C0A9 -:102C6000209530952E0D3F1D283C310508F0E5C01C -:102C700080918501807F09F095C06F3F09F0EAC11E -:102C80007F3F09F0E7C115C0741799F4DD2089F47E -:102C9000809185018F708061809385010E946B1502 -:102CA00080E891E00E94541280918501F8018583AB -:102CB000BCC1FD82EC825A834983DB82DE01169619 -:102CC000FE01319685E001900D928150E1F7688513 -:102CD000DE011B96FE01369685E001900D92815033 -:102CE000E1F72C853B858E859F85892B09F451C0A2 -:102CF0002F3F09F0B3C13F3F09F0B0C14AC0FD8288 -:102D0000EC825A834983DB82DE011B96FE013196F9 -:102D100085E001900D928150E1F7FC847B856D8503 -:102D200080918701909186011FC0282F30E0F90122 -:102D3000EE0FFF1FE20FF31FDF01AA0FBB1FA85703 -:102D4000BE4F11968C911197F81651F48C9178170B -:102D500039F4EE0FFF1FE657FE4F80816817C9F464 -:102D60002F5F3F4F822F87708917F9F68DC19F70B3 -:102D700059F0442349F459C19F7031F0D801159698 -:102D80008C91807F09F451C1405E483008F44DC1F8 -:102D900048C1DD2009F449C180918501816080939B -:102DA000850143C16F3F09F05DC17F3F09F05AC102 -:102DB00014C0741791F4DD2081F480918501F8012D -:102DC0008583C8010E945412A0E8B1E0F80186E0B2 -:102DD00001900D928150E1F720C15A834983898186 -:102DE0009A810E94D010882309F41BC1DD2009F4C8 -:102DF00018C130918501832F82958F7090E00297E2 -:102E00009CF09091810120918001FE01709686E0F6 -:102E1000DF011D928A95E9F7998B288BFC8AEB8A52 -:102E20003D8BCF010E945412A0E8B1E0F80186E08A -:102E300001900D928150E1F7EEC080918501807F75 -:102E4000A9F47E2DFD82EC825A834983DB826D2DAD -:102E50008D810E94B11000E811E0C8010E94541257 -:102E600086E0F80111928A95E9F7C0C06F3F09F03A -:102E7000FDC07F3F09F0FAC014C0741791F4DD2043 -:102E800081F480918501D80115968C93C8010E9428 -:102E90005412E0E8F1E086E0DF011D928A95E9F73F -:102EA000BEC05A83498389819A810E94D0108823A9 -:102EB00009F4B7C0DD2009F4B4C030918501832F37 -:102EC00082958F7090E002979CF090918101209103 -:102ED0008001FE01769686E0DF011D928A95E9F772 -:102EE0009F8B2E8BFA8EE98E3B8FCF010E9454125E -:102EF000A0E8B1E0F80186E001900D928150E1F781 -:102F00008AC06F3F09F0B6C07F3F09F0B3C071C0FF -:102F1000E216F30640F0C701821B930B883C910533 -:102F200008F053C008C0209530952E0D3F1D283C59 -:102F3000310508F04AC0DD2009F473C06F3F09F085 -:102F40009FC07F3F09F09CC029C0741739F590914C -:102F5000850190FD1AC0892F82958F70B1F0F8011C -:102F600095838F3031F08F5F8295807F9F70982B93 -:102F70009583C8010E945412A0E8B1E0F80186E0F0 -:102F800001900D928150E1F748C0A0E8B1E0F8014E -:102F900086E001900D928150E1F741C05A83498348 -:102FA00089819A810E94D010882349F0A0E8B1E07D -:102FB000F80186E001900D928150E1F72CC08091DC -:102FC00085018160809385012CC07E2DFD82EC827D -:102FD0005A834983DB826D2D8D810E94B110E0E818 -:102FE000F1E086E0DF011D928A95E9F70E946B15FA -:102FF0001CC0DD20B1F05A83498389819A810E94E7 -:10300000D010882371F0A0E8B1E0F80186E00190CB -:103010000D928150E1F70E947A150E946B1581E0B4 -:1030200005C0C8010E945412FACF80E06B960FB61B -:10303000F894DEBF0FBECDBFCF91DF911F910F91EE -:10304000FF90EF90DF90089580918201882309F42A -:1030500058CFFBCD651709F02CCE16CE613009F4A0 -:1030600098CE4DCE651709F0B8CEA3CE651709F0FE -:1030700018CF03CF80918201882309F0BACF48CFBF -:10308000651709F08BCF61CF5A83498389819A8173 -:103090000E94DA19482F892F82958F70282F30E0EF -:1030A000223031050CF463CE243031050CF0B9CF59 -:1030B00063CE0F931F93DF93CF93CDB7DEB72C97DB -:1030C0000FB6F894DEBF0FBECDBF4F835887698718 -:1030D0007A878B879C878E01095F1F4FC8010E94EA -:1030E000F6158823D9F028853F818A859B85892B11 -:1030F00009F46BC02F3F49F480E090E03F3F11F4AA -:1031000081E090E0882309F060C04F81588569858F -:103110007A858B859C850E94C01057C0DE01119670 -:10312000F80186E001900D928150E1F7F981EA8182 -:103130004C815D814115510509F447C0EF3F09F00D -:103140004CC0FF3F09F049C040C0F983EA835D836A -:103150004C83F901EE0FFF1FE20FF31FEE0FFF1F6D -:10316000E857FE4FDE01119686E00D9001928150E6 -:10317000E1F7609386010E944A1527C0919FC00124 -:10318000112488579E4F0E94F615882309F445C0E4 -:103190008091870190E0FC01EE0FFF1FE80FF91FFF -:1031A000EE0FFF1FE857FE4F40815181628173810E -:1031B000848195810E94C0108091870190E00196E2 -:1031C000877090708093870101C016E0909187010D -:1031D00080918601981791F620C080918601282F52 -:1031E00030E02F5F3F4FB901677070702150304061 -:1031F0008091870190E06817790709F0A6CF0E94B7 -:1032000017111092860110928701E0E8F1E086E044 -:10321000DF011D928A95E9F7D8CF2C960FB6F89466 -:10322000DEBF0FBECDBFCF91DF911F910F910895EB -:10323000CF92DF92EF92FF921F93CF93DF93EC0137 -:10324000009709F466C010E090EAC92E9FE0D92EDD -:1032500081E0E82EF12CFE0121969491943748F4F8 -:10326000943008F044C0913079F0923009F051C0A8 -:103270001BC0953709F437C0953750F1892F845812 -:10328000803708F046C037C0FE0121969491892FFF -:10329000805E883060F597708E2D01C0880F9A95FA -:1032A000EAF70E94461B0FC0FE0121969491892FD8 -:1032B000805E883058F497708E2D01C0880F9A95E3 -:1032C000EAF70E944C1B0E946B1B19C0892F15C086 -:1032D000FE01249104C0C6010197F1F72150222379 -:1032E000D1F721960CC0FE012196149108C0892FB8 -:1032F0000E947D1104C0892F8F770E942A11212FEF -:1033000004C0C6010197F1F72150222309F4A3CF8D -:10331000F8CFDF91CF911F91FF90EF90DF90CF908A -:10332000089508950895AF92BF92DF92EF92FF92B1 -:103330000F931F93CF93DF935C01E090B801F0905F -:10334000B9010091BA011091BB018091BC0190912B -:10335000BD01A091BE01B091BF01E82AF92A0A2B54 -:103360001B2BCFE1D0E0DC2ED801C7010C2E04C00E -:10337000B695A795979587950A94D2F78170907026 -:10338000892B39F08C2FB5010E94D304813091052F -:1033900031F421978FEFCF3FD80729F7DD248D2D0A -:1033A000DF91CF911F910F91FF90EF90DF90BF9031 -:1033B000AF9008950F931F938C010E949319B80149 -:1033C0000E94D3041F910F910895CB010E94DA1936 -:1033D00008956093BC017093BD018093BE019093EA -:1033E000BF010E94021108959B01AC016091BC01D4 -:1033F0007091BD018091BE019091BF01622773273A -:10340000842795270E94E91908959B01AC016091DA -:10341000BC017091BD018091BE019091BF016223FA -:103420007323842395230E94E91908959B01AC011D -:103430006091BC017091BD018091BE019091BF016E -:10344000622B732B842B952B0E94E919089521E0A0 -:1034500030E040E050E004C0220F331F441F551FEE -:103460008A95D2F78091BC019091BD01A091BE01D7 -:10347000B091BF01282739274A275B27CA01B90124 -:103480000E94E919089521E030E040E050E004C0D6 -:10349000220F331F441F551F8A95D2F72095309570 -:1034A000409550958091BC019091BD01A091BE01C5 -:1034B000B091BF01282339234A235B23CA01B901F4 -:1034C0000E94E919089521E030E040E050E004C096 -:1034D000220F331F441F551F8A95D2F78091BC01DC -:1034E0009091BD01A091BE01B091BF01282B392B55 -:1034F0004A2B5B2BCA01B9010E94E919089521E00A -:1035000030E040E050E004C0220F331F441F551F3D -:103510008A95D2F7CA01B9010E94E919089560E0BD -:1035200070E080E090E00E94E91908956093B8018E -:103530007093B9018093BA019093BB010E9402116C -:1035400008959B01AC016091B8017091B90180911F -:10355000BA019091BB0162277327842795270E94A7 -:10356000961A08959B01AC016091B8017091B90160 -:103570008091BA019091BB01622373238423952328 -:103580000E94961A08959B01AC016091B801709158 -:10359000B9018091BA019091BB01622B732B842BEE -:1035A000952B0E94961A08950E94961A089580916C -:1035B000CC0185958595859508958091CC0187707E -:1035C00008958091CC01877009F081E00895382F2B -:1035D000A0910C01B0910D01FD0120E08FEF9281CF -:1035E000931791F08F3F19F4992309F4822F2F5FDD -:1035F00031962630A1F78F3F39F0992787FD9095B6 -:10360000A80FB91F12963C930895982F20E030E040 -:10361000E0910C01F0910D01E20FF31F82818917F7 -:1036200009F412822F5F3F4F2630310589F7089544 -:1036300081E090E0E0910C01F0910D01E80FF91F9D -:103640001082019688309105A9F708959091C801DC -:10365000982B9093C801089580959091C801982364 -:103660009093C80108951092C80108959091CB01DC -:10367000982B9093CB01089580959091CB0198233E -:103680009093CB0108951092CB0108959091CA01B7 -:10369000982B9093CA01089580959091CA01982320 -:1036A0009093CA0108951092CA0108958093C901A8 -:1036B00008951092C9010895E0910C01F0910D0157 -:1036C00020E091E0818181112F5F9F5F31969830DA -:1036D000C9F7822F0895E0910C01F0910D018091BE -:1036E000C8018083E0910C01F0910D0180819091DF -:1036F000CB01892B8083E0910C01F0910D01808139 -:103700009091CA01892B80839091C901992369F016 -:10371000E0910C01F0910D018081892B80830E9442 -:103720005C1B882311F00E94591B80910C01909121 -:103730000D010E94AC0F08952091CC01482F4095B7 -:1037400042234093CC01842F877071F430E0842FA2 -:10375000992787FD90952817390731F0842F859593 -:10376000859585950E94431A0895982F990F990F72 -:10377000990F962B9093CC010E94631A0895089597 -:1037800008951F920F920FB60F9211248F939F935B -:10379000AF93BF938091CE01882399F48091CF019C -:1037A0009091D001A091D101B091D2014196A11D7B -:1037B000B11D8093CF019093D001A093D101B0931C -:1037C000D201BF91AF919F918F910F900FBE0F903B -:1037D0001F9018950E94171180E00E9423020E94FA -:1037E0002A220E949F0F0E94680508958091E2019D -:1037F000843039F11092CE0120E488E190E00FB6D8 -:10380000F894A895809360000FBE2093600080E03C -:103810000E94230280E00E94680583B7817F846054 -:1038200083BF83B7816083BF7894889583B78E7F89 -:1038300083BF88E10FB6F894809360001092600017 -:103840000FBE089580E00E9423020E94BF1B0E94C9 -:1038500023070E94C01B80E00E946B05892B81F426 -:1038600081E00E946B05892B59F482E00E946B0570 -:10387000892B31F483E00E946B0520E0892B09F04D -:1038800021E0822F089582E084BD93E095BD9AEFF8 -:1038900097BD80936E0008958FB7F8942091CF0163 -:1038A0003091D0014091D1015091D2018FBFC90117 -:1038B0000895EF92FF920F931F93BC018FB7F89476 -:1038C000E090CF01F090D0010091D1011091D20190 -:1038D0008FBFA801970140705070CB01A0E0B0E00D -:1038E000281739074A075B0720F09701261B370B7B -:1038F00005C09B01209530952E0D3F1DC9011F91DC -:103900000F91FF90EF9008951F920F920FB60F92B4 -:1039100011248F939F93AF93BF938091CF01909188 -:10392000D001A091D101B091D2010196A11DB11D8C -:103930008093CF019093D001A093D101B093D20195 -:10394000BF91AF919F918F910F900FBE0F901F90DD -:1039500018950E94850CF89480E29EE420E931E0FD -:10396000F9013197F1F70197D9F787E090EBA7E0DC -:10397000B0EB8093ED019093EE01A093EF01B09333 -:10398000F0012CE088E190E00FB6F894A8958093C0 -:1039900060000FBE20936000FFCF0E94051D8823AA -:1039A00011F40E94101D0E94001D8093CD010E9401 -:1039B000F61C8093EB010E94FB1C90E0A0E0B0E0BD -:1039C000BC01CD010E94D41A0895682F86E090E0D2 -:1039D0000E9493230895682F84E090E00E9493232F -:1039E000089586E090E00E948523089584E090E0A9 -:1039F0000E948523089583E090E00E948523089526 -:103A000082E090E00E948523089580E090E00E948B -:103A10008D2320E08D5E9E4F09F421E0822F0895D2 -:103A200080E090E06DEE7EEF0E94A52382E090E0C2 -:103A300060E00E94932383E090E060E00E94932383 -:103A400084E090E060E00E94932385E090E060E0F5 -:103A50000E94932386E090E060E00E949323089503 -:103A60008091D90180FF0BC09091100185E0989F53 -:103A7000C0011124959587959595879530C081FF54 -:103A800009C09091100185E0989FC001112495957F -:103A9000879525C082FF03C0909110010DC08091D1 -:103AA000D801882319F485E090E008956091110110 -:103AB00090911001861728F085E0989FC00111248D -:103AC0000EC0899F90011124C901880F991F880F8A -:103AD000991F820F931F70E00E945E23CB018038F4 -:103AE000910510F08FE70895009709F481E008959B -:103AF0008091D90180FF05C080911201869586953D -:103B000018C081FF04C080911201869512C082FF07 -:103B100003C0809112010DC02091D801222319F415 -:103B200081E090E0089560911301809112012617C1 -:103B300010F090E007C0289FC001112470E00E949F -:103B40005E23CB018038910510F08FE70895009730 -:103B500009F481E00895803F21F40E94301D819591 -:103B600004C0813F29F40E94301D8093D50108953F -:103B7000823F21F40E94301D819504C0833F29F4C7 -:103B80000E94301D8093D4010895893F19F40E944A -:103B9000781D05C08A3F31F40E94781D819580937D -:103BA000D60108958B3F21F40E94781D819504C0B1 -:103BB0008C3F29F40E94781D8093D7010895843F9B -:103BC00021F48091D301816017C0853F21F4809159 -:103BD000D301826011C0863F21F48091D3018460BB -:103BE0000BC0873F21F48091D301886005C0883FD6 -:103BF00031F48091D30180618093D30108958D3F8A -:103C000021F48091D901816005C08E3F31F480910B -:103C1000D90182608093D90108958F3F29F4809162 -:103C2000D90184608093D9010895803F29F480915F -:103C3000D50187FF6FC007C0813F41F48091D50156 -:103C400018160CF067C01092D50164C0823F29F4A9 -:103C50008091D40187FF5EC007C0833F41F480910B -:103C6000D40118160CF056C01092D40153C0893FED -:103C700029F48091D60118163CF04CC08A3F39F4E3 -:103C80008091D60187FF46C01092D60143C08B3F7A -:103C900029F48091D70187FF3DC006C08C3F39F4DD -:103CA0008091D7011816B4F51092D70133C0843F24 -:103CB00021F48091D3018E7F05C0853F31F480913E -:103CC000D3018D7F8093D30125C0863F21F480915D -:103CD000D3018B7FF7CF873F21F48091D301877F7A -:103CE000F1CF883F21F48091D3018F7EEBCF8D3FC0 -:103CF00021F48091D9018E7F0BC08E3F21F48091F9 -:103D0000D9018D7F05C08F3F29F48091D9018B7F28 -:103D10008093D9018091D401882371F48091D501D9 -:103D2000882351F48091D601882331F48091D70102 -:103D3000882311F41092D8010895E3EDF1E085E0B5 -:103D4000DF011D928A95E9F71092D8011092D901EE -:103D5000089583ED91E00E94B70F0E944C1C909350 -:103D6000DB018093DA0108951F938091DA0190912D -:103D7000DB010E94591CAC012091D801222321F0C3 -:103D800080910F0190E006C090910E018AE0989F0B -:103D9000C00111244817590708F485C09091D40137 -:103DA000992369F48091D501882349F48091D60143 -:103DB000882329F48091D701882309F474C02F3F08 -:103DC00019F02F5F2093D801191624F40E94301D9A -:103DD0008093D4018091D40187FF05C00E94301DDB -:103DE00081958093D4018091D501181624F40E9406 -:103DF000301D8093D5018091D50187FF05C00E94B9 -:103E0000301D81958093D5016091D401662339F1ED -:103E10001091D501112319F1772767FD7095872F30 -:103E2000972F0E946F2223E333E343E35FE30E9473 -:103E3000D3220E943C226093D401612F772767FD33 -:103E40007095872F972F0E946F2223E333E343E37C -:103E50005FE30E94D3220E943C226093D5018091AF -:103E6000D601181624F40E94781D8093D601809103 -:103E7000D60187FF05C00E94781D81958093D601E9 -:103E80008091D701181624F40E94781D8093D701E1 -:103E90008091D70187FF05C00E94781D819580938E -:103EA000D7010E94A91E1F91089580E0089580E027 -:103EB0000895833099F1843030F4813069F0823094 -:103EC00009F06FC01AC0853009F44AC08530B8F1D6 -:103ED000863009F066C055C020910E01822F90E017 -:103EE000860F911D8F3F910520F4260F20930E0120 -:103EF00008958FEF80930E01089520910F01822F76 -:103F000090E0860F911D8F3F910520F4260F20939E -:103F10000F0108958FEF80930F01089520911001F4 -:103F2000822F90E0860F911D8F3F910520F4260F80 -:103F30002093100108958FEF809310010895209130 -:103F40001101822F90E0860F911D8F3F910520F483 -:103F5000260F2093110108958FEF8093110108958A -:103F600020911201822F90E0860F911D8F3F9105C5 -:103F700020F4260F2093120108958FEF80931201F1 -:103F8000089520911301822F90E0860F911D8F3F9D -:103F9000910520F4260F2093130108958FEF80934D -:103FA00013010895833031F1843030F4813061F0B1 -:103FB000823009F04AC013C0853091F1853028F174 -:103FC000863009F042C037C080910E01681720F496 -:103FD000861B80930E01089510920E010895809122 -:103FE0000F01681720F4861B80930F01089510922B -:103FF0000F01089580911001681720F4861B8093AB -:104000001001089510921001089580911101681710 -:1040100020F4861B809311010895109211010895D8 -:1040200080911201681720F4861B80931201089575 -:1040300010921201089580911301681720F4861BD5 -:1040400080931301089510921301089521E030E048 -:1040500040E050E004C0220F331F441F551F8A95D3 -:10406000D2F7CA01B9010E94D41A0E94171108950B -:104070008732F8F48E3108F08AC08E3009F463C0BC -:104080008F3048F4873009F445C08B3009F486C07E -:10409000863039F528C0863109F480C0873118F49C -:1040A0008031F9F45CC0893109F478C08B31C9F4EE -:1040B00040C0883309F472C0893348F4893209F466 -:1040C00068C0853309F465C0873259F462C083340F -:1040D00009F45FC0843418F48A3318F056C0883469 -:1040E00059F080E008958091CD01807F8093CD01CB -:1040F00081E08093DC0108950E94171180E197E22E -:1041000020E931E0F9013197F1F70197D9F70E94E1 -:10411000A91C42C09091CD01892F809581709E7F0E -:10412000982B882311F09E6001C0917F9093CD0160 -:1041300033C08091CD01982F969590959170292F3D -:10414000220F8D7F19C08091CD01982F969596955D -:1041500090959170292F220F220F8B7F0DC0809197 -:10416000CD01982F96959695969590959170292FBB -:10417000220F220F220F877F822B8093CD0199235C -:1041800069F081608093CD0107C0895303C08D51D0 -:1041900001C080E00E94262081E0089581E008951A -:1041A0001F93182F8091DC01813079F0813020F04D -:1041B000823009F0BCC037C0E0910C01F0910D01D4 -:1041C0008081823209F0B5C007C0E0910C01F09106 -:1041D0000D018081823249F4812F0E94551F88236E -:1041E000F9F4812F0E943820A5C0812F0E94571F0B -:1041F0008823B1F4143161F0153128F41B3081F0BB -:10420000103141F40AC0193219F0183319F408C0FA -:104210001092DC0180E090E08DC082E08093DC01B0 -:1042200081E090E087C0193201F11A3270F4143144 -:10423000E1F0153120F4173009F064C065C0812F1A -:104240008E51863008F05EC01BC01E3409F455C084 -:104250001F3420F41B3409F055C049C0113509F44E -:1042600042C0123509F04EC03AC08091DD0188236A -:1042700019F01092DD0146C081E08093DC015AC044 -:104280001232F9F0133260F41F3199F0103218F441 -:104290001E3109F510C0103281F01132E1F40FC067 -:1042A000143299F0143278F0153289F0163299F4FC -:1042B00010C082E011C081E00FC083E00DC084E037 -:1042C0000BC085E009C086E007C087E005C088E034 -:1042D00003C089E001C080E08093DD0113C08091BC -:1042E000DD0161E007C08091DD0161E009C08091DE -:1042F000DD016AE00E94591F05C08091DD016AE07E -:104300000E94D21F81E016C08EE180930E0182E3ED -:1043100080930F018AE08093100184E18093110162 -:1043200088E08093120188E280931301EBCF109212 -:10433000DC0180E01F9108958091EC01869508953D -:104340009091EC01292F26952827220F9170922B0E -:104350009093EC0120E09E7F09F021E08091EC0138 -:104360008E7F822B8093EC010E94E51C8091EC01F2 -:1043700086950E94230208958091EC01282F2695AE -:104380002F5F2F77922F990F8170892B8093EC01EB -:1043900030E0243031051CF081708093EC0190E016 -:1043A0008091EC018E7F09F091E08091EC018E7F8D -:1043B000892B8093EC010E94E51C8091EC0186958D -:1043C0000E94230208958091EC01982F909591709E -:1043D0008E7F892B8093EC010E94E51C8091EC017B -:1043E00080FD02C080E001C086950E9423020895EE -:1043F0008091EC01982F969591F09158990F8170CA -:10440000892B8093EC0190E08E7F09F091E0809100 -:10441000EC018E7F892B8093EC010E94E51C80913A -:10442000EC0186950E94230208952091EC012695C7 -:10443000822F90E0039744F4822F8F5F880F816072 -:104440008093EC010E94E51C8091EC0186950E940E -:10445000230208950E94051D882311F40E94101D57 -:104460000E94F11C8093EC0180FD02C080E001C03D -:1044700086950E942302089504D06894B1118DC0DE -:10448000089570D088F09F5790F0B92F9927B751B1 -:10449000A0F0D1F0660F771F881F991F1AF0BA9508 -:1044A000C9F712C0B13081F077D0B1E0089574C07F -:1044B000672F782F8827B85F39F0B93FCCF38695FE -:1044C00077956795B395D9F73EF49095809570955B -:1044D00061957F4F8F4F9F4F0895E89409C097FBD8 -:1044E0003EF490958095709561957F4F8F4F9F4FCB -:1044F0009923A9F0F92F96E9BB279395F69587950F -:1045000077956795B795F111F8CFFAF4BB0F11F4D1 -:1045100060FF1BC06F5F7F4F8F4F9F4F16C0882378 -:1045200011F096E911C0772321F09EE8872F762FAE -:1045300005C0662371F096E8862F70E060E02AF0EF -:104540009A95660F771F881FDAF7880F96958795DB -:1045500097F9089557FD9058440F551F59F05F3F44 -:1045600071F04795880F97FB991F61F09F3F79F095 -:1045700087950895121613061406551FF2CF469517 -:10458000F1DF08C0161617061806991FF1CF869599 -:104590007105610508940895E894BB27662777277D -:1045A000CB0197F908950BD078C069D028F06ED070 -:1045B00018F0952309F05AC05FC01124EECFCADF6E -:1045C000A0F3959FD1F3950F50E0551F629FF00126 -:1045D000729FBB27F00DB11D639FAA27F00DB11D7F -:1045E000AA1F649F6627B00DA11D661F829F222708 -:1045F000B00DA11D621F739FB00DA11D621F839F8F -:10460000A00D611D221F749F3327A00D611D231F64 -:10461000849F600D211D822F762F6A2F11249F57B2 -:1046200050408AF0E1F088234AF0EE0FFF1FBB1FD5 -:10463000661F771F881F91505040A9F79E3F510574 -:1046400070F014C0AACF5F3FECF3983EDCF3869580 -:1046500077956795B795F795E7959F5FC1F7FE2B1F -:10466000880F911D9695879597F9089597F99F67FB -:1046700080E870E060E008959FEF80EC08950024EA -:104680000A941616170618060906089500240A94B7 -:1046900012161306140605060895092E0394000C3D -:1046A00011F4882352F0BB0F40F4BF2B11F460FFCC -:1046B00004C06F5F7F4F8F4F9F4F089597FB092E68 -:1046C00007260AD077FD04D00CD006D000201AF4BB -:1046D000709561957F4F0895F6F7909581959F4F5E -:1046E0000895AA1BBB1B51E107C0AA1FBB1FA61739 -:1046F000B70710F0A61BB70B881F991F5A95A9F78B -:1047000080959095BC01CD010895F999FECF92BD99 -:1047100081BDF89A992780B50895A8E1B0E042E0FC -:1047200050E00C94AD23262FF999FECF92BD81BDA8 -:10473000F89A019700B4021639F01FBA20BD0FB6DF -:10474000F894FA9AF99A0FBE08950196272F0E94BD -:1047500094230C949323DC01CB01FC01F999FECF47 -:1047600006C0F2BDE1BDF89A319600B40D924150F9 -:0A4770005040B8F70895F894FFCF09 -:10477A00050175080A09E408AE087808C0011E3266 -:10478A000A14082840004500250026006100600040 -:10479A002000370064006500660067004400460098 -:1047AA002400470040004500250026006100600003 -:1047BA002000370064006500660067004400460078 -:0447CA002400470080 -:00000001FF diff --git a/keyboard/planck/keymaps/Jacob/readme.md b/keyboard/planck/keymaps/Jacob/readme.md deleted file mode 100644 index 2a4be4ebc..000000000 --- a/keyboard/planck/keymaps/Jacob/readme.md +++ /dev/null @@ -1 +0,0 @@ -Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. \ No newline at end of file diff --git a/keyboard/planck/keymaps/alexey.c b/keyboard/planck/keymaps/alexey.c deleted file mode 100644 index 89af4112c..000000000 --- a/keyboard/planck/keymaps/alexey.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "keymap_common.h" -#include "planck.h" -#include "backlight.h" - -#define _QW 0 -#define _LW 1 -#define _RS 2 - -// This layout tries to imitate the Atreus keyboard - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_LW)}, - {KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS}, - {M(0), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_SPC, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT, KC_TRNS} -}, -[_RS] = { /* RAISE */ - {KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS}, - {KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS}, - {KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_EQL, KC_TRNS} -}, -[_LW] = { /* LOWER */ - {KC_TRNS, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_DELETE, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_F4, KC_F5, KC_F6, KC_F11, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_TRNS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - diff --git a/keyboard/planck/keymaps/alexey/alexey.c b/keyboard/planck/keymaps/alexey/alexey.c new file mode 100644 index 000000000..89af4112c --- /dev/null +++ b/keyboard/planck/keymaps/alexey/alexey.c @@ -0,0 +1,51 @@ +#include "keymap_common.h" +#include "planck.h" +#include "backlight.h" + +#define _QW 0 +#define _LW 1 +#define _RS 2 + +// This layout tries to imitate the Atreus keyboard + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_LW)}, + {KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS}, + {M(0), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_SPC, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT, KC_TRNS} +}, +[_RS] = { /* RAISE */ + {KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS}, + {KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS}, + {KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_EQL, KC_TRNS} +}, +[_LW] = { /* LOWER */ + {KC_TRNS, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_DELETE, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_F4, KC_F5, KC_F6, KC_F11, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_TRNS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + diff --git a/keyboard/planck/keymaps/angerthosenear.c b/keyboard/planck/keymaps/angerthosenear.c deleted file mode 100644 index cdf60632e..000000000 --- a/keyboard/planck/keymaps/angerthosenear.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* WASD + NumPad */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/angerthosenear/angerthosenear.c b/keyboard/planck/keymaps/angerthosenear/angerthosenear.c new file mode 100644 index 000000000..cdf60632e --- /dev/null +++ b/keyboard/planck/keymaps/angerthosenear/angerthosenear.c @@ -0,0 +1,50 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* WASD + NumPad */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/austin.c b/keyboard/planck/keymaps/austin.c deleted file mode 100644 index 49fc98a58..000000000 --- a/keyboard/planck/keymaps/austin.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/austin/austin.c b/keyboard/planck/keymaps/austin/austin.c new file mode 100644 index 000000000..49fc98a58 --- /dev/null +++ b/keyboard/planck/keymaps/austin/austin.c @@ -0,0 +1,50 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/bone2planck.c b/keyboard/planck/keymaps/bone2planck.c deleted file mode 100644 index a99e7719f..000000000 --- a/keyboard/planck/keymaps/bone2planck.c +++ /dev/null @@ -1,112 +0,0 @@ - -#include "planck.h" -#ifdef BACKLIGHT_ENABLE -#include "backlight.h" -#endif -#include "..\..\quantum\keymap_extras\keymap_german.h" - -/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. - It has Umlauts and "ß" as it is optimized for a mix of German & English. - My favourite features are the placement of the special characters often used for programming right on the home row - and the number & navigation block combo, so you never have to move your hands from their home position. - - Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone -*/ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Bone2 - * ,-----------------------------------------------------------------------------------. - * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | M1 | C | T | I | E | O | B | N | R | S | G | M1 | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [0] = { - { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, - { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) }, - { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S }, - { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT } - }, - - /* M1 Special Characters - * ,-----------------------------------------------------------------------------------. - * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | # | $ | | | ~ | € | + | % | " | ' | ; | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [1] = { - { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO }, - { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS }, - { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } - }, - - /* Navigation & Number Blocks - * ,-----------------------------------------------------------------------------------. - * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [2] = { - { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, - { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO }, - { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } - }, - - /* Function & Media Keys - * ,-----------------------------------------------------------------------------------. - * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter | - * `-----------------------------------------------------------------------------------' - */ - [3] = { - { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, - { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, - { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS}, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch (id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); -#ifdef BACKLIGHT_ENABLE - backlight_step(); -#endif - } - else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/bone2planck/bone2planck.c b/keyboard/planck/keymaps/bone2planck/bone2planck.c new file mode 100644 index 000000000..a99e7719f --- /dev/null +++ b/keyboard/planck/keymaps/bone2planck/bone2planck.c @@ -0,0 +1,112 @@ + +#include "planck.h" +#ifdef BACKLIGHT_ENABLE +#include "backlight.h" +#endif +#include "..\..\quantum\keymap_extras\keymap_german.h" + +/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. + It has Umlauts and "ß" as it is optimized for a mix of German & English. + My favourite features are the placement of the special characters often used for programming right on the home row + and the number & navigation block combo, so you never have to move your hands from their home position. + + Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Bone2 + * ,-----------------------------------------------------------------------------------. + * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | M1 | C | T | I | E | O | B | N | R | S | G | M1 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [0] = { + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) }, + { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S }, + { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT } + }, + + /* M1 Special Characters + * ,-----------------------------------------------------------------------------------. + * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | # | $ | | | ~ | € | + | % | " | ' | ; | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [1] = { + { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO }, + { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS }, + { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + }, + + /* Navigation & Number Blocks + * ,-----------------------------------------------------------------------------------. + * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [2] = { + { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, + { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO }, + { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + }, + + /* Function & Media Keys + * ,-----------------------------------------------------------------------------------. + * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [3] = { + { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, + { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, + { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS}, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch (id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif + } + else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/brandon.c b/keyboard/planck/keymaps/brandon.c deleted file mode 100644 index 2b89f86db..000000000 --- a/keyboard/planck/keymaps/brandon.c +++ /dev/null @@ -1,134 +0,0 @@ -// This is the canonical layout file for the Quantum project. If you want to add another keyboard, -// this is the style you want to emulate. - -#include "planck.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QW 0 -#define _CM 1 -#define _TK 2 -#define _LW 3 -#define _RS 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ -/* MIT Layout (QWERTY layer) - * - * ,-----------------------------------------------------------------------. - * | esc | q | w | e | r | t | y | u | i | o | p | bspc| - * |-----------------------------------------------------------------------| - * | tab | a | s | d | f | g | h | j | k | l | ; | ' | - * |-----------------------------------------------------------------------| - * |shift| z | x | c | v | b | n | m | , | . | / |enter| - * |-----------------------------------------------------------------------| - * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| - * `-----------------------------------------------------------------------' - */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_LSFT, KC_ENT) }, - {KC_LCTL, KC_LALT, KC_LGUI, TG(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_CM] = { /* Colemak */ -/* MIT Layout (Colemak layer) - * - * ,-----------------------------------------------------------------------. - * | esc | q | w | f | p | g | j | l | u | y | ; | bspc| - * |-----------------------------------------------------------------------| - * | tab | a | r | s | t | d | h | n | e | i | o | ' | - * |-----------------------------------------------------------------------| - * |shift| z | x | c | v | b | k | m | , | . | / |enter| - * |-----------------------------------------------------------------------| - * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| - * `-----------------------------------------------------------------------' - */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_LSFT, KC_ENT)}, - {KC_LCTL, KC_LALT, KC_LGUI, TG(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_RS] = { /* RAISE */ -/* MIT Layout (RAISE layer) - * - * ,-----------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | bspc| - * |-----------------------------------------------------------------------| - * | tab | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |-----------------------------------------------------------------------| - * |shift| F7 | F8 | F9 | F10 | F11 | F12 | QW | CM | BL | RST |enter| - * |-----------------------------------------------------------------------| - * | ctl | alt | win | del |lower| spc |raise|next |vold |volu |PLAY | - * `-----------------------------------------------------------------------' - */ - - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[_LW] = { /* LOWER */ -/* MIT Layout (Colemak layer) - * - * ,-----------------------------------------------------------------------. - * | esc | q | w | f | p | g | j | l | u | y | ; | bspc| - * |-----------------------------------------------------------------------| - * | tab | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |-----------------------------------------------------------------------| - * |shift| F7 | F8 | F9 | F10 | F11 | F12 | QW | CM | BL | RST |enter| - * |-----------------------------------------------------------------------| - * | ctl | alt | win | TK |lower| spc |raise|next |vold |volu |PLAY | - * `-----------------------------------------------------------------------' - */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[_TK] = { /* Ten Key*/ -/* MIT Layout (Ten Key layer) - * - * ,-----------------------------------------------------------------------. - * | esc | F9 | F10 | F11 | F12 | PGUP| % | / | 7 | 8 | 9 | bspc| - * |-----------------------------------------------------------------------| - * | tab | F5 | F6 | F7 | F8 | PGDN| HOME| * | 4 | 5 | 6 | \ | - * |-----------------------------------------------------------------------| - * |shift| F1 | F2 | F3 | F4 | DEL | END | 0 | 1 | 2 | 3 |enter| - * |-----------------------------------------------------------------------| - * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| - * `-----------------------------------------------------------------------' - */ - {KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_PERC, KC_SLSH, KC_7, KC_8, KC_9, KC_BSPC}, - {KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_PIPE}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_END, KC_0, KC_1, KC_2, KC_3, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -} - -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/brandon/brandon.c b/keyboard/planck/keymaps/brandon/brandon.c new file mode 100644 index 000000000..2b89f86db --- /dev/null +++ b/keyboard/planck/keymaps/brandon/brandon.c @@ -0,0 +1,134 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QW 0 +#define _CM 1 +#define _TK 2 +#define _LW 3 +#define _RS 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* Qwerty */ +/* MIT Layout (QWERTY layer) + * + * ,-----------------------------------------------------------------------. + * | esc | q | w | e | r | t | y | u | i | o | p | bspc| + * |-----------------------------------------------------------------------| + * | tab | a | s | d | f | g | h | j | k | l | ; | ' | + * |-----------------------------------------------------------------------| + * |shift| z | x | c | v | b | n | m | , | . | / |enter| + * |-----------------------------------------------------------------------| + * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| + * `-----------------------------------------------------------------------' + */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_LSFT, KC_ENT) }, + {KC_LCTL, KC_LALT, KC_LGUI, TG(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_CM] = { /* Colemak */ +/* MIT Layout (Colemak layer) + * + * ,-----------------------------------------------------------------------. + * | esc | q | w | f | p | g | j | l | u | y | ; | bspc| + * |-----------------------------------------------------------------------| + * | tab | a | r | s | t | d | h | n | e | i | o | ' | + * |-----------------------------------------------------------------------| + * |shift| z | x | c | v | b | k | m | , | . | / |enter| + * |-----------------------------------------------------------------------| + * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| + * `-----------------------------------------------------------------------' + */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_LSFT, KC_ENT)}, + {KC_LCTL, KC_LALT, KC_LGUI, TG(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_RS] = { /* RAISE */ +/* MIT Layout (RAISE layer) + * + * ,-----------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | bspc| + * |-----------------------------------------------------------------------| + * | tab | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |-----------------------------------------------------------------------| + * |shift| F7 | F8 | F9 | F10 | F11 | F12 | QW | CM | BL | RST |enter| + * |-----------------------------------------------------------------------| + * | ctl | alt | win | del |lower| spc |raise|next |vold |volu |PLAY | + * `-----------------------------------------------------------------------' + */ + + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* LOWER */ +/* MIT Layout (Colemak layer) + * + * ,-----------------------------------------------------------------------. + * | esc | q | w | f | p | g | j | l | u | y | ; | bspc| + * |-----------------------------------------------------------------------| + * | tab | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |-----------------------------------------------------------------------| + * |shift| F7 | F8 | F9 | F10 | F11 | F12 | QW | CM | BL | RST |enter| + * |-----------------------------------------------------------------------| + * | ctl | alt | win | TK |lower| spc |raise|next |vold |volu |PLAY | + * `-----------------------------------------------------------------------' + */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_TK] = { /* Ten Key*/ +/* MIT Layout (Ten Key layer) + * + * ,-----------------------------------------------------------------------. + * | esc | F9 | F10 | F11 | F12 | PGUP| % | / | 7 | 8 | 9 | bspc| + * |-----------------------------------------------------------------------| + * | tab | F5 | F6 | F7 | F8 | PGDN| HOME| * | 4 | 5 | 6 | \ | + * |-----------------------------------------------------------------------| + * |shift| F1 | F2 | F3 | F4 | DEL | END | 0 | 1 | 2 | 3 |enter| + * |-----------------------------------------------------------------------| + * | ctl | alt | win | TK |lower| spc |raise|left |down | up |right| + * `-----------------------------------------------------------------------' + */ + {KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_PERC, KC_SLSH, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_PIPE}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_END, KC_0, KC_1, KC_2, KC_3, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +} + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/charlie.c b/keyboard/planck/keymaps/charlie.c deleted file mode 100644 index 88f454d78..000000000 --- a/keyboard/planck/keymaps/charlie.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Native */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)}, - {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - [1] = { /* QWERTY->PHOTOSHOP */ - {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)}, - {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9}, - {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)}, - {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14} - }, - [2] = { /* 2: FUNC(3 PHOTOSHOP */ - {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)}, - {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO}, - {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout - [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets - [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer - - [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK - [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse - [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select - [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill - [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp - [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer - [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out - [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders - [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save - [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy - [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke - [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer - [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0 - [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders - [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as - [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur - [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur - [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter - [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending - [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending - [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending - [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back - [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward - [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize - -}; diff --git a/keyboard/planck/keymaps/charlie/charlie.c b/keyboard/planck/keymaps/charlie/charlie.c new file mode 100644 index 000000000..88f454d78 --- /dev/null +++ b/keyboard/planck/keymaps/charlie/charlie.c @@ -0,0 +1,54 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Native */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)}, + {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + [1] = { /* QWERTY->PHOTOSHOP */ + {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)}, + {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9}, + {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)}, + {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14} + }, + [2] = { /* 2: FUNC(3 PHOTOSHOP */ + {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)}, + {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO}, + {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout + [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets + [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer + + [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK + [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse + [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select + [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill + [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp + [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer + [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out + [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders + [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save + [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy + [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke + [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer + [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0 + [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders + [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as + [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur + [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur + [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter + [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending + [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending + [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending + [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back + [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward + [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize + +}; diff --git a/keyboard/planck/keymaps/daniel.c b/keyboard/planck/keymaps/daniel.c deleted file mode 100644 index 234e48ff4..000000000 --- a/keyboard/planck/keymaps/daniel.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* RAISE */ - {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[2] = { /* LOWER */ - {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)}, - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER - [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/daniel/daniel.c b/keyboard/planck/keymaps/daniel/daniel.c new file mode 100644 index 000000000..234e48ff4 --- /dev/null +++ b/keyboard/planck/keymaps/daniel/daniel.c @@ -0,0 +1,48 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* RAISE */ + {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[2] = { /* LOWER */ + {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER + [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/david.c b/keyboard/planck/keymaps/david.c deleted file mode 100644 index f48308480..000000000 --- a/keyboard/planck/keymaps/david.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "keymap_common.h" -#include "beeps.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {M(10), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - if (record->event.pressed) { - switch(id) { - case 0: - true_note(12, 12, 20); - break; - case 1: - true_note(14, 14, 20); - break; - case 2: - true_note(16, 16, 20); - break; - case 3: - true_note(17, 17, 20); - break; - case 4: - true_note(19, 19, 20); - break; - case 5: - true_note(21, 21, 20); - break; - case 6: - true_note(23, 23, 20); - break; - case 7: - true_note(24, 24, 20); - break; - case 10: - - break; - } - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/david/david.c b/keyboard/planck/keymaps/david/david.c new file mode 100644 index 000000000..f48308480 --- /dev/null +++ b/keyboard/planck/keymaps/david/david.c @@ -0,0 +1,76 @@ +#include "keymap_common.h" +#include "beeps.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {M(10), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + if (record->event.pressed) { + switch(id) { + case 0: + true_note(12, 12, 20); + break; + case 1: + true_note(14, 14, 20); + break; + case 2: + true_note(16, 16, 20); + break; + case 3: + true_note(17, 17, 20); + break; + case 4: + true_note(19, 19, 20); + break; + case 5: + true_note(21, 21, 20); + break; + case 6: + true_note(23, 23, 20); + break; + case 7: + true_note(24, 24, 20); + break; + case 10: + + break; + } + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/dzobert.c b/keyboard/planck/keymaps/dzobert.c deleted file mode 100644 index 665e9c20b..000000000 --- a/keyboard/planck/keymaps/dzobert.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB}, - {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC}, - {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC}, - {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL}, - {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END} -}, -[3] = { /* LOWER */ - {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH}, - {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK}, - {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/dzobert/dzobert.c b/keyboard/planck/keymaps/dzobert/dzobert.c new file mode 100644 index 000000000..665e9c20b --- /dev/null +++ b/keyboard/planck/keymaps/dzobert/dzobert.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC}, + {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC}, + {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL}, + {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END} +}, +[3] = { /* LOWER */ + {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH}, + {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK}, + {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/gabriel.c b/keyboard/planck/keymaps/gabriel.c deleted file mode 100644 index 805484488..000000000 --- a/keyboard/planck/keymaps/gabriel.c +++ /dev/null @@ -1,108 +0,0 @@ -#include "planck.h" - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QW 0 -#define _LW 1 -#define _RS 2 -#define _FN 3 - -// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position -// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and -// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX). -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* MIT Layout (QWERTY layer) - * - * ,-----------------------------------------------------------------------. - * | esc | q | w | e | r | t | y | u | i | o | p | bspc| - * |-----------------------------------------------------------------------| - * | tab | a | s | d | f | g | h | j | k | l | ; | ' | - * |-----------------------------------------------------------------------| - * |shift| z | x | c | v | b | n | m | , | . | / |enter| - * |-----------------------------------------------------------------------| - * | fn | ctl | alt | cmd |lower| spc |raise|left |down | up |right| - * `-----------------------------------------------------------------------' - */ -[_QW] = { /* QWERTY */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -/* MIT Layout (Raised layer) - * - * ,-----------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | - * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | - * |-----------------------------------------------------------------------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------' - */ -[_RS] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -/* MIT Layout (Lowered layer) - * - * ,-----------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | - * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ | - * |-----------------------------------------------------------------------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------' - */ -[_LW] = { /* LOWER */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -/* MIT Layout (FN layer) - * - * ,-----------------------------------------------------------------------. - * | | | | | | | | | | | | del | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | |home |pgdn |pgup | end | - * `-----------------------------------------------------------------------' - */ -[_FN] = { /* FUNCTION */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/gabriel/gabriel.c b/keyboard/planck/keymaps/gabriel/gabriel.c new file mode 100644 index 000000000..805484488 --- /dev/null +++ b/keyboard/planck/keymaps/gabriel/gabriel.c @@ -0,0 +1,108 @@ +#include "planck.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QW 0 +#define _LW 1 +#define _RS 2 +#define _FN 3 + +// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position +// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and +// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX). +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* MIT Layout (QWERTY layer) + * + * ,-----------------------------------------------------------------------. + * | esc | q | w | e | r | t | y | u | i | o | p | bspc| + * |-----------------------------------------------------------------------| + * | tab | a | s | d | f | g | h | j | k | l | ; | ' | + * |-----------------------------------------------------------------------| + * |shift| z | x | c | v | b | n | m | , | . | / |enter| + * |-----------------------------------------------------------------------| + * | fn | ctl | alt | cmd |lower| spc |raise|left |down | up |right| + * `-----------------------------------------------------------------------' + */ +[_QW] = { /* QWERTY */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +/* MIT Layout (Raised layer) + * + * ,-----------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |-----------------------------------------------------------------------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | + * |-----------------------------------------------------------------------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------' + */ +[_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +/* MIT Layout (Lowered layer) + * + * ,-----------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |-----------------------------------------------------------------------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ | + * |-----------------------------------------------------------------------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------' + */ +[_LW] = { /* LOWER */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +/* MIT Layout (FN layer) + * + * ,-----------------------------------------------------------------------. + * | | | | | | | | | | | | del | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | |home |pgdn |pgup | end | + * `-----------------------------------------------------------------------' + */ +[_FN] = { /* FUNCTION */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG b/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG new file mode 100644 index 000000000..40f0b8942 Binary files /dev/null and b/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG differ diff --git a/keyboard/planck/keymaps/jacob/keymap.c b/keyboard/planck/keymaps/jacob/keymap.c new file mode 100644 index 000000000..5e6e8498e --- /dev/null +++ b/keyboard/planck/keymaps/jacob/keymap.c @@ -0,0 +1,56 @@ +#include "planck.h" +#include "action_layer.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +//Simple Keymap where CTRL, WINKEY, and ALT keys are placed in a more familiar location for Windows users. +//Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define _QW 0 +#define _LW 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT)}, + {KC_LCTL, KC_LGUI, KC_LALT, M(0), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + }, + [_LW] = { /* LOWER */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/jacob/readme.md b/keyboard/planck/keymaps/jacob/readme.md new file mode 100644 index 000000000..2a4be4ebc --- /dev/null +++ b/keyboard/planck/keymaps/jacob/readme.md @@ -0,0 +1 @@ +Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. \ No newline at end of file diff --git a/keyboard/planck/keymaps/joe.c b/keyboard/planck/keymaps/joe.c deleted file mode 100644 index 5b7bbe2bb..000000000 --- a/keyboard/planck/keymaps/joe.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Joe colemak */ - {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, - {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [1] = { /* Joe soft Colemak */ - {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS}, - {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT }, - {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [2] = { /* Joe NUMPAD */ - {F(3), KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_PSLS, KC_P7, KC_P8, KC_P9 }, - {KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_PAST, KC_P4, KC_P5, KC_P6 }, - {F(15), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PMNS, KC_P1, KC_P2, KC_P3 }, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_PPLS, KC_P0, KC_PDOT, KC_PENT} - }, - [3] = { /* Joe 1337 haxOr5*/ - {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT }, - {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [4] = { /* Joe LOWER fn1 */ - {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) }, - {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, - {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_PGUP, KC_EQL }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_NO, KC_HOME, KC_PGDN, KC_END } - }, - [5] = { /* Joe UPPER fn2 */ - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 }, - {KC_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO }, - {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(LALT(KC_UP)), LCTL(KC_PGDN) }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), KC_NO, LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_RGHT))} - }, - [6] = { /* Joe SPECIAL fn3 */ - {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, - {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET }, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, - {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(4), // fn1 - [2] = ACTION_LAYER_MOMENTARY(5), // fn2 - - /* ESC on tap, fn3 on hold */ - [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC), - - /* toggle layers */ - [6] = ACTION_DEFAULT_LAYER_SET(0), - [7] = ACTION_DEFAULT_LAYER_SET(1), - [8] = ACTION_DEFAULT_LAYER_SET(2), - [9] = ACTION_DEFAULT_LAYER_SET(3), - - /* tab on tap, shift on hold */ - [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch (id) { - case 0: - /* :) */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END ); - break; - case 1: - /* :( */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END ); - break; - case 2: - /* (: | :) */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); - break; - case 3: - /* :( | ): */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); - break; - default: - break; - } - return MACRO_NONE; -} diff --git a/keyboard/planck/keymaps/joe/joe.c b/keyboard/planck/keymaps/joe/joe.c new file mode 100644 index 000000000..5b7bbe2bb --- /dev/null +++ b/keyboard/planck/keymaps/joe/joe.c @@ -0,0 +1,88 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Joe colemak */ + {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, + {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [1] = { /* Joe soft Colemak */ + {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS}, + {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT }, + {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [2] = { /* Joe NUMPAD */ + {F(3), KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_PSLS, KC_P7, KC_P8, KC_P9 }, + {KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_PAST, KC_P4, KC_P5, KC_P6 }, + {F(15), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PMNS, KC_P1, KC_P2, KC_P3 }, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_PPLS, KC_P0, KC_PDOT, KC_PENT} + }, + [3] = { /* Joe 1337 haxOr5*/ + {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT }, + {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [4] = { /* Joe LOWER fn1 */ + {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) }, + {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, + {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_PGUP, KC_EQL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_NO, KC_HOME, KC_PGDN, KC_END } + }, + [5] = { /* Joe UPPER fn2 */ + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 }, + {KC_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO }, + {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(LALT(KC_UP)), LCTL(KC_PGDN) }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), KC_NO, LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_RGHT))} + }, + [6] = { /* Joe SPECIAL fn3 */ + {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, + {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET }, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, + {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(4), // fn1 + [2] = ACTION_LAYER_MOMENTARY(5), // fn2 + + /* ESC on tap, fn3 on hold */ + [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC), + + /* toggle layers */ + [6] = ACTION_DEFAULT_LAYER_SET(0), + [7] = ACTION_DEFAULT_LAYER_SET(1), + [8] = ACTION_DEFAULT_LAYER_SET(2), + [9] = ACTION_DEFAULT_LAYER_SET(3), + + /* tab on tap, shift on hold */ + [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch (id) { + case 0: + /* :) */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END ); + break; + case 1: + /* :( */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END ); + break; + case 2: + /* (: | :) */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); + break; + case 3: + /* :( | ): */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); + break; + default: + break; + } + return MACRO_NONE; +} diff --git a/keyboard/planck/keymaps/kyle.c b/keyboard/planck/keymaps/kyle.c deleted file mode 100644 index da32b74f9..000000000 --- a/keyboard/planck/keymaps/kyle.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_RCTL, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/kyle/kyle.c b/keyboard/planck/keymaps/kyle/kyle.c new file mode 100644 index 000000000..da32b74f9 --- /dev/null +++ b/keyboard/planck/keymaps/kyle/kyle.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_RCTL, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/leo.c b/keyboard/planck/keymaps/leo.c deleted file mode 100644 index 6d6644182..000000000 --- a/keyboard/planck/keymaps/leo.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* BASE */ - {KC_ESC, KC_LBRC, KC_QUOT, KC_SCLN, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT}, - {KC_LSFT, KC_DOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_COMM}, - {KC_LCTL, KC_LALT, KC_LGUI, FUNC(3), FUNC(2), KC_SPC, KC_SPC, FUNC(1), FUNC(3), KC_RGUI, KC_RALT, KC_RCTL} -}, -[2] = { /* RAISE */ - {RALT(KC_RBRC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_RBRC)}, - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[3] = { /* LOWER */ - {S(KC_EQL),S(KC_1),S(KC_2),S(KC_3),RALT(KC_5),S(KC_5), S(KC_6), S(KC_7),RALT(KC_7),RALT(KC_0),S(KC_0), KC_MINS}, - {KC_TRNS,RALT(KC_2),S(KC_SLSH),KC_NUBS,S(KC_NUBS),RALT(KC_MINS),RALT(KC_NUBS), KC_NUHS, S(KC_8), S(KC_9), S(KC_MINS), KC_SLSH}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[4] = { /* META */ - {KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_DEL}, - {KC_TRNS, KC_RGHT, KC_DOWN, KC_LEFT, KC_PGUP, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_PGDN, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - [3] = ACTION_LAYER_MOMENTARY(4), // to META - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/leo/leo.c b/keyboard/planck/keymaps/leo/leo.c new file mode 100644 index 000000000..6d6644182 --- /dev/null +++ b/keyboard/planck/keymaps/leo/leo.c @@ -0,0 +1,46 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* BASE */ + {KC_ESC, KC_LBRC, KC_QUOT, KC_SCLN, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT}, + {KC_LSFT, KC_DOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_COMM}, + {KC_LCTL, KC_LALT, KC_LGUI, FUNC(3), FUNC(2), KC_SPC, KC_SPC, FUNC(1), FUNC(3), KC_RGUI, KC_RALT, KC_RCTL} +}, +[2] = { /* RAISE */ + {RALT(KC_RBRC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_RBRC)}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[3] = { /* LOWER */ + {S(KC_EQL),S(KC_1),S(KC_2),S(KC_3),RALT(KC_5),S(KC_5), S(KC_6), S(KC_7),RALT(KC_7),RALT(KC_0),S(KC_0), KC_MINS}, + {KC_TRNS,RALT(KC_2),S(KC_SLSH),KC_NUBS,S(KC_NUBS),RALT(KC_MINS),RALT(KC_NUBS), KC_NUHS, S(KC_8), S(KC_9), S(KC_MINS), KC_SLSH}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_8), RALT(KC_9), KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[4] = { /* META */ + {KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_DEL}, + {KC_TRNS, KC_RGHT, KC_DOWN, KC_LEFT, KC_PGUP, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_PGDN, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + [3] = ACTION_LAYER_MOMENTARY(4), // to META + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/lucas.c b/keyboard/planck/keymaps/lucas.c deleted file mode 100644 index 27672e1bb..000000000 --- a/keyboard/planck/keymaps/lucas.c +++ /dev/null @@ -1,163 +0,0 @@ -/* -This is the keymap of /u/deepshitgoeshere! -Layer 1 exists so I can have the symbol positions of QWERTY while having my system in german. -The second layer has all the german umlauts I need and with capital and small letters on the -same layer there is no need to press shift+lower. -This keymap is made to work with software implemented QWERTZ. -The "Gaming" layer is mainly customized for CS:GO. -If you have any question about this keymap feel free to shoot me a message on reddit! -*/ - -#include "keymap_common.h" -#include "keymap_extras/keymap_german.h" -#include "backlight.h" -#include "debug.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Colemak - * ,-----------------------------------------------------------------------. - * | Esc | q | w | f | p | g | j | l | u | y | ; | - | - * |-----------------------------------------------------------------------| - * | BS | a | r | s | t | d | h | n | e | i | o | ' | - * |-----------------------------------------------------------------------| - * | SFT | z | x | c | v | b | k | m | , | . | / | Ent | - * |-----------------------------------------------------------------------| - * | CTL | GUI | Tab | ALT |Lower| Space |Raise|Left |Down | Up |Right| - * `-----------------------------------------------------------------------' - */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Z, DE_SCLN, DE_MINS}, - {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, DE_QUOT}, - {M(0), KC_Y, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, DE_COMM, DE_DOT, DE_SLSH, KC_ENT}, - {KC_LCTL, KC_LGUI, KC_TAB, KC_LALT, F(2), F(3), F(3), F(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[1] = { /* Symbols - * ,-----------------------------------------------------------------------. - * | | | | | | | | | | | : | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | " | - * |-----------------------------------------------------------------------| - * | | | | | | | | | < | > | ? | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------' - */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_DOT, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_DQOT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), DE_MORE, DE_QST, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[2] = { /* Raise - * ,-----------------------------------------------------------------------. - * | | Ä | | | | | | | Ü | Ö | |Game | - * |-----------------------------------------------------------------------| - * | Del | ä | | ß | | | | | ü | ö | |FVol+| - * |-----------------------------------------------------------------------| - * | | | | | | | | |Stop | Prv | Nxt |FVol-| - * |-----------------------------------------------------------------------| - * |LCTL |LGUI | Tab |LALT |Lower| Space | |Mute |Vol- |Vol+ | P/P | - * `-----------------------------------------------------------------------' - */ - {KC_NO, S(DE_AE), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, S(DE_UE), S(DE_OE), KC_NO, F(4)}, - {KC_DEL, DE_AE, KC_NO, DE_SS, KC_NO, KC_NO, KC_NO, KC_NO, DE_UE, DE_OE, KC_NO, RALT(KC_F12)}, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MSTP, KC_MPRV, KC_MNXT, RALT(KC_F11)}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* Lower - * ,-----------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | + | - * |-----------------------------------------------------------------------| - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | - * |-----------------------------------------------------------------------| - * | | | | | | [ | ] | { | } | € | | \ | Ent | - * |-----------------------------------------------------------------------| - * |LCTL |LGUI | Tab |LALT | | Space |Raise|Home |PgDn |PgUp | End | - * `-----------------------------------------------------------------------' - */ - {DE_TILD, DE_EXLM, DE_AT, DE_HASH, DE_DLR, DE_PERC, DE_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, DE_PLUS}, - {DE_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DE_EQL}, - {KC_NO, KC_NO, KC_NO, DE_PIPE, DE_LBRC, DE_RBRC, DE_LCBR, DE_RCBR, DE_EURO, KC_NO, DE_BSLS, KC_ENT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} -}, -[4] = { /* Function - * ,-----------------------------------------------------------------------. - * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | - * |-----------------------------------------------------------------------| - * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | - * |-----------------------------------------------------------------------| - * | | | | | | KP- | KP+ | | | | |Reset| - * |-----------------------------------------------------------------------| - * | |Light|BL DN|BL UP| | | | |Mute |Vol- |Vol+ | P/P | - * `-----------------------------------------------------------------------' - */ - {KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24}, - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_NO, KC_NO, KC_NO, RESET, KC_NO}, - {KC_NO, BL_TOGG, BL_DEC, BL_INC, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[5] = { /* Gaming - * ,-----------------------------------------------------------------------. - * | Buy | ESC | q | w | e | r | t | y | u | i | o | p | - * |-----------------------------------------------------------------------| - * | ENT | BS | a | s | d | f | g | h | j | k | l | ; | - * |-----------------------------------------------------------------------| - * | CTL | SFT | z | x | c | v | b | n | m | , | Up | / | - * |-----------------------------------------------------------------------| - * | | | Tab | ALT | | Space |CrJmp| GUI |Left |Down |Right| - * `-----------------------------------------------------------------------' - */ - {MO(6), KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, F(4)}, - {KC_ENT, KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_SCLN}, - {KC_LCTL, KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DE_DOT, KC_UP, DE_SLSH}, - {KC_NO, KC_NO, KC_TAB, KC_LALT, KC_NO, KC_SPC, KC_SPC, LCTL(KC_SPC), KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT} -}, -[6] = { /* Gaming - /* CS:GO buy binds - * ,-----------------------------------------------------------------------. - * | | | | | | | | | 7 | 8 | 9 | | - * |-----------------------------------------------------------------------| - * | BS | | | | | | | | 6 | 5 | 4 | End | - * |-----------------------------------------------------------------------| - * | CTL | SFT | | | | | | | 1 | 2 | 3 |Pgdn | - * |-----------------------------------------------------------------------| - * | | | Tab | ALT | | Space |CrJmp| | 0 | KP+ |PEnt | - * `-----------------------------------------------------------------------' - */ - {KC_TRNS, KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_P7, KC_P8, KC_P9, KC_NO}, - {KC_BSPC, KC_NO, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_P4, KC_P5, KC_P6, KC_END}, - {KC_LCTL, KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_K, KC_P1, KC_P2, KC_P3, KC_PGDN}, - {KC_NO, KC_NO, KC_TAB, KC_LALT, KC_NO, KC_SPC, KC_SPC, LCTL(KC_SPC), KC_NO, KC_P0, KC_PDOT, KC_PENT} -}, -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - [3] = ACTION_LAYER_TAP_KEY(4,KC_SPC), // to Function - [4] = ACTION_LAYER_TOGGLE(5), // toggle Gaming - [5] = ACTION_MODS_TAP_KEY(KC_LSFT, KC_CAPS), //Shift on press, Caps on tap -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: // M(0) - if (record->event.pressed) { - register_code(KC_LSFT); - layer_on(1); - } else { - layer_off(1); - unregister_code(KC_LSFT); - } - break; - case 1: // M(1) - if (record->event.pressed) { - unregister_code(KC_LSFT); - register_code(DE_MORE); - } else { - unregister_code(DE_MORE); - } - break; - } - return MACRO_NONE; - -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/lucas/lucas.c b/keyboard/planck/keymaps/lucas/lucas.c new file mode 100644 index 000000000..27672e1bb --- /dev/null +++ b/keyboard/planck/keymaps/lucas/lucas.c @@ -0,0 +1,163 @@ +/* +This is the keymap of /u/deepshitgoeshere! +Layer 1 exists so I can have the symbol positions of QWERTY while having my system in german. +The second layer has all the german umlauts I need and with capital and small letters on the +same layer there is no need to press shift+lower. +This keymap is made to work with software implemented QWERTZ. +The "Gaming" layer is mainly customized for CS:GO. +If you have any question about this keymap feel free to shoot me a message on reddit! +*/ + +#include "keymap_common.h" +#include "keymap_extras/keymap_german.h" +#include "backlight.h" +#include "debug.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Colemak + * ,-----------------------------------------------------------------------. + * | Esc | q | w | f | p | g | j | l | u | y | ; | - | + * |-----------------------------------------------------------------------| + * | BS | a | r | s | t | d | h | n | e | i | o | ' | + * |-----------------------------------------------------------------------| + * | SFT | z | x | c | v | b | k | m | , | . | / | Ent | + * |-----------------------------------------------------------------------| + * | CTL | GUI | Tab | ALT |Lower| Space |Raise|Left |Down | Up |Right| + * `-----------------------------------------------------------------------' + */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Z, DE_SCLN, DE_MINS}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, DE_QUOT}, + {M(0), KC_Y, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, DE_COMM, DE_DOT, DE_SLSH, KC_ENT}, + {KC_LCTL, KC_LGUI, KC_TAB, KC_LALT, F(2), F(3), F(3), F(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[1] = { /* Symbols + * ,-----------------------------------------------------------------------. + * | | | | | | | | | | | : | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | " | + * |-----------------------------------------------------------------------| + * | | | | | | | | | < | > | ? | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------' + */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_DOT, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_DQOT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(1), DE_MORE, DE_QST, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[2] = { /* Raise + * ,-----------------------------------------------------------------------. + * | | Ä | | | | | | | Ü | Ö | |Game | + * |-----------------------------------------------------------------------| + * | Del | ä | | ß | | | | | ü | ö | |FVol+| + * |-----------------------------------------------------------------------| + * | | | | | | | | |Stop | Prv | Nxt |FVol-| + * |-----------------------------------------------------------------------| + * |LCTL |LGUI | Tab |LALT |Lower| Space | |Mute |Vol- |Vol+ | P/P | + * `-----------------------------------------------------------------------' + */ + {KC_NO, S(DE_AE), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, S(DE_UE), S(DE_OE), KC_NO, F(4)}, + {KC_DEL, DE_AE, KC_NO, DE_SS, KC_NO, KC_NO, KC_NO, KC_NO, DE_UE, DE_OE, KC_NO, RALT(KC_F12)}, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MSTP, KC_MPRV, KC_MNXT, RALT(KC_F11)}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* Lower + * ,-----------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | + | + * |-----------------------------------------------------------------------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | + * |-----------------------------------------------------------------------| + * | | | | | | [ | ] | { | } | € | | \ | Ent | + * |-----------------------------------------------------------------------| + * |LCTL |LGUI | Tab |LALT | | Space |Raise|Home |PgDn |PgUp | End | + * `-----------------------------------------------------------------------' + */ + {DE_TILD, DE_EXLM, DE_AT, DE_HASH, DE_DLR, DE_PERC, DE_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, DE_PLUS}, + {DE_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DE_EQL}, + {KC_NO, KC_NO, KC_NO, DE_PIPE, DE_LBRC, DE_RBRC, DE_LCBR, DE_RCBR, DE_EURO, KC_NO, DE_BSLS, KC_ENT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} +}, +[4] = { /* Function + * ,-----------------------------------------------------------------------. + * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | + * |-----------------------------------------------------------------------| + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |-----------------------------------------------------------------------| + * | | | | | | KP- | KP+ | | | | |Reset| + * |-----------------------------------------------------------------------| + * | |Light|BL DN|BL UP| | | | |Mute |Vol- |Vol+ | P/P | + * `-----------------------------------------------------------------------' + */ + {KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_NO, KC_NO, KC_NO, RESET, KC_NO}, + {KC_NO, BL_TOGG, BL_DEC, BL_INC, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[5] = { /* Gaming + * ,-----------------------------------------------------------------------. + * | Buy | ESC | q | w | e | r | t | y | u | i | o | p | + * |-----------------------------------------------------------------------| + * | ENT | BS | a | s | d | f | g | h | j | k | l | ; | + * |-----------------------------------------------------------------------| + * | CTL | SFT | z | x | c | v | b | n | m | , | Up | / | + * |-----------------------------------------------------------------------| + * | | | Tab | ALT | | Space |CrJmp| GUI |Left |Down |Right| + * `-----------------------------------------------------------------------' + */ + {MO(6), KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, F(4)}, + {KC_ENT, KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_SCLN}, + {KC_LCTL, KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DE_DOT, KC_UP, DE_SLSH}, + {KC_NO, KC_NO, KC_TAB, KC_LALT, KC_NO, KC_SPC, KC_SPC, LCTL(KC_SPC), KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT} +}, +[6] = { /* Gaming + /* CS:GO buy binds + * ,-----------------------------------------------------------------------. + * | | | | | | | | | 7 | 8 | 9 | | + * |-----------------------------------------------------------------------| + * | BS | | | | | | | | 6 | 5 | 4 | End | + * |-----------------------------------------------------------------------| + * | CTL | SFT | | | | | | | 1 | 2 | 3 |Pgdn | + * |-----------------------------------------------------------------------| + * | | | Tab | ALT | | Space |CrJmp| | 0 | KP+ |PEnt | + * `-----------------------------------------------------------------------' + */ + {KC_TRNS, KC_NO, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_P7, KC_P8, KC_P9, KC_NO}, + {KC_BSPC, KC_NO, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_P4, KC_P5, KC_P6, KC_END}, + {KC_LCTL, KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_K, KC_P1, KC_P2, KC_P3, KC_PGDN}, + {KC_NO, KC_NO, KC_TAB, KC_LALT, KC_NO, KC_SPC, KC_SPC, LCTL(KC_SPC), KC_NO, KC_P0, KC_PDOT, KC_PENT} +}, +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + [3] = ACTION_LAYER_TAP_KEY(4,KC_SPC), // to Function + [4] = ACTION_LAYER_TOGGLE(5), // toggle Gaming + [5] = ACTION_MODS_TAP_KEY(KC_LSFT, KC_CAPS), //Shift on press, Caps on tap +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: // M(0) + if (record->event.pressed) { + register_code(KC_LSFT); + layer_on(1); + } else { + layer_off(1); + unregister_code(KC_LSFT); + } + break; + case 1: // M(1) + if (record->event.pressed) { + unregister_code(KC_LSFT); + register_code(DE_MORE); + } else { + unregister_code(DE_MORE); + } + break; + } + return MACRO_NONE; + +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/lukas.c b/keyboard/planck/keymaps/lukas.c deleted file mode 100644 index 6fd95378b..000000000 --- a/keyboard/planck/keymaps/lukas.c +++ /dev/null @@ -1,64 +0,0 @@ -#include "planck.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif - -// This simple keymap is optimized for xmonad users using super as their modifier key. -// M(1) makes it possible to change virtual screens and swap windows between them. - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -#define _QW 0 -#define _LW 1 -#define _RS 2 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {KC_LCTL, KC_LALT, KC_LGUI, M(1), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - }, - [_RS] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - }, - [_LW] = { /* LOWER */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - case 1: - if (record->event.pressed) { - register_code(KC_LGUI); - layer_on(_RS); - } else { - unregister_code(KC_LGUI); - layer_off(_RS); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/lukas/lukas.c b/keyboard/planck/keymaps/lukas/lukas.c new file mode 100644 index 000000000..6fd95378b --- /dev/null +++ b/keyboard/planck/keymaps/lukas/lukas.c @@ -0,0 +1,64 @@ +#include "planck.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +// This simple keymap is optimized for xmonad users using super as their modifier key. +// M(1) makes it possible to change virtual screens and swap windows between them. + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define _QW 0 +#define _LW 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, M(1), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + }, + [_LW] = { /* LOWER */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 1: + if (record->event.pressed) { + register_code(KC_LGUI); + layer_on(_RS); + } else { + unregister_code(KC_LGUI); + layer_off(_RS); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/max.c b/keyboard/planck/keymaps/max.c deleted file mode 100644 index 7fb29bc7a..000000000 --- a/keyboard/planck/keymaps/max.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, - {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, - {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TRNS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_BSLS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_TRNS}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_BSLS)}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/max/max.c b/keyboard/planck/keymaps/max/max.c new file mode 100644 index 000000000..7fb29bc7a --- /dev/null +++ b/keyboard/planck/keymaps/max/max.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, + {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, + {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_BSLS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_TRNS}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_BSLS)}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/mollat.c b/keyboard/planck/keymaps/mollat.c deleted file mode 100644 index e7c71efd4..000000000 --- a/keyboard/planck/keymaps/mollat.c +++ /dev/null @@ -1,149 +0,0 @@ -// -// This layout is based on the following needs: -// -// should be as close as possible to querty/us-international layout (using international/AltGr as o/s driver) -// added german umlauts at known places from de-layout -// all movement keys should be at known places from vi/bash (eg HJKL for cursor keys) -// Fn layer (at CapsLock place like the Pok3r does) for missing keys -// additional layer for tmux window switching -// -// This is work in Progress! If you have suggestions write me at github.com/mollat/qmk_firmware/ and check -// this fork for updates as I probably won't bother jack with my pull requests frequently. -// - -#include "planck.h" - -#define _QWERTY 0 -#define _HIGH 1 -#define _LOW 2 -#define _FN 3 -#define _TMUX 4 -#define _LCTL 5 -#define _MOUSE 6 -#define __________ KC_NO // just for easy reading - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[_QWERTY] = { /* Qwerty */ - { LT(_MOUSE, KC_ESC),KC_Q,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, - { LT(_FN, KC_TAB),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, - { __________, __________, KC_LGUI, KC_LALT, KC_LCTL,LT(_TMUX, KC_SPC),LT(_HIGH, KC_SPC),MO(_LOW),KC_RALT,KC_RGUI, __________, __________ } -}, - -// missing keys regarding to the form factor -// keeping the dot and comma for typing faster IP addresses and (german) float values -// putting the backslash on the slash's place -[_HIGH] = { - { KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS }, - { __________, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL }, - { __________, __________, __________, __________, __________, __________, __________, __________, KC_COMM, KC_DOT, KC_BSLS, LSFT(KC_BSLS)}, - { __________, __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________, __________ } -}, - -// classic Fn-Layer triggered with 'CapsLock-key' like on Pok3r -// SPC and ENT are doubled for using repeat (which I switched off, see https://github.com/tmk/tmk_keyboard/issues/287) -// '€' sign is on the '5' position as this is the usual AltGr place on the US Internation layout -// home/end at the 'a' and 'e' position like in bash -// ins at 'i' -// del besides backspace (had no better place for it because of the umlauts) -// pg-down at 'f' (forward in vi), pg-up at 'b' (back in 'vi') -// -[_FN] = { - { __________, __________, __________, KC_END, __________, __________, __________, __________, KC_INS, __________, KC_DEL, RALT(KC_Y) }, - { KC_TRNS, __________, RALT(KC_S), __________, KC_PGDN, RALT(KC_5), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, RALT(KC_P), RALT(KC_Q) }, - { __________, KC_HOME, __________, __________, __________, KC_PGUP, __________, __________, __________, __________, __________, KC_ENT }, - { RESET, __________, __________, __________, __________, KC_SPC, KC_SPC, __________, __________, __________, __________, __________ } -}, - -// function key layer and some shift + (missing key at the small form factor) -[_LOW] = { - { KC_TILD, __________, __________, __________, __________, __________, __________, __________, __________, KC_LCBR, KC_RCBR, KC_UNDS }, - { __________, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_LBRC, KC_RBRC, KC_PLUS }, - { __________, __________, __________, __________, __________, KC_F9, KC_F10, KC_F11, KC_F12, __________, __________, __________ }, - { __________, __________, __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________ } -}, - -// most macros will switch tmux screens -// two macros are for vi's save/quit at 'w' and 'q' -[_TMUX] = { - { __________, M(14), M(13), __________, __________, __________, __________, __________, __________, __________, M(11), __________ }, - { M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), __________, __________ }, - { __________, __________, __________, M(12), __________, __________, M(10), __________, __________, __________, __________, __________ }, - { __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________, __________, __________ } -}, - -// mouse movement can be improved (e.g. can't press hj at once), but I will use this seldom, so I stick with hjkl keys. -[_MOUSE] = { - { KC_TRNS, __________, __________, __________, __________, __________, __________, __________, __________, __________, __________, __________ }, - { __________, __________, __________, __________, KC_WH_D, __________, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, __________, __________ }, - { __________, __________, __________, __________, __________, KC_WH_U, __________, __________, __________, __________, __________, __________ }, - { __________, __________, __________, KC_ACL2, KC_ACL1, KC_ACL0, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, __________, __________, __________ } -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [_LCTL] = ACTION_MODS_TAP_KEY(KC_LCTL, M(12)), // does not work -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_0), END ); - break; - case 1: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_1), END ); - break; - case 2: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_2), END ); - break; - case 3: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_3), END ); - break; - case 4: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_4), END ); - break; - case 5: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_5), END ); - break; - case 6: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_6), END ); - break; - case 7: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_7), END ); - break; - case 8: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_8), END ); - break; - case 9: - // tmux last window - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_L), END ); - break; - // tmux next window - case 10: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_N), END ); - break; - // tmux previous window - case 11: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_P), END ); - break; - // tmux new window - case 12: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_C), END ); - break; - case 13: - // vi save document - return MACRODOWN( TYPE(KC_ESC), DOWN(KC_LSFT), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_W), TYPE(KC_ENT), END ); - break; - case 14: - // vi quit - return MACRODOWN( TYPE(KC_ESC), DOWN(KC_LSFT), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_Q), TYPE(KC_ENT), END ); - break; - // tmux press ctrl-b - case 15: - return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), END ); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/mollat/mollat.c b/keyboard/planck/keymaps/mollat/mollat.c new file mode 100644 index 000000000..e7c71efd4 --- /dev/null +++ b/keyboard/planck/keymaps/mollat/mollat.c @@ -0,0 +1,149 @@ +// +// This layout is based on the following needs: +// +// should be as close as possible to querty/us-international layout (using international/AltGr as o/s driver) +// added german umlauts at known places from de-layout +// all movement keys should be at known places from vi/bash (eg HJKL for cursor keys) +// Fn layer (at CapsLock place like the Pok3r does) for missing keys +// additional layer for tmux window switching +// +// This is work in Progress! If you have suggestions write me at github.com/mollat/qmk_firmware/ and check +// this fork for updates as I probably won't bother jack with my pull requests frequently. +// + +#include "planck.h" + +#define _QWERTY 0 +#define _HIGH 1 +#define _LOW 2 +#define _FN 3 +#define _TMUX 4 +#define _LCTL 5 +#define _MOUSE 6 +#define __________ KC_NO // just for easy reading + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = { /* Qwerty */ + { LT(_MOUSE, KC_ESC),KC_Q,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, + { LT(_FN, KC_TAB),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, + { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, + { __________, __________, KC_LGUI, KC_LALT, KC_LCTL,LT(_TMUX, KC_SPC),LT(_HIGH, KC_SPC),MO(_LOW),KC_RALT,KC_RGUI, __________, __________ } +}, + +// missing keys regarding to the form factor +// keeping the dot and comma for typing faster IP addresses and (german) float values +// putting the backslash on the slash's place +[_HIGH] = { + { KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS }, + { __________, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL }, + { __________, __________, __________, __________, __________, __________, __________, __________, KC_COMM, KC_DOT, KC_BSLS, LSFT(KC_BSLS)}, + { __________, __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________, __________ } +}, + +// classic Fn-Layer triggered with 'CapsLock-key' like on Pok3r +// SPC and ENT are doubled for using repeat (which I switched off, see https://github.com/tmk/tmk_keyboard/issues/287) +// '€' sign is on the '5' position as this is the usual AltGr place on the US Internation layout +// home/end at the 'a' and 'e' position like in bash +// ins at 'i' +// del besides backspace (had no better place for it because of the umlauts) +// pg-down at 'f' (forward in vi), pg-up at 'b' (back in 'vi') +// +[_FN] = { + { __________, __________, __________, KC_END, __________, __________, __________, __________, KC_INS, __________, KC_DEL, RALT(KC_Y) }, + { KC_TRNS, __________, RALT(KC_S), __________, KC_PGDN, RALT(KC_5), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, RALT(KC_P), RALT(KC_Q) }, + { __________, KC_HOME, __________, __________, __________, KC_PGUP, __________, __________, __________, __________, __________, KC_ENT }, + { RESET, __________, __________, __________, __________, KC_SPC, KC_SPC, __________, __________, __________, __________, __________ } +}, + +// function key layer and some shift + (missing key at the small form factor) +[_LOW] = { + { KC_TILD, __________, __________, __________, __________, __________, __________, __________, __________, KC_LCBR, KC_RCBR, KC_UNDS }, + { __________, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_LBRC, KC_RBRC, KC_PLUS }, + { __________, __________, __________, __________, __________, KC_F9, KC_F10, KC_F11, KC_F12, __________, __________, __________ }, + { __________, __________, __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________ } +}, + +// most macros will switch tmux screens +// two macros are for vi's save/quit at 'w' and 'q' +[_TMUX] = { + { __________, M(14), M(13), __________, __________, __________, __________, __________, __________, __________, M(11), __________ }, + { M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), __________, __________ }, + { __________, __________, __________, M(12), __________, __________, M(10), __________, __________, __________, __________, __________ }, + { __________, __________, __________, __________, __________, KC_TRNS, __________, __________, __________, __________, __________, __________ } +}, + +// mouse movement can be improved (e.g. can't press hj at once), but I will use this seldom, so I stick with hjkl keys. +[_MOUSE] = { + { KC_TRNS, __________, __________, __________, __________, __________, __________, __________, __________, __________, __________, __________ }, + { __________, __________, __________, __________, KC_WH_D, __________, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, __________, __________ }, + { __________, __________, __________, __________, __________, KC_WH_U, __________, __________, __________, __________, __________, __________ }, + { __________, __________, __________, KC_ACL2, KC_ACL1, KC_ACL0, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, __________, __________, __________ } +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [_LCTL] = ACTION_MODS_TAP_KEY(KC_LCTL, M(12)), // does not work +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_0), END ); + break; + case 1: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_1), END ); + break; + case 2: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_2), END ); + break; + case 3: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_3), END ); + break; + case 4: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_4), END ); + break; + case 5: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_5), END ); + break; + case 6: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_6), END ); + break; + case 7: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_7), END ); + break; + case 8: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_8), END ); + break; + case 9: + // tmux last window + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_L), END ); + break; + // tmux next window + case 10: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_N), END ); + break; + // tmux previous window + case 11: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_P), END ); + break; + // tmux new window + case 12: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), TYPE(KC_C), END ); + break; + case 13: + // vi save document + return MACRODOWN( TYPE(KC_ESC), DOWN(KC_LSFT), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_W), TYPE(KC_ENT), END ); + break; + case 14: + // vi quit + return MACRODOWN( TYPE(KC_ESC), DOWN(KC_LSFT), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_Q), TYPE(KC_ENT), END ); + break; + // tmux press ctrl-b + case 15: + return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_B), UP(KC_LCTL), END ); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/monkey.c b/keyboard/planck/keymaps/monkey.c deleted file mode 100644 index 21a2c146a..000000000 --- a/keyboard/planck/keymaps/monkey.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "keymap_common.h" -#include "backlight.h" -#include "debug.h" - -#define COLEMAK_LAYER 0 -#define QWERTY_LAYER 1 -#define LOWER_LAYER 2 -#define UPPER_LAYER 3 -#define SPACEFN_LAYER 4 -#define TENKEY_LAYER 5 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[COLEMAK_LAYER] = { /* Colemak */ - {KC_TAB, UNI(0x1961), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[QWERTY_LAYER] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[LOWER_LAYER] = { /* LOWER */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} -}, -[UPPER_LAYER] = { /* RAISE */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DELETE}, - {KC_CALC, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[SPACEFN_LAYER] = { /* SpaceFN */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS}, - {KC_TRNS, FUNC(3), FUNC(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[TENKEY_LAYER] = { /* TENKEY */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_BSPC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_NLCK}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_PDOT, KC_ENT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_KEY(LOWER_LAYER, KC_BSPC), // Tap for backspace, hold for LOWER - [2] = ACTION_LAYER_TAP_KEY(UPPER_LAYER, KC_ENT), // Tap for enter, hold for RAISE - - [3] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER), - [4] = ACTION_DEFAULT_LAYER_SET(QWERTY_LAYER), - [5] = ACTION_LAYER_TOGGLE(TENKEY_LAYER), - - [6] = ACTION_LAYER_TAP_KEY(SPACEFN_LAYER, KC_SPC), // Tap for space, hold for SpaceFN -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/monkey/monkey.c b/keyboard/planck/keymaps/monkey/monkey.c new file mode 100644 index 000000000..21a2c146a --- /dev/null +++ b/keyboard/planck/keymaps/monkey/monkey.c @@ -0,0 +1,76 @@ +#include "keymap_common.h" +#include "backlight.h" +#include "debug.h" + +#define COLEMAK_LAYER 0 +#define QWERTY_LAYER 1 +#define LOWER_LAYER 2 +#define UPPER_LAYER 3 +#define SPACEFN_LAYER 4 +#define TENKEY_LAYER 5 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[COLEMAK_LAYER] = { /* Colemak */ + {KC_TAB, UNI(0x1961), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[QWERTY_LAYER] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[LOWER_LAYER] = { /* LOWER */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} +}, +[UPPER_LAYER] = { /* RAISE */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DELETE}, + {KC_CALC, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[SPACEFN_LAYER] = { /* SpaceFN */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS}, + {KC_TRNS, FUNC(3), FUNC(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[TENKEY_LAYER] = { /* TENKEY */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_BSPC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_NLCK}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_PDOT, KC_ENT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_KEY(LOWER_LAYER, KC_BSPC), // Tap for backspace, hold for LOWER + [2] = ACTION_LAYER_TAP_KEY(UPPER_LAYER, KC_ENT), // Tap for enter, hold for RAISE + + [3] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER), + [4] = ACTION_DEFAULT_LAYER_SET(QWERTY_LAYER), + [5] = ACTION_LAYER_TOGGLE(TENKEY_LAYER), + + [6] = ACTION_LAYER_TAP_KEY(SPACEFN_LAYER, KC_SPC), // Tap for space, hold for SpaceFN +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/nico.c b/keyboard/planck/keymaps/nico.c deleted file mode 100644 index e81fd80a4..000000000 --- a/keyboard/planck/keymaps/nico.c +++ /dev/null @@ -1,69 +0,0 @@ -// This is the canonical layout file for the Quantum project. If you want to add another keyboard, -// this is the style you want to emulate. - -#include "planck.h" -#include "backlight.h" - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QW 0 -#define _CM 1 -#define _DV 2 -#define _LW 3 -#define _RS 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_CM] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_DV] = { /* Dvorak */ - {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, - {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_RS] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[_LW] = { /* LOWER */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_KEY(MO(_LW), KC_BSPC), // Tap for backspace, hold for LOWER - [2] = ACTION_LAYER_TAP_KEY(MO(_RS), KC_ENT), // Tap for enter, hold for RAISE -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/nico/nico.c b/keyboard/planck/keymaps/nico/nico.c new file mode 100644 index 000000000..e81fd80a4 --- /dev/null +++ b/keyboard/planck/keymaps/nico/nico.c @@ -0,0 +1,69 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "backlight.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_CM] = { /* Colemak */ + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_DV] = { /* Dvorak */ + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* LOWER */ + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_KEY(MO(_LW), KC_BSPC), // Tap for backspace, hold for LOWER + [2] = ACTION_LAYER_TAP_KEY(MO(_RS), KC_ENT), // Tap for enter, hold for RAISE +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/numpad.c b/keyboard/planck/keymaps/numpad.c deleted file mode 100644 index 7de4372ab..000000000 --- a/keyboard/planck/keymaps/numpad.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0}, - {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0} - // Space is repeated to accommadate for both spacebar wiring positions -} -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/numpad/numpad.c b/keyboard/planck/keymaps/numpad/numpad.c new file mode 100644 index 000000000..7de4372ab --- /dev/null +++ b/keyboard/planck/keymaps/numpad/numpad.c @@ -0,0 +1,26 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0}, + {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0} + // Space is repeated to accommadate for both spacebar wiring positions +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/tak3over.c b/keyboard/planck/keymaps/tak3over.c deleted file mode 100644 index 7d8243dfa..000000000 --- a/keyboard/planck/keymaps/tak3over.c +++ /dev/null @@ -1,130 +0,0 @@ -// This is the canonical layout file for the Quantum project. If you want to add another keyboard, -// this is the style you want to emulate. -// -//Dropped the Dvorak layer and added two my layer buttons. Both Raise and lower can be accessed from either side now. - -#include "planck.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" -#endif - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QW 0 -#define _CM 1 -#define _LW 2 -#define _RS 3 -#define _FN 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QW] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right - * `-----------------------------------------------------------------------------------' - */ -[_CM] = { - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | _ | + | { | } |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_RS] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | Reset| Ins | Home | PGUP |Colemk| Left | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Brite| Del | End | PGDN |Qwerty| Del | _ | + | { | } |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_LW] = { - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, RESET, KC_INS, KC_HOME, KC_PGUP, DF(_CM), KC_LEFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, M(0), KC_DEL, KC_END, KC_PGDN, DF(_QW), KC_DEL, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -/* Function - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | GUI | X | C | V | Z | Left | Down | Up |Right | Del | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |Shift | Ctrl | X | C | V | Z | Next | Mute | Vol- | Vol+ | Play |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_FN] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_RGUI, KC_X, KC_C, KC_V, KC_Z, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, KC_BSLS}, - {KC_TRNS, KC_RCTL, KC_X, KC_C, KC_V, KC_Z, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/tak3over/tak3over.c b/keyboard/planck/keymaps/tak3over/tak3over.c new file mode 100644 index 000000000..7d8243dfa --- /dev/null +++ b/keyboard/planck/keymaps/tak3over/tak3over.c @@ -0,0 +1,130 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. +// +//Dropped the Dvorak layer and added two my layer buttons. Both Raise and lower can be accessed from either side now. + +#include "planck.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QW 0 +#define _CM 1 +#define _LW 2 +#define _RS 3 +#define _FN 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QW] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right + * `-----------------------------------------------------------------------------------' + */ +[_CM] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | _ | + | { | } |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_RS] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | Reset| Ins | Home | PGUP |Colemk| Left | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Brite| Del | End | PGDN |Qwerty| Del | _ | + | { | } |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_LW] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TRNS, RESET, KC_INS, KC_HOME, KC_PGUP, DF(_CM), KC_LEFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, M(0), KC_DEL, KC_END, KC_PGDN, DF(_QW), KC_DEL, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +/* Function + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | GUI | X | C | V | Z | Left | Down | Up |Right | Del | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |Shift | Ctrl | X | C | V | Z | Next | Mute | Vol- | Vol+ | Play |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_FN] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TRNS, KC_RGUI, KC_X, KC_C, KC_V, KC_Z, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, KC_BSLS}, + {KC_TRNS, KC_RCTL, KC_X, KC_C, KC_V, KC_Z, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; -- cgit v1.3.1 From 2425fd295af80a8e8c4f962085bca4a61d2a00db Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 16 May 2016 23:08:16 -0400 Subject: fixes default planck keymap --- keyboard/planck/keymaps/default/keymap.c | 1 - 1 file changed, 1 deletion(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index 79bf62436..43f570532 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -261,7 +261,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) layer_off(_RAISE); layer_off(_LOWER); layer_off(_ADJUST); - layer_off(_MUSIC); layer_on(_PLOVER); if (!eeconfig_is_enabled()) { eeconfig_init(); -- cgit v1.3.1 From fe9b1482fd34a1c07afca0433e4bf5eb6229cf22 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 17 May 2016 22:17:23 -0400 Subject: adds KC_NUBS, KC_NUHS and shifted versions to default keymaps --- keyboard/planck/keymaps/default/keymap.c | 8 ++++---- keyboard/planck/keymaps/experimental/keymap.c | 8 ++++---- keyboard/preonic/keymaps/default/keymap.c | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index 43f570532..36d496416 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -99,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c index 2f8a0510a..4b9c15e08 100644 --- a/keyboard/planck/keymaps/experimental/keymap.c +++ b/keyboard/planck/keymaps/experimental/keymap.c @@ -99,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUHS, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index f808ab1ce..06e664713 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -101,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -110,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -- cgit v1.3.1 From b732b79b49b098dba8e14493c745075f336747d8 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 18 May 2016 23:47:16 -0400 Subject: adapts unicode to quantum.c (#333) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Unicode to have unicode input you need to: - set your OS input method to UNICODE if needed - enable unicode in your makefile - copy the action_function from keyboard/planck/keymaps/unicode/unicode.c to your keymap.c set the target OS method in your keymap.c: void matrix_init_user() { set_unicode_mode(UC_OSX); } you can then switch when you want with: set_unicode_mode(UC_OSX); set_unicode_mode(UC_LNX); set_unicode_mode(UC_WIN); put some unicode codes in your keymap like so: UC(0x0061) I did change the bit mask in quantum/keymap_common.c and .h I’m afraid we will need uint32 to get a total support for all unicode tables or relocate the handler as @mbarkhau did. * rearranges keycode values, hooks-up unicode * removes extra lalt ref * adds unicode shortcuts and example --- keyboard/planck/keymaps/unicode/keymap.c | 326 ++++++++++++++++++++++++++++ keyboard/planck/keymaps/unicode/makefile.mk | 1 + quantum/keymap_common.c | 26 +-- quantum/keymap_common.h | 76 +++---- quantum/keymap_unicode.c | 61 ------ quantum/quantum.c | 79 ++++++- quantum/quantum.h | 44 ++-- quantum/quantum.mk | 4 - quantum/unicode.h | 128 +++++++++++ tmk_core/common.mk | 4 + 10 files changed, 609 insertions(+), 140 deletions(-) create mode 100644 keyboard/planck/keymaps/unicode/keymap.c create mode 100644 keyboard/planck/keymaps/unicode/makefile.mk delete mode 100644 quantum/keymap_unicode.c create mode 100644 quantum/unicode.h (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/unicode/keymap.c b/keyboard/planck/keymaps/unicode/keymap.c new file mode 100644 index 000000000..d73e7e09d --- /dev/null +++ b/keyboard/planck/keymaps/unicode/keymap.c @@ -0,0 +1,326 @@ +/* + Copyright + 2015 Jack Humbert + 2016 Francois Marlier + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + For more info on how this works per OS, see here + https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input +*/ + + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define PLOVER M(12) +#define EXT_PLV M(13) +#define TOG_OUT M(14) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, UC_q, UC_w, UC_f, UC_p, UC_g, UC_j, UC_l, UC_u, UC_y, UC_SCLN, UC_BSPC}, + {KC_ESC, UC_a, UC_r, UC_s, UC_t, UC_d, UC_h, UC_n, UC_e, UC_i, UC_o, UC_QUOT}, + {KC_LSFT, UC_z, UC_x, UC_c, UC_v, UC_b, UC_k, UC_m, UC_COMM, UC_DOT, UC_SLSH, KC_ENT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {TOG_OUT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {440.0*pow(2.0,(31)/12.0), 12}, + {440.0*pow(2.0,(28)/12.0), 8}, + {440.0*pow(2.0,(19)/12.0), 8}, + {440.0*pow(2.0,(24)/12.0), 8}, + {440.0*pow(2.0,(28)/12.0), 20} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 12: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + break; + case 13: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + break; + case 14: + if (record->event.pressed) { + return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END ); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} +#endif + + diff --git a/keyboard/planck/keymaps/unicode/makefile.mk b/keyboard/planck/keymaps/unicode/makefile.mk new file mode 100644 index 000000000..9b27b08be --- /dev/null +++ b/keyboard/planck/keymaps/unicode/makefile.mk @@ -0,0 +1 @@ +UNICODE_ENABLE = yes # Unicode diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 2aae13e67..1d9ab2e05 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -31,7 +31,6 @@ along with this program. If not, see . #include "keymap_midi.h" #endif - extern keymap_config_t keymap_config; #include @@ -154,20 +153,22 @@ static action_t keycode_to_action(uint16_t keycode) case KC_TRNS: action.code = ACTION_TRANSPARENT; break; - case 0x0100 ... 0x1FFF: ; + case LCTL(0) ... 0x1FFF: ; // Has a modifier // Split it up action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key break; - case 0x2000 ... 0x2FFF: + case FUNC(0) ... FUNC(0xFFF): ; // Is a shortcut for function layer, pull last 12bits // This means we have 4,096 FN macros at our disposal return keymap_func_to_action(keycode & 0xFFF); break; - case 0x3000 ... 0x3FFF: ; - // When the code starts with 3, it's an action macro. + case M(0) ... M(0xFF): action.code = ACTION_MACRO(keycode & 0xFF); break; + case LT(0, 0) ... LT(0xFF, 0xF): + action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + break; #ifdef BACKLIGHT_ENABLE case BL_0 ... BL_15: action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); @@ -201,7 +202,7 @@ static action_t keycode_to_action(uint16_t keycode) print("\nDEBUG: enabled.\n"); debug_enable = true; break; - case 0x5002 ... 0x50FF: + case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: // MAGIC actions (BOOTMAGIC without the boot) if (!eeconfig_is_enabled()) { eeconfig_init(); @@ -251,7 +252,7 @@ static action_t keycode_to_action(uint16_t keycode) } eeconfig_update_keymap(keymap_config.raw); break; - case 0x5100 ... 0x56FF: ; + case TO(0, 1) ... OSM(0xFF): ; // Layer movement shortcuts // See .h to see constraints/usage int type = (keycode >> 0x8) & 0xF; @@ -282,18 +283,9 @@ static action_t keycode_to_action(uint16_t keycode) action.code = ACTION_MODS_ONESHOT(mod); } break; - case 0x7000 ... 0x7FFF: + case MT(0, 0) ... MT(0xF, 0xFF): action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); break; - case 0x8000 ... 0x8FFF: - action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); - break; - #ifdef UNICODE_ENABLE - case 0x8000000 ... 0x8FFFFFF: - uint16_t unicode = keycode & ~(0x8000); - action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8); - break; - #endif default: action.code = ACTION_NO; break; diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 1cbe8c61c..91d5c09c1 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -163,38 +163,13 @@ extern const uint16_t fn_actions[]; #define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE) -// These affect the backlight (if your keyboard has one). -// We don't need to comment them out if your keyboard doesn't have a backlight, -// since they don't take up any space. -#define BL_ON 0x4009 -#define BL_OFF 0x4000 -#define BL_0 0x4000 -#define BL_1 0x4001 -#define BL_2 0x4002 -#define BL_3 0x4003 -#define BL_4 0x4004 -#define BL_5 0x4005 -#define BL_6 0x4006 -#define BL_7 0x4007 -#define BL_8 0x4008 -#define BL_9 0x4009 -#define BL_10 0x400A -#define BL_11 0x400B -#define BL_12 0x400C -#define BL_13 0x400D -#define BL_14 0x400E -#define BL_15 0x400F -#define BL_DEC 0x4010 -#define BL_INC 0x4011 -#define BL_TOGG 0x4012 -#define BL_STEP 0x4013 +// 0x3100+ is free + +// L-ayer, T-ap - 256 keycode max, 16 layer max +#define LT(layer, kc) (kc | 0x4000 | ((layer & 0xF) << 8)) #define RESET 0x5000 #define DEBUG 0x5001 -#define KC_LEAD 0x5014 - - - // MAGIC keycodes #define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002 @@ -239,6 +214,32 @@ extern const uint16_t fn_actions[]; #define MI_ON 0x5028 #define MI_OFF 0x5029 +// These affect the backlight (if your keyboard has one). +// We don't need to comment them out if your keyboard doesn't have a backlight, +// since they don't take up any space. +#define BL_ON 0x5079 +#define BL_OFF 0x5070 +#define BL_0 0x5070 +#define BL_1 0x5071 +#define BL_2 0x5072 +#define BL_3 0x5073 +#define BL_4 0x5074 +#define BL_5 0x5075 +#define BL_6 0x5076 +#define BL_7 0x5077 +#define BL_8 0x5078 +#define BL_9 0x5079 +#define BL_10 0x507A +#define BL_11 0x507B +#define BL_12 0x507C +#define BL_13 0x507D +#define BL_14 0x507E +#define BL_15 0x507F +#define BL_DEC 0x5080 +#define BL_INC 0x5081 +#define BL_TOGG 0x5082 +#define BL_STEP 0x5083 + // GOTO layer - 16 layers max // when: // ON_PRESS = 1 @@ -261,6 +262,8 @@ extern const uint16_t fn_actions[]; // One-shot mod #define OSM(layer) (layer | 0x5600) +// chording is currently at 0x57xx + // M-od, T-ap - 256 keycode max #define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8)) #define CTL_T(kc) MT(0x1, kc) @@ -276,14 +279,13 @@ extern const uint16_t fn_actions[]; #define KC_HYPR HYPR(KC_NO) #define KC_MEH MEH(KC_NO) -// L-ayer, T-ap - 256 keycode max, 16 layer max -#define LT(layer, kc) (kc | 0x8000 | ((layer & 0xF) << 8)) - -// For sending unicode codes. -// You may not send codes over 1FFF -- this supports most of UTF8. -// To have a key that sends out Œ, go UC(0x0152) -#define UNICODE(n) (n | 0x8000) -#define UC(n) UNICODE(n) +#ifdef UNICODE_ENABLE + // For sending unicode codes. + // You may not send codes over 7FFF -- this supports most of UTF8. + // To have a key that sends out Œ, go UC(0x0152) + #define UNICODE(n) (n | 0x8000) + #define UC(n) UNICODE(n) +#endif // For tri-layer void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); diff --git a/quantum/keymap_unicode.c b/quantum/keymap_unicode.c deleted file mode 100644 index a44965e61..000000000 --- a/quantum/keymap_unicode.c +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "keymap_common.h" - -uint16_t hextokeycode(int hex) { - if (hex == 0x0) { - return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - - // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input - - if (record->event.pressed) { - uint16_t unicode = (opt << 8) | id; - register_code(KC_LALT); - - register_code(hextokeycode((unicode & 0xF000) >> 12)); - unregister_code(hextokeycode((unicode & 0xF000) >> 12)); - register_code(hextokeycode((unicode & 0x0F00) >> 8)); - unregister_code(hextokeycode((unicode & 0x0F00) >> 8)); - register_code(hextokeycode((unicode & 0x00F0) >> 4)); - unregister_code(hextokeycode((unicode & 0x00F0) >> 4)); - register_code(hextokeycode((unicode & 0x000F))); - unregister_code(hextokeycode((unicode & 0x000F))); - - /* Test 'a' */ - // register_code(hextokeycode(0x0)); - // unregister_code(hextokeycode(0x0)); - // register_code(hextokeycode(0x0)); - // unregister_code(hextokeycode(0x0)); - // register_code(hextokeycode(0x6)); - // unregister_code(hextokeycode(0x6)); - // register_code(hextokeycode(0x1)); - // unregister_code(hextokeycode(0x1)); - - unregister_code(KC_LALT); - } - return; -} \ No newline at end of file diff --git a/quantum/quantum.c b/quantum/quantum.c index e4d7b9185..1e91ac04a 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -23,6 +23,18 @@ int offset = 7; #ifdef AUDIO_ENABLE bool music_activated = false; + float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + + // music sequencer + static bool music_sequence_recording = false; + static bool music_sequence_playing = false; + static float music_sequence[16] = {0}; + static uint8_t music_sequence_count = 0; + static uint8_t music_sequence_position = 0; + + static uint16_t music_sequence_timer = 0; + static uint16_t music_sequence_interval = 100; + #endif #ifdef MIDI_ENABLE @@ -44,6 +56,10 @@ uint8_t chord_keys[CHORDING_MAX] = {0}; uint8_t chord_key_count = 0; uint8_t chord_key_down = 0; +#ifdef UNICODE_ENABLE + static uint8_t input_mode; +#endif + bool keys_chord(uint8_t keys[]) { uint8_t keys_size = sizeof(keys)/sizeof(keys[0]); bool pass = true; @@ -66,14 +82,25 @@ bool keys_chord(uint8_t keys[]) { return (pass && (in == keys_size)); } -static bool music_sequence_recording = false; -static bool music_sequence_playing = false; -static float music_sequence[16] = {0}; -static uint8_t music_sequence_count = 0; -static uint8_t music_sequence_position = 0; +#ifdef UNICODE_ENABLE + +uint16_t hex_to_keycode(uint8_t hex) +{ + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +void set_unicode_mode(uint8_t os_target) +{ + input_mode = os_target; +} -static uint16_t music_sequence_timer = 0; -static uint16_t music_sequence_interval = 100; +#endif bool process_record_quantum(keyrecord_t *record) { @@ -347,6 +374,44 @@ bool process_record_quantum(keyrecord_t *record) { #endif +#ifdef UNICODE_ENABLE + + if (keycode > UNICODE(0) && record->event.pressed) { + uint16_t unicode = keycode & 0x7FFF; + switch(input_mode) { + case UC_OSX: + register_code(KC_LALT); + break; + case UC_LNX: + register_code(KC_LCTL); + register_code(KC_LSFT); + register_code(KC_U); + unregister_code(KC_U); + break; + case UC_WIN: + register_code(KC_LALT); + register_code(KC_PPLS); + unregister_code(KC_PPLS); + break; + } + for(int i = 3; i >= 0; i--) { + uint8_t digit = ((unicode >> (i*4)) & 0xF); + register_code(hex_to_keycode(digit)); + unregister_code(hex_to_keycode(digit)); + } + switch(input_mode) { + case UC_OSX: + case UC_WIN: + unregister_code(KC_LALT); + break; + case UC_LNX: + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + } + } + +#endif return process_action_kb(record); } diff --git a/quantum/quantum.h b/quantum/quantum.h index f4d8f09d4..d4da77289 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -13,9 +13,12 @@ #include "audio.h" #endif #ifdef MIDI_ENABLE - // #include #include #endif +#ifdef UNICODE_ENABLE + #include "unicode.h" +#endif + #include "action_layer.h" #include "eeconfig.h" #include @@ -27,24 +30,37 @@ extern uint32_t default_layer_state; extern uint32_t layer_state; #endif -bool music_activated; +#ifdef AUDIO_ENABLE + bool music_activated; +#endif -void matrix_init_kb(void); -void matrix_scan_kb(void); -bool process_action_kb(keyrecord_t *record); +#ifdef UNICODE_ENABLE + #define UC_OSX 0 + #define UC_LNX 1 + #define UC_WIN 2 + #define UC_BSD 3 -void leader_start(void); -void leader_end(void); + void set_unicode_input_mode(uint8_t os_target); +#endif + +#ifndef DISABLE_LEADER + void leader_start(void); + void leader_end(void); + + #ifndef LEADER_TIMEOUT + #define LEADER_TIMEOUT 200 + #endif + #define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0) + #define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0) + #define SEQ_THREE_KEYS(key1, key2, key3) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == (key3)) -#ifndef LEADER_TIMEOUT - #define LEADER_TIMEOUT 200 + #define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size + #define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) #endif -#define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0) -#define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0) -#define SEQ_THREE_KEYS(key1, key2, key3) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == (key3)) -#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size -#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) +void matrix_init_kb(void); +void matrix_scan_kb(void); +bool process_action_kb(keyrecord_t *record); bool is_music_on(void); void music_toggle(void); diff --git a/quantum/quantum.mk b/quantum/quantum.mk index e7ccfd659..c099d6793 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -34,10 +34,6 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/luts.c endif -ifeq ($(strip $(UNICODE_ENABLE)), yes) - SRC += $(QUANTUM_DIR)/keymap_unicode.c -endif - ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) SRC += $(QUANTUM_DIR)/light_ws2812.c SRC += $(QUANTUM_DIR)/rgblight.c diff --git a/quantum/unicode.h b/quantum/unicode.h new file mode 100644 index 000000000..756ec8bc3 --- /dev/null +++ b/quantum/unicode.h @@ -0,0 +1,128 @@ +/* +Copyright 2016 Jack Humbert +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef UNICODE_H +#define UNICODE_H + +#include "quantum.h" +#include + +#define UC_BSPC UC(0x0008) + +#define UC_SPC UC(0x0020) + +#define UC_EXLM UC(0x0021) +#define UC_DQUT UC(0x0022) +#define UC_HASH UC(0x0023) +#define UC_DLR UC(0x0024) +#define UC_PERC UC(0x0025) +#define UC_AMPR UC(0x0026) +#define UC_QUOT UC(0x0027) +#define UC_LPRN UC(0x0028) +#define UC_RPRN UC(0x0029) +#define UC_ASTR UC(0x002A) +#define UC_PLUS UC(0x002B) +#define UC_COMM UC(0x002C) +#define UC_DASH UC(0x002D) +#define UC_DOT UC(0x002E) +#define UC_SLSH UC(0x002F) + +#define UC_0 UC(0x0030) +#define UC_1 UC(0x0031) +#define UC_2 UC(0x0032) +#define UC_3 UC(0x0033) +#define UC_4 UC(0x0034) +#define UC_5 UC(0x0035) +#define UC_6 UC(0x0036) +#define UC_7 UC(0x0037) +#define UC_8 UC(0x0038) +#define UC_9 UC(0x0039) + +#define UC_COLN UC(0x003A) +#define UC_SCLN UC(0x003B) +#define UC_LT UC(0x003C) +#define UC_EQL UC(0x003D) +#define UC_GT UC(0x003E) +#define UC_QUES UC(0x003F) +#define UC_AT UC(0x0040) + +#define UC_A UC(0x0041) +#define UC_B UC(0x0042) +#define UC_C UC(0x0043) +#define UC_D UC(0x0044) +#define UC_E UC(0x0045) +#define UC_F UC(0x0046) +#define UC_G UC(0x0047) +#define UC_H UC(0x0048) +#define UC_I UC(0x0049) +#define UC_J UC(0x004A) +#define UC_K UC(0x004B) +#define UC_L UC(0x004C) +#define UC_M UC(0x004D) +#define UC_N UC(0x004E) +#define UC_O UC(0x004F) +#define UC_P UC(0x0050) +#define UC_Q UC(0x0051) +#define UC_R UC(0x0052) +#define UC_S UC(0x0053) +#define UC_T UC(0x0054) +#define UC_U UC(0x0055) +#define UC_V UC(0x0056) +#define UC_W UC(0x0057) +#define UC_X UC(0x0058) +#define UC_Y UC(0x0059) +#define UC_Z UC(0x005A) + +#define UC_LBRC UC(0x005B) +#define UC_BSLS UC(0x005C) +#define UC_RBRC UC(0x005D) +#define UC_CIRM UC(0x005E) +#define UC_UNDR UC(0x005F) + +#define UC_GRV UC(0x0060) + +#define UC_a UC(0x0061) +#define UC_b UC(0x0062) +#define UC_c UC(0x0063) +#define UC_d UC(0x0064) +#define UC_e UC(0x0065) +#define UC_f UC(0x0066) +#define UC_g UC(0x0067) +#define UC_h UC(0x0068) +#define UC_i UC(0x0069) +#define UC_j UC(0x006A) +#define UC_k UC(0x006B) +#define UC_l UC(0x006C) +#define UC_m UC(0x006D) +#define UC_n UC(0x006E) +#define UC_o UC(0x006F) +#define UC_p UC(0x0070) +#define UC_q UC(0x0071) +#define UC_r UC(0x0072) +#define UC_s UC(0x0073) +#define UC_t UC(0x0074) +#define UC_u UC(0x0075) +#define UC_v UC(0x0076) +#define UC_w UC(0x0077) +#define UC_x UC(0x0078) +#define UC_y UC(0x0079) +#define UC_z UC(0x007A) + +#define UC_LCBR UC(0x007B) +#define UC_PIPE UC(0x007C) +#define UC_RCBR UC(0x007D) +#define UC_TILD UC(0x007E) +#define UC_DEL UC(0x007F) + +#endif \ No newline at end of file diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 9cb2eb8ec..b5d7e39dd 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -60,6 +60,10 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE endif +ifeq ($(strip $(UNICODE_ENABLE)), yes) + OPT_DEFS += -DUNICODE_ENABLE +endif + ifeq ($(strip $(USB_6KRO_ENABLE)), yes) OPT_DEFS += -DUSB_6KRO_ENABLE endif -- cgit v1.3.1 From d66aa0abf96b5e887250cf0a7fa5e575f18c5a91 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 20 May 2016 17:14:08 +0200 Subject: adds petereichinger's planck keymap (#340) * Add custom keymap * A little readme and remove old layout comments --- keyboard/planck/keymaps/pete/README.md | 14 ++ keyboard/planck/keymaps/pete/keymap.c | 223 +++++++++++++++++++++++++++++++ keyboard/planck/keymaps/pete/makefile.mk | 2 + 3 files changed, 239 insertions(+) create mode 100644 keyboard/planck/keymaps/pete/README.md create mode 100644 keyboard/planck/keymaps/pete/keymap.c create mode 100644 keyboard/planck/keymaps/pete/makefile.mk (limited to 'keyboard/planck') diff --git a/keyboard/planck/keymaps/pete/README.md b/keyboard/planck/keymaps/pete/README.md new file mode 100644 index 000000000..3cf594f3a --- /dev/null +++ b/keyboard/planck/keymaps/pete/README.md @@ -0,0 +1,14 @@ +# Planck Layout by Pete + +This layout is based on the default layout but uses a FN key in the bottom left corner instead of the shift / backlight key. +On the FN layer you can do the following things + +- Step through back light +- Put a mac to sleep +- The Fxx keys in a block to click with the right hand +- The delete key in the upper right corner +- Quick access to screenshot functions +- Control volume and media playback +- Home/PgDown/PgUp/End buttons where the arrow keys are + +Pressing the lower and raise buttons allows to reset and change from QWERT to Colemak or Dvorak. diff --git a/keyboard/planck/keymaps/pete/keymap.c b/keyboard/planck/keymaps/pete/keymap.c new file mode 100644 index 000000000..57cab65a3 --- /dev/null +++ b/keyboard/planck/keymaps/pete/keymap.c @@ -0,0 +1,223 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _FCT 5 +#define _SETUP 6 +#define _MICMUTE 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define FCT M(_FCT) +#define MICMUTE M(_MICMUTE) + +#define MACPRNT LGUI(LSFT(KC_3)) +#define MACPRNT2 LGUI(LSFT(KC_4)) +#define CYCLWIN LGUI(KC_GRV) +#define MAC_SLEP LSFT(LCTL(KC_POWER)) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {_______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {_______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +[_FCT] = { /* Function */ + {BL_STEP, MAC_SLEP,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_DELT}, + {_______, MICMUTE, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, MACPRNT}, + {_______, CYCLWIN, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, MACPRNT2}, + {FCT, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDOWN,KC_PGUP,KC_END } +}, + +[_SETUP] = { /* Setup */ + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {440.0*pow(2.0,(31)/12.0), 12}, + {440.0*pow(2.0,(28)/12.0), 8}, + {440.0*pow(2.0,(19)/12.0), 8}, + {440.0*pow(2.0,(24)/12.0), 8}, + {440.0*pow(2.0,(28)/12.0), 20} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _SETUP); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _SETUP); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _SETUP); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _SETUP); + } + break; + case _FCT: + if (record->event.pressed) { + layer_on(_FCT); + } else { + layer_off(_FCT); + } + break; + case _MICMUTE: + if (record->event.pressed) { + register_code(KC_RSFT); + register_code(KC_RCTL); + register_code(KC_RALT); + register_code(KC_RGUI); + } else { + unregister_code(KC_RSFT); + unregister_code(KC_RCTL); + unregister_code(KC_RALT); + unregister_code(KC_RGUI); + } + break; + + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +uint8_t starting_note = 0x0C; +int offset = 0; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} +#endif diff --git a/keyboard/planck/keymaps/pete/makefile.mk b/keyboard/planck/keymaps/pete/makefile.mk new file mode 100644 index 000000000..812264cb3 --- /dev/null +++ b/keyboard/planck/keymaps/pete/makefile.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = no +NKRO_ENABLE = yes \ No newline at end of file -- cgit v1.3.1 From aaa758f1d3f97dda39879f2b055ad2da9680adfe Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Mon, 23 May 2016 20:42:21 -0700 Subject: Optimize matrix scanning (#343) --- HAND_WIRE.md | 26 ++- keyboard/Bantam44/config.h | 7 +- keyboard/atomic/config.h | 17 +- keyboard/atomic/keymaps/pvc/config.h | 7 +- keyboard/atreus/config.h | 12 +- keyboard/clueboard1/config.h | 25 ++- keyboard/clueboard2/config.h | 19 +- keyboard/cluepad/config.h | 19 +- keyboard/gh60_rev_c/config.h | 17 +- keyboard/jd45/config.h | 9 +- keyboard/planck/config.h | 7 +- keyboard/planck/keymaps/pvc/config.h | 7 +- keyboard/preonic/config.h | 7 +- keyboard/retro_refit/config.h | 9 +- quantum/config_common.h | 125 ++++++------ quantum/matrix.c | 369 +++++++++++++---------------------- quantum/template/config.h | 17 +- tmk_core/common/avr/suspend.c | 5 +- tmk_core/common/bootmagic.c | 14 +- tmk_core/common/keyboard.c | 134 ++++++------- tmk_core/common/matrix.h | 61 +++--- 21 files changed, 408 insertions(+), 505 deletions(-) (limited to 'keyboard/planck') diff --git a/HAND_WIRE.md b/HAND_WIRE.md index 3f4d75b27..0b7367eda 100644 --- a/HAND_WIRE.md +++ b/HAND_WIRE.md @@ -51,11 +51,11 @@ A problem arises when you start pressing more than one key at a time. Looking at x row0 ---(-+-0)---(-+-1) x row0 ---(-+-0)---(-+-1) | | | | x row1 ---(key2)---(-+-3) x row1 ---(key2)---(-+-3) - + Remember that this ^ is still connected to row1 The data we get from that is: - + col0: 0b11 col1: 0b11 │└row0 @@ -73,7 +73,7 @@ Which isn't accurate, since we only have 3 keys pressed down, not all 4. This be │ │ | │ (key2) (key3) (key2) (key3) ! ! ! ! - row1 ─────┴────────┘ row1 ─────┴────────┘ + row1 ─────┴────────┘ row1 ─────┴────────┘ In practical applications, the black line of the diode will be placed facing the row, and away from the keyswitch - the `!` in this case is the diode, where the gap represents the black line. A good way to remember this is to think of this symbol: `>|` @@ -89,10 +89,10 @@ Now when we press the three keys, invoking what would be a ghosting scenario: │ │ │ │ (key2) (┌─┘3) (key2) (┌─┘3) ! ! ! ! - row1 ─────┴────────┘ x row1 ─────┴────────┘ + row1 ─────┴────────┘ x row1 ─────┴────────┘ Things act as they should! Which will get us the following data: - + col0: 0b01 col1: 0b11 │└row0 @@ -106,7 +106,7 @@ The firmware can then use this correct data to detect what it should do, and eve When starting this, you should have all of your stabilisers and keyswitches already installed (and optionally keycaps). If you're using a Cherry-type stabiliser (plate-mounted only, obviously), you'll need to install that before your keyswitches. If you're using Costar ones, you can installed them afterwards. -To make things easier on yourself, make sure all of the keyswitches are oriented the same way (if they can be - not all layouts support this). Despite this, it's important to remember that the contacts on the keyswitches are completely symmetrical. We'll be using the keyswitch's left side contact for wiring the rows, and the right side one for wiring the columns. +To make things easier on yourself, make sure all of the keyswitches are oriented the same way (if they can be - not all layouts support this). Despite this, it's important to remember that the contacts on the keyswitches are completely symmetrical. We'll be using the keyswitch's left side contact for wiring the rows, and the right side one for wiring the columns. Get your soldering iron heated-up and collect the rest of the materials from the part list at the beginning of the guide. Place your keyboard so that the bottoms of the keyswitches are accessible - it may be a good idea to place it on a cloth to protect your keyswitches/keycaps. @@ -155,7 +155,7 @@ When all of the diodes are completely soldered, it's a good idea to quickly insp ### Soldering the columns -You'll have some options in the next process - it's a good idea to insulate the column wires (since the diodes aren't), but if you're careful enough, you can use exposed wires for the columns - it's not recommended, though. If you're using single-cored wire, stripping the plastic off of the whole wire and feeding it back on is probably the best option, but can be difficult depending on the size and materials. You'll want to leave parts of the wire exposed where you're going to be solder it onto the keyswitch. +You'll have some options in the next process - it's a good idea to insulate the column wires (since the diodes aren't), but if you're careful enough, you can use exposed wires for the columns - it's not recommended, though. If you're using single-cored wire, stripping the plastic off of the whole wire and feeding it back on is probably the best option, but can be difficult depending on the size and materials. You'll want to leave parts of the wire exposed where you're going to be solder it onto the keyswitch. If you're using stranded wire, it's probably easiest to just use a lot of small wires to connect each keyswitch along the column. It's possible to use one and melt through the insulation, but this isn't recommended, will produce even more harmful fumes, and can ruin your soldering iron. @@ -195,15 +195,13 @@ You'll want to navigate to the `keyboard//` folder by typing, like #### config.h -The first thing we're going to want to modify is the `config.h` file. On line 32 and 33, you'll see `MATRIX_ROWS` and `MATRIX_COLS` - set both these variables to however many rows and columns you have on your keyboard. - -On line 38 and 39 you'll see the `COLS` and `ROWS` definitions - this is where you'll enter the pins you used, in order (left-to-right when looking at the top of the keyboard, but right-to-left when looking at the bottom). +The first thing you're going to want to modify is the `config.h` file. Find `MATRIX_ROWS` and `MATRIX_COLS` and them to match the dimensions of your keyboard's matrix. -There are some other variables that you'll be able to modify (lines 23-29), but it's not necessary to do that now (or ever, really). +Farther down are `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`. Change their definitions to match how you wired up your matrix (looking from the top of the keyboard, the rows run top-to-bottom and the columns run left-to-right). Likewise, change the definition of `UNUSED_PINS` to match the pins you did not use (this will save power). #### \.h -The next file you'll want to look at is `.h`. You're going to want to rewrite the `KEYMAP` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix. +The next file you'll want to look at is `.h`. You're going to want to rewrite the `KEYMAP` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix. We'll dive into how this will work with the following example. Say we have a keyboard like this: @@ -230,7 +228,7 @@ The middle column is unused on the bottom row in this example. Our `KEYMAP` defi { \ { k00, k01, k02 }, \ { k10, KC_NO, k11 }, \ - } + } Notice how the top half is spaced to resemble our physical layout - this helps us understand which keys are associated with which columns. The bottom half uses the keycode `KC_NO` where there is no keyswitch wired in. It's easiest to keep the bottom half aligned in a grid to help us make sense of how the firmware actually sees the wiring. @@ -251,7 +249,7 @@ This would require our `KEYMAP` definition to look like this: { \ { k00, k01, k02 }, \ { k10, k11, KC_NO }, \ - } + } Notice how the `k11` and `KC_NO` switched places to represent the wiring, and the unused final column on the bottom row. Sometimes it'll make more sense to put a keyswitch on a particular column, but in the end, it won't matter, as long as all of them are accounted for. You can use this process to write out the `KEYMAP` for your entire keyboard - be sure to remember that your keyboard is actually backwards when looking at the underside of it. diff --git a/keyboard/Bantam44/config.h b/keyboard/Bantam44/config.h index 26d680704..a55f62999 100644 --- a/keyboard/Bantam44/config.h +++ b/keyboard/Bantam44/config.h @@ -35,8 +35,9 @@ along with this program. If not, see . // Planck PCB default pin-out // Change this to how you wired your keyboard // COLS: Left to right, ROWS: Top to bottom -#define COLS (int []){ B0, B1, B2, B3, B7, D0, B6, F7, F6, F5, F4, F1 } -#define ROWS (int []){ F0, D6, D4, D5 } +#define MATRIX_ROW_PINS { F0, D6, D4, D5 } +#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, B6, F7, F6, F5, F4, F1 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -48,7 +49,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/atomic/config.h b/keyboard/atomic/config.h index 1b34decf9..bf9550e94 100644 --- a/keyboard/atomic/config.h +++ b/keyboard/atomic/config.h @@ -41,15 +41,16 @@ along with this program. If not, see . * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * -*/ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } -#define ROWS (int []){ D0, D5, B5, B6, C6 } +*/ +#define MATRIX_ROW_PINS { D0, D5, B5, B6, C6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST @@ -62,17 +63,17 @@ along with this program. If not, see . /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* +/* * Force NKRO * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the * makefile for this to work.) * * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) * until the next keyboard reset. * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is * fully operational during normal computer usage. * * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) @@ -90,7 +91,7 @@ along with this program. If not, see . * the keyboard. They are best used in combination with the HID Listen program, * found here: https://www.pjrc.com/teensy/hid_listen.html * - * The options below allow the magic key functionality to be changed. This is + * The options below allow the magic key functionality to be changed. This is * useful if your keyboard/keypad is missing keys and you want magic key support. * */ diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h index 5e956286b..1473aac34 100644 --- a/keyboard/atomic/keymaps/pvc/config.h +++ b/keyboard/atomic/keymaps/pvc/config.h @@ -42,14 +42,15 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } -#define ROWS (int []){ D0, D5, B5, B6, B3 } +#define MATRIX_ROW_PINS { D0, D5, B5, B6, B3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST diff --git a/keyboard/atreus/config.h b/keyboard/atreus/config.h index 55d3b62b9..624d90188 100644 --- a/keyboard/atreus/config.h +++ b/keyboard/atreus/config.h @@ -36,11 +36,13 @@ along with this program. If not, see . // Change this to how you wired your keyboard // COLS: Left to right, ROWS: Top to bottom #if defined(ATREUS_ASTAR) - #define COLS (int []){ D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } - #define ROWS (int []){ D0, D1, D3, D2 } +# define MATRIX_ROW_PINS { D0, D1, D3, D2 } +# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +# define UNUSED_PINS #elif defined(ATREUS_TEENSY2) - #define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0} - #define ROWS (int []){ D0, D1, D2, D3 } +# define MATRIX_ROW_PINS { D0, D1, D2, D3 } +# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 } +# define UNUSED_PINS #endif /* COL2ROW or ROW2COL */ @@ -53,7 +55,7 @@ along with this program. If not, see . //#define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/clueboard1/config.h b/keyboard/clueboard1/config.h index 2b20c3873..16338ddb0 100644 --- a/keyboard/clueboard1/config.h +++ b/keyboard/clueboard1/config.h @@ -32,19 +32,18 @@ along with this program. If not, see . #define MATRIX_ROWS 5 #define MATRIX_COLS 16 -// COLS: Left to right, ROWS: Top to bottom - +// ROWS: Top to bottom, COLS: Left to right /* Column pin configuration - * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - * pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1 - */ -#define COLS (int []){ B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 } - - /* Row pin configuration - * row: 0 1 2 3 4 - * pin: D1 D0 D2 D5 D3 - */ -#define ROWS (int []){ D1, D0, D2, D5, D3 } +* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +* pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1 +*/ +#define MATRIX_COL_PINS { B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 } +/* Row pin configuration +* row: 0 1 2 3 4 +* pin: D1 D0 D2 D5 D3 +*/ +#define MATRIX_ROW_PINS { D1, D0, D2, D5, D3 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -53,7 +52,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/clueboard2/config.h b/keyboard/clueboard2/config.h index 04166c20f..2887519af 100644 --- a/keyboard/clueboard2/config.h +++ b/keyboard/clueboard2/config.h @@ -32,19 +32,18 @@ along with this program. If not, see . #define MATRIX_ROWS 10 #define MATRIX_COLS 8 -// COLS: Left to right, ROWS: Top to bottom - +// ROWS: Top to bottom, COLS: Left to right +/* Row pin configuration +* row: 0 1 2 3 4 5 6 7 8 9 +* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2 +*/ +#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 } /* Column pin configuration * col: 0 1 2 3 4 5 6 7 * pin: F0 F1 F4 F5 F6 F7 E6 B1 */ -#define COLS (int []){ F0, F1, F4, F5, F6, F7, E6, B1 } - - /* Row pin configuration - * row: 0 1 2 3 4 5 6 7 8 9 - * pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2 - */ -#define ROWS (int []){ B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 } +#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -53,7 +52,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/cluepad/config.h b/keyboard/cluepad/config.h index 5ed421a6e..0955e0f70 100644 --- a/keyboard/cluepad/config.h +++ b/keyboard/cluepad/config.h @@ -32,19 +32,18 @@ along with this program. If not, see . #define MATRIX_ROWS 5 #define MATRIX_COLS 4 -// COLS: Left to right, ROWS: Top to bottom - +// ROWS: Top to bottom, COLS: Left to right +/* Row pin configuration +* row: 0 1 2 3 4 +* pin: +*/ +#define MATRIX_ROW_PINS { B0, D3, D5, D4, D6 } /* Column pin configuration * col: 0 1 2 3 * pin: F4 E6 B1 D2 */ -#define COLS (int []){ F4, E6, B1, D2 } - - /* Row pin configuration - * row: 0 1 2 3 4 - * pin: - */ -#define ROWS (int []){ B0, D3, D5, D4, D6 } +#define MATRIX_COL_PINS { F4, E6, B1, D2 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -53,7 +52,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Number of backlighting levels */ #define BACKLIGHT_LEVELS 3 diff --git a/keyboard/gh60_rev_c/config.h b/keyboard/gh60_rev_c/config.h index 2fd8f5743..827c08d1b 100644 --- a/keyboard/gh60_rev_c/config.h +++ b/keyboard/gh60_rev_c/config.h @@ -41,15 +41,16 @@ along with this program. If not, see . * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * -*/ -#define COLS (int []){ F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } -#define ROWS (int []){ D0, D1, D2, D3, D5 } +*/ +#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST @@ -62,17 +63,17 @@ along with this program. If not, see . /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* +/* * Force NKRO * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the * makefile for this to work.) * * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) * until the next keyboard reset. * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is * fully operational during normal computer usage. * * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) @@ -90,7 +91,7 @@ along with this program. If not, see . * the keyboard. They are best used in combination with the HID Listen program, * found here: https://www.pjrc.com/teensy/hid_listen.html * - * The options below allow the magic key functionality to be changed. This is + * The options below allow the magic key functionality to be changed. This is * useful if your keyboard/keypad is missing keys and you want magic key support. * */ diff --git a/keyboard/jd45/config.h b/keyboard/jd45/config.h index 1b81fe32e..ffedb6a1a 100644 --- a/keyboard/jd45/config.h +++ b/keyboard/jd45/config.h @@ -30,11 +30,12 @@ along with this program. If not, see . /* key matrix size */ #define MATRIX_ROWS 4 -#define MATRIX_COLS 13 +#define MATRIX_COLS 13 /* Planck PCB default pin-out */ -#define COLS (int []){F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0} -#define ROWS (int []){F0, F1, F5, B4} +#define MATRIX_ROW_PINS { F0, F1, F5, B4 } +#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h index 7d64f0977..b64893108 100644 --- a/keyboard/planck/config.h +++ b/keyboard/planck/config.h @@ -33,8 +33,9 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D0, D5, B5, B6 } +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/planck/keymaps/pvc/config.h b/keyboard/planck/keymaps/pvc/config.h index d435cc795..b8960038a 100644 --- a/keyboard/planck/keymaps/pvc/config.h +++ b/keyboard/planck/keymaps/pvc/config.h @@ -33,8 +33,9 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D0, D5, B5, B6 } +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/preonic/config.h b/keyboard/preonic/config.h index bb9d29dab..e8d0e82fc 100644 --- a/keyboard/preonic/config.h +++ b/keyboard/preonic/config.h @@ -33,8 +33,9 @@ along with this program. If not, see . #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D2, D5, B5, B6, D3 } +#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/retro_refit/config.h b/keyboard/retro_refit/config.h index 05fceb92b..f2194e550 100644 --- a/keyboard/retro_refit/config.h +++ b/keyboard/retro_refit/config.h @@ -33,8 +33,9 @@ along with this program. If not, see . #define MATRIX_COLS 8 // See note in retro_refit.h for an explanation of how this matrix is wired up -#define COLS (int []){ B0, B1, B2, B3, D2, D3, C7, D5 } -#define ROWS (int []){ D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } +#define MATRIX_ROW_PINS { D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } +#define MATRIX_COL_PINS { B0, B1, B2, B3, D2, D3, C7, D5 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 0 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE @@ -119,4 +120,4 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#endif \ No newline at end of file +#endif diff --git a/quantum/config_common.h b/quantum/config_common.h index da53fce89..02f11d979 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -1,70 +1,74 @@ #ifndef CONFIG_DEFINITIONS_H #define CONFIG_DEFINITIONS_H -#define B0 0x20 -#define B1 0x21 -#define B2 0x22 -#define B3 0x23 -#define B4 0x24 -#define B5 0x25 -#define B6 0x26 -#define B7 0x27 -#define C0 0x30 -#define C1 0x31 -#define C2 0x32 -#define C3 0x33 -#define C4 0x34 -#define C5 0x35 -#define C6 0x36 -#define C7 0x37 -#define D0 0x40 -#define D1 0x41 -#define D2 0x42 -#define D3 0x43 -#define D4 0x44 -#define D5 0x45 -#define D6 0x46 -#define D7 0x47 -#define E0 0x50 -#define E1 0x51 -#define E2 0x52 -#define E3 0x53 -#define E4 0x54 -#define E5 0x55 -#define E6 0x56 -#define E7 0x57 -#define F0 0x60 -#define F1 0x61 -#define F2 0x62 -#define F3 0x63 -#define F4 0x64 -#define F5 0x65 -#define F6 0x66 -#define F7 0x67 - -#define COL2ROW 0x0 -#define ROW2COL 0x1 +/* diode directions */ +#define COL2ROW 0 +#define ROW2COL 1 +/* I/O pins */ +#define B0 { .input_addr = 3, .bit = 0 } +#define B1 { .input_addr = 3, .bit = 1 } +#define B2 { .input_addr = 3, .bit = 2 } +#define B3 { .input_addr = 3, .bit = 3 } +#define B4 { .input_addr = 3, .bit = 4 } +#define B5 { .input_addr = 3, .bit = 5 } +#define B6 { .input_addr = 3, .bit = 6 } +#define B7 { .input_addr = 3, .bit = 7 } +#define C0 { .input_addr = 6, .bit = 0 } +#define C1 { .input_addr = 6, .bit = 1 } +#define C2 { .input_addr = 6, .bit = 2 } +#define C3 { .input_addr = 6, .bit = 3 } +#define C4 { .input_addr = 6, .bit = 4 } +#define C5 { .input_addr = 6, .bit = 5 } +#define C6 { .input_addr = 6, .bit = 6 } +#define C7 { .input_addr = 6, .bit = 7 } +#define D0 { .input_addr = 9, .bit = 0 } +#define D1 { .input_addr = 9, .bit = 1 } +#define D2 { .input_addr = 9, .bit = 2 } +#define D3 { .input_addr = 9, .bit = 3 } +#define D4 { .input_addr = 9, .bit = 4 } +#define D5 { .input_addr = 9, .bit = 5 } +#define D6 { .input_addr = 9, .bit = 6 } +#define D7 { .input_addr = 9, .bit = 7 } +#define E0 { .input_addr = 0xC, .bit = 0 } +#define E1 { .input_addr = 0xC, .bit = 1 } +#define E2 { .input_addr = 0xC, .bit = 2 } +#define E3 { .input_addr = 0xC, .bit = 3 } +#define E4 { .input_addr = 0xC, .bit = 4 } +#define E5 { .input_addr = 0xC, .bit = 5 } +#define E6 { .input_addr = 0xC, .bit = 6 } +#define E7 { .input_addr = 0xC, .bit = 7 } +#define F0 { .input_addr = 0xF, .bit = 0 } +#define F1 { .input_addr = 0xF, .bit = 1 } +#define F2 { .input_addr = 0xF, .bit = 2 } +#define F3 { .input_addr = 0xF, .bit = 3 } +#define F4 { .input_addr = 0xF, .bit = 4 } +#define F5 { .input_addr = 0xF, .bit = 5 } +#define F6 { .input_addr = 0xF, .bit = 6 } +#define F7 { .input_addr = 0xF, .bit = 7 } +/* USART configuration */ #ifdef BLUETOOTH_ENABLE -#ifdef __AVR_ATmega32U4__ - #define SERIAL_UART_BAUD 9600 - #define SERIAL_UART_DATA UDR1 - #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1) - #define SERIAL_UART_RXD_VECT USART1_RX_vect - #define SERIAL_UART_TXD_READY (UCSR1A&(1<>8); /* baud rate */ \ - UCSR1B = (1<> 8; \ + /* enable TX */ \ + UCSR1B = _BV(TXEN1); \ + /* 8-bit data */ \ + UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ + sei(); \ + } while(0) +# else +# error "USART configuration is needed." #endif - // I'm fairly sure these aren't needed, but oh well - Jack /* @@ -113,4 +117,3 @@ #endif #endif - diff --git a/quantum/matrix.c b/quantum/matrix.c index cab39e117..22126aa7a 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -1,6 +1,6 @@ /* -Copyright 2012 Jun Wako -Generated by planckkeyboard.com (2014 Jack Humbert) +Copyright 2012 Jun Wako +Copyright 2014 Jack Humbert This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,300 +15,211 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ - -/* - * scan matrix - */ #include #include #include -#include +#include "wait.h" #include "print.h" #include "debug.h" #include "util.h" #include "matrix.h" -#ifndef DEBOUNCE -# define DEBOUNCE 10 +#ifdef MATRIX_HAS_GHOST +# error "The universal matrix.c file cannot be used for this keyboard." #endif -static uint8_t debouncing = DEBOUNCE; -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -#if DIODE_DIRECTION == ROW2COL - static matrix_row_t matrix_reversed[MATRIX_COLS]; - static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS]; +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 #endif - -#if MATRIX_COLS > 16 - #define SHIFTER 1UL +static const io_pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const io_pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +/* matrix state */ +#if DIODE_DIRECTION == COL2ROW +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t debouncing_matrix[MATRIX_ROWS]; #else - #define SHIFTER 1 +static matrix_col_t matrix[MATRIX_COLS]; +static matrix_col_t debouncing_matrix[MATRIX_COLS]; #endif +static int8_t debouncing_delay = -1; +#if DIODE_DIRECTION == COL2ROW +static void toggle_row(uint8_t row); static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); +#else +static void toggle_col(uint8_t col); +static matrix_col_t read_rows(void); +#endif __attribute__ ((weak)) void matrix_init_quantum(void) { - } __attribute__ ((weak)) void matrix_scan_quantum(void) { - } -inline -uint8_t matrix_rows(void) -{ +uint8_t matrix_rows(void) { return MATRIX_ROWS; } -inline -uint8_t matrix_cols(void) -{ +uint8_t matrix_cols(void) { return MATRIX_COLS; } -void matrix_init(void) -{ - // To use PORTF disable JTAG with writing JTD bit twice within four cycles. - MCUCR |= (1<= 0; --r) { + /* DDRxn */ + _SFR_IO8(row_pins[r].input_addr + 1) |= _BV(row_pins[r].bit); + toggle_row(r); } - + for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { + /* PORTxn */ + _SFR_IO8(col_pins[c].input_addr + 2) |= _BV(col_pins[c].bit); + } +#else + for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { + /* DDRxn */ + _SFR_IO8(col_pins[c].input_addr + 1) |= _BV(col_pins[c].bit); + toggle_col(c); + } + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + /* PORTxn */ + _SFR_IO8(row_pins[r].input_addr + 2) |= _BV(row_pins[r].bit); + } +#endif matrix_init_quantum(); } - -uint8_t matrix_scan(void) -{ - #if DIODE_DIRECTION == COL2ROW - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; +uint8_t matrix_scan(void) { + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + toggle_row(r); + matrix_row_t state = read_cols(); + if (debouncing_matrix[r] != state) { + debouncing_matrix[r] = state; + debouncing_delay = DEBOUNCING_DELAY; } - unselect_rows(); + toggle_row(r); } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } + if (debouncing_delay >= 0) { + dprintf("Debouncing delay remaining: %X\n", debouncing_delay); + --debouncing_delay; + if (debouncing_delay >= 0) { + wait_ms(1); } - } -#else - for (uint8_t i = 0; i < MATRIX_COLS; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t rows = read_cols(); - if (matrix_reversed_debouncing[i] != rows) { - matrix_reversed_debouncing[i] = rows; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); + else { + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + matrix[r] = debouncing_matrix[r]; } - debouncing = DEBOUNCE; } - unselect_rows(); } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_COLS; i++) { - matrix_reversed[i] = matrix_reversed_debouncing[i]; - } - } - } - for (uint8_t y = 0; y < MATRIX_ROWS; y++) { - matrix_row_t row = 0; - for (uint8_t x = 0; x < MATRIX_COLS; x++) { - row |= ((matrix_reversed[x] & (1<> y) << x; - } - matrix[y] = row; - } -#endif - matrix_scan_quantum(); - return 1; } -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; +static void toggle_row(uint8_t row) { + /* PINxn */ + _SFR_IO8(row_pins[row].input_addr) = _BV(row_pins[row].bit); } -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1= 0; --c) { + /* PINxn */ + if (!(_SFR_IO8(col_pins[c].input_addr) & _BV(col_pins[c].bit))) { + state |= (matrix_row_t)1 << c; + } + } + return state; } -inline -matrix_row_t matrix_get_row(uint8_t row) -{ +matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; } -void matrix_print(void) -{ - print("\nr/c 0123456789ABCDEF\n"); - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - phex(row); print(": "); - pbin_reverse16(matrix_get_row(row)); - print("\n"); +#else +uint8_t matrix_scan(void) { + for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { + toggle_col(c); + matrix_col_t state = read_rows(); + if (debouncing_matrix[c] != state) { + debouncing_matrix[c] = state; + debouncing_delay = DEBOUNCING_DELAY; + } + toggle_col(c); } -} - -uint8_t matrix_key_count(void) -{ - uint8_t count = 0; - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - count += bitpop16(matrix[i]); + if (debouncing_delay >= 0) { + dprintf("Debouncing delay remaining: %X\n", debouncing_delay); + --debouncing_delay; + if (debouncing_delay >= 0) { + wait_ms(1); + } + else { + for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { + matrix[c] = debouncing_matrix[c]; + } + } } - return count; + matrix_scan_quantum(); + return 1; } -static void init_cols(void) -{ - int B = 0, C = 0, D = 0, E = 0, F = 0; +static void toggle_col(uint8_t col) { + /* PINxn */ + _SFR_IO8(col_pins[col].input_addr) = _BV(col_pins[col].bit); +} -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_COLS; x++) { - int col = COLS[x]; -#else - for(int x = 0; x < MATRIX_ROWS; x++) { - int col = ROWS[x]; -#endif - if ((col & 0xF0) == 0x20) { - B |= (1<<(col & 0x0F)); - } else if ((col & 0xF0) == 0x30) { - C |= (1<<(col & 0x0F)); - } else if ((col & 0xF0) == 0x40) { - D |= (1<<(col & 0x0F)); - } else if ((col & 0xF0) == 0x50) { - E |= (1<<(col & 0x0F)); - } else if ((col & 0xF0) == 0x60) { - F |= (1<<(col & 0x0F)); - } +static matrix_col_t read_rows(void) { + matrix_col_t state = 0; + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + /* PINxn */ + if (!(_SFR_IO8(row_pins[r].input_addr) & _BV(row_pins[r].bit))) { + state |= (matrix_col_t)1 << r; + } } - DDRB &= ~(B); PORTB |= (B); - DDRC &= ~(C); PORTC |= (C); - DDRD &= ~(D); PORTD |= (D); - DDRE &= ~(E); PORTE |= (E); - DDRF &= ~(F); PORTF |= (F); + return state; } -static matrix_row_t read_cols(void) -{ - matrix_row_t result = 0; +matrix_row_t matrix_get_row(uint8_t row) { + matrix_row_t state = 0; + matrix_col_t mask = (matrix_col_t)1 << row; + for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { + if (matrix[c] & mask) { + state |= (matrix_row_t)1 << c; + } + } + return state; +} -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_COLS; x++) { - int col = COLS[x]; -#else - for(int x = 0; x < MATRIX_ROWS; x++) { - int col = ROWS[x]; #endif - if ((col & 0xF0) == 0x20) { - result |= (PINB&(1<<(col & 0x0F)) ? 0 : (SHIFTER<= 0) return false; + return true; } -static void unselect_rows(void) -{ - int B = 0, C = 0, D = 0, E = 0, F = 0; +bool matrix_is_on(uint8_t row, uint8_t col) { + return matrix_get_row(row) & (matrix_row_t)1 << col; +} -#if DIODE_DIRECTION == COL2ROW - for(int x = 0; x < MATRIX_ROWS; x++) { - int row = ROWS[x]; -#else - for(int x = 0; x < MATRIX_COLS; x++) { - int row = COLS[x]; -#endif - if ((row & 0xF0) == 0x20) { - B |= (1<<(row & 0x0F)); - } else if ((row & 0xF0) == 0x30) { - C |= (1<<(row & 0x0F)); - } else if ((row & 0xF0) == 0x40) { - D |= (1<<(row & 0x0F)); - } else if ((row & 0xF0) == 0x50) { - E |= (1<<(row & 0x0F)); - } else if ((row & 0xF0) == 0x60) { - F |= (1<<(row & 0x0F)); - } +void matrix_print(void) { + dprintln("Human-readable matrix state:"); + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { + dprintf("State of row %X: %016b\n", r, bitrev16(matrix_get_row(r))); } - DDRB &= ~(B); PORTB |= (B); - DDRC &= ~(C); PORTC |= (C); - DDRD &= ~(D); PORTD |= (D); - DDRE &= ~(E); PORTE |= (E); - DDRF &= ~(F); PORTF |= (F); } -static void select_row(uint8_t row) -{ - -#if DIODE_DIRECTION == COL2ROW - int row_pin = ROWS[row]; -#else - int row_pin = COLS[row]; -#endif - - if ((row_pin & 0xF0) == 0x20) { - DDRB |= (1<<(row_pin & 0x0F)); - PORTB &= ~(1<<(row_pin & 0x0F)); - } else if ((row_pin & 0xF0) == 0x30) { - DDRC |= (1<<(row_pin & 0x0F)); - PORTC &= ~(1<<(row_pin & 0x0F)); - } else if ((row_pin & 0xF0) == 0x40) { - DDRD |= (1<<(row_pin & 0x0F)); - PORTD &= ~(1<<(row_pin & 0x0F)); - } else if ((row_pin & 0xF0) == 0x50) { - DDRE |= (1<<(row_pin & 0x0F)); - PORTE &= ~(1<<(row_pin & 0x0F)); - } else if ((row_pin & 0xF0) == 0x60) { - DDRF |= (1<<(row_pin & 0x0F)); - PORTF &= ~(1<<(row_pin & 0x0F)); - } -} \ No newline at end of file +uint8_t matrix_key_count(void) { + uint8_t count = 0; + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + count += bitpop16(matrix_get_row(r)); + } + return count; +} diff --git a/quantum/template/config.h b/quantum/template/config.h index e6fb7866c..cad3e3260 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -41,15 +41,16 @@ along with this program. If not, see . * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * -*/ -#define COLS (int []){ F1, F0, B0 } -#define ROWS (int []){ D0, D5 } +*/ +#define MATRIX_ROW_PINS { D0, D5 } +#define MATRIX_COL_PINS { F1, F0, B0 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST @@ -62,17 +63,17 @@ along with this program. If not, see . /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* +/* * Force NKRO * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the * makefile for this to work.) * * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) * until the next keyboard reset. * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is * fully operational during normal computer usage. * * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) @@ -90,7 +91,7 @@ along with this program. If not, see . * the keyboard. They are best used in combination with the HID Listen program, * found here: https://www.pjrc.com/teensy/hid_listen.html * - * The options below allow the magic key functionality to be changed. This is + * The options below allow the magic key functionality to be changed. This is * useful if your keyboard/keypad is missing keys and you want magic key support. * */ diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 498068019..a6f3c6441 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -114,9 +114,7 @@ bool suspend_wakeup_condition(void) matrix_power_up(); matrix_scan(); matrix_power_down(); - for (uint8_t r = 0; r < MATRIX_ROWS; r++) { - if (matrix_get_row(r)) return true; - } + if (matrix_key_count()) return true; return false; } @@ -146,4 +144,3 @@ ISR(WDT_vect) } } #endif - diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c index 2c1b1adfc..30e8a0f20 100644 --- a/tmk_core/common/bootmagic.c +++ b/tmk_core/common/bootmagic.c @@ -105,15 +105,13 @@ void bootmagic(void) } } -static bool scan_keycode(uint8_t keycode) -{ - for (uint8_t r = 0; r < MATRIX_ROWS; r++) { +static bool scan_keycode(uint8_t keycode) { + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { matrix_row_t matrix_row = matrix_get_row(r); - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - if (matrix_row & ((matrix_row_t)1<= 0; --c) { + if (matrix_row & (matrix_row_t)1 << c) { + keypos_t key = (keypos_t){ .row = r, .col = c }; + if (keycode == keymap_key_to_keycode(0, key)) return true; } } } diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 1d9981848..c6d54ae33 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -1,5 +1,5 @@ /* -Copyright 2011,2012,2013 Jun Wako +Copyright 2011, 2012, 2013 Jun Wako This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,13 +27,13 @@ along with this program. If not, see . #include "command.h" #include "util.h" #include "sendchar.h" +#include "eeconfig.h" +#include "backlight.h" #ifdef BOOTMAGIC_ENABLE - #include "bootmagic.h" +# include "bootmagic.h" #else - #include "magic.h" +# include "magic.h" #endif -#include "eeconfig.h" -#include "backlight.h" #ifdef MOUSEKEY_ENABLE # include "mousekey.h" #endif @@ -41,40 +41,35 @@ along with this program. If not, see . # include "ps2_mouse.h" #endif #ifdef SERIAL_MOUSE_ENABLE -#include "serial_mouse.h" +# include "serial_mouse.h" #endif #ifdef ADB_MOUSE_ENABLE -#include "adb.h" +# include "adb.h" #endif - #ifdef MATRIX_HAS_GHOST -static bool has_ghost_in_row(uint8_t row) -{ - matrix_row_t matrix_row = matrix_get_row(row); - // No ghost exists when less than 2 keys are down on the row - if (((matrix_row - 1) & matrix_row) == 0) - return false; - - // Ghost occurs when the row shares column line with other row - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && (matrix_get_row(i) & matrix_row)) - return true; +static bool is_row_ghosting(uint8_t row){ + matrix_row_t state = matrix_get_row(row); + /* no ghosting happens when only one key in the row is pressed */ + if (!(state - 1 & state)) return false; + /* ghosting occurs when two keys in the same column are pressed */ + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + if (r != row && matrix_get_row(r) & state) return true; } return false; } + #endif +__attribute__ ((weak)) +void matrix_setup(void) { +} -__attribute__ ((weak)) void matrix_setup(void) {} -void keyboard_setup(void) -{ +void keyboard_setup(void) { matrix_setup(); } -void keyboard_init(void) -{ - +void keyboard_init(void) { timer_init(); matrix_init(); #ifdef PS2_MOUSE_ENABLE @@ -86,104 +81,87 @@ void keyboard_init(void) #ifdef ADB_MOUSE_ENABLE adb_mouse_init(); #endif - - #ifdef BOOTMAGIC_ENABLE bootmagic(); #else magic(); #endif - #ifdef BACKLIGHT_ENABLE backlight_init(); #endif - #if defined(NKRO_ENABLE) && defined(FORCE_NKRO) keyboard_nkro = true; #endif - } -/* - * Do keyboard routine jobs: scan mantrix, light LEDs, ... - * This is repeatedly called as fast as possible. - */ -void keyboard_task(void) -{ - static matrix_row_t matrix_prev[MATRIX_ROWS]; +/* does routine keyboard jobs */ +void keyboard_task(void) { + static matrix_row_t previous_matrix[MATRIX_ROWS]; #ifdef MATRIX_HAS_GHOST - static matrix_row_t matrix_ghost[MATRIX_ROWS]; + static matrix_row_t deghosting_matrix[MATRIX_ROWS]; #endif static uint8_t led_status = 0; - matrix_row_t matrix_row = 0; - matrix_row_t matrix_change = 0; - matrix_scan(); - for (uint8_t r = 0; r < MATRIX_ROWS; r++) { - matrix_row = matrix_get_row(r); - matrix_change = matrix_row ^ matrix_prev[r]; - if (matrix_change) { + for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { + matrix_row_t state = matrix_get_row(r); + matrix_row_t changes = state ^ previous_matrix[r]; + if (changes) { #ifdef MATRIX_HAS_GHOST - if (has_ghost_in_row(r)) { - /* Keep track of whether ghosted status has changed for - * debugging. But don't update matrix_prev until un-ghosted, or - * the last key would be lost. + if (is_row_ghosting(r)) { + /* debugs the deghosting mechanism */ + /* doesn't update previous_matrix until the ghosting has stopped + * in order to prevent the last key from being lost */ - if (debug_matrix && matrix_ghost[r] != matrix_row) { + if (debug_matrix && deghosting_matrix[r] != state) { matrix_print(); } - matrix_ghost[r] = matrix_row; + deghosting_matrix[r] = state; continue; } - matrix_ghost[r] = matrix_row; + deghosting_matrix[r] = state; #endif if (debug_matrix) matrix_print(); - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - if (matrix_change & ((matrix_row_t)1<= 0; --c) { + matrix_row_t mask = (matrix_row_t)1 << c; + if (changes & mask) { + keyevent_t event; + event.key = (keypos_t){ .row = r, .col = c }; + event.pressed = state & mask; + /* the time should not be 0 */ + event.time = timer_read() | 1; + action_exec(event); + /* records the processed key event */ + previous_matrix[r] ^= mask; + /* processes one key event per call */ + goto event_processed; } } } } - // call with pseudo tick event when no real key event. + /* sends tick events when the keyboard is idle */ action_exec(TICK); - -MATRIX_LOOP_END: - +event_processed: #ifdef MOUSEKEY_ENABLE - // mousekey repeat & acceleration + /* repeats and accelerates the mouse keys */ mousekey_task(); #endif - #ifdef PS2_MOUSE_ENABLE ps2_mouse_task(); #endif - #ifdef SERIAL_MOUSE_ENABLE - serial_mouse_task(); + serial_mouse_task(); #endif - #ifdef ADB_MOUSE_ENABLE - adb_mouse_task(); + adb_mouse_task(); #endif - - // update LED + /* updates the LEDs */ if (led_status != host_keyboard_leds()) { led_status = host_keyboard_leds(); keyboard_set_leds(led_status); } } -void keyboard_set_leds(uint8_t leds) -{ - if (debug_keyboard) { debug("keyboard_set_led: "); debug_hex8(leds); debug("\n"); } +void keyboard_set_leds(uint8_t leds) { + if (debug_keyboard) dprintf("Keyboard LEDs state: %x\n", leds); led_set(leds); } diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index ad0871bfb..5f380aaab 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -14,59 +14,68 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ - #ifndef MATRIX_H #define MATRIX_H #include #include - -#if (MATRIX_COLS <= 8) -typedef uint8_t matrix_row_t; -#elif (MATRIX_COLS <= 16) -typedef uint16_t matrix_row_t; -#elif (MATRIX_COLS <= 32) -typedef uint32_t matrix_row_t; +#if MATRIX_COLS <= 8 +typedef uint8_t matrix_row_t; +#elif MATRIX_COLS <= 16 +typedef uint16_t matrix_row_t; +#elif MATRIX_COLS <= 32 +typedef uint32_t matrix_row_t; #else -#error "MATRIX_COLS: invalid value" +# error "There are too many columns." #endif -#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1< Date: Tue, 24 May 2016 11:56:53 -0400 Subject: Converted audio play functions to *_user (#349) * Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * Added music and audio toggles to Quantum.c * Redid the audio callbacks * Adjusted default planck layout to use the user tone naming * tabs to spaces * Rewrote the ALL recipe to allow for faster parallel make * tabs to spaces * Renamed custom event functions to be 'startup_user' and 'shutdown_user'. Also moved the prototypes around. * Tweaked pvc atomic layout to work with the pvc planck. * updates midi scale calling --- keyboard/atomic/keymaps/pvc/keymap.c | 41 +---- keyboard/planck/keymaps/default/keymap.c | 43 +++-- keyboard/planck/keymaps/pvc/config.h | 2 +- keyboard/planck/keymaps/pvc/keymap.c | 291 ++++++++++++------------------- quantum/audio/audio.c | 17 -- quantum/audio/audio.h | 6 +- quantum/keymap_common.c | 3 +- quantum/quantum.c | 69 +++++--- quantum/quantum.h | 4 + tmk_core/common/command.c | 13 +- tmk_core/rules.mk | 8 +- 11 files changed, 215 insertions(+), 282 deletions(-) (limited to 'keyboard/planck') diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c index 8431654d7..f16ec8a6e 100644 --- a/keyboard/atomic/keymaps/pvc/keymap.c +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -62,8 +62,6 @@ #define M_BDFLT M(MACRO_BREATH_DEFAULT) -//#define MU_TOG M(MACRO_MUSIC_TOGGLE) -//#define AU_TOG M(MACRO_AUDIO_TOGGLE) #define VC_UP M(MACRO_INC_VOICE) #define VC_DOWN M(MACRO_DEC_VOICE) @@ -156,11 +154,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* UPPER * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | - | NUM LK | SCR LK | XXXXXX . PAUSE | + * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | + | ~ | | | INS | + * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | ` | XXXXXX . | HOME | + * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END | * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| @@ -498,31 +496,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE -/* -bool process_action_user(keyrecord_t *record) -{ - - uint8_t starting_note = 0x0C; - int offset = 7; - - if (IS_LAYER_ON(LAYER_MUSIC)) - { - if (record->event.pressed) - { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } - else - { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } - } -} -*/ - void matrix_init_user(void) { set_voice(default_voice); - play_startup_tone(); + startup_user(); println("Matrix Init"); } @@ -570,30 +547,30 @@ void led_set_user(uint8_t usb_led) } -void play_startup_tone() +void startup_user() { _delay_ms(10); // gets rid of tick PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO); } -void play_goodbye_tone() +void shutdown_user() { PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO); _delay_ms(2000); stop_all_notes(); } -void play_audio_on_tone(void) +void audio_on_user(void) { PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); } -void play_music_on_tone(void) +void music_on_user(void) { PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); } -void play_music_scale(void) +void music_scale_user(void) { PLAY_NOTE_ARRAY(music_scale, false, STACCATO); } diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index 36d496416..3d6289817 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -174,21 +174,16 @@ const uint16_t PROGMEM fn_actions[] = { }; #ifdef AUDIO_ENABLE -float tone_startup[][2] = { - {440.0*pow(2.0,(31)/12.0), 12}, - {440.0*pow(2.0,(28)/12.0), 8}, - {440.0*pow(2.0,(19)/12.0), 8}, - {440.0*pow(2.0,(24)/12.0), 8}, - {440.0*pow(2.0,(28)/12.0), 20} -}; +float tone_startup[][2] = SONG(STARTUP_SOUND); float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_plover[][2] = SONG(PLOVER_SOUND); float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float goodbye[][2] = SONG(GOODBYE_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif @@ -288,16 +283,34 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) }; void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - _delay_ms(20); // stops the tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif + #ifdef AUDIO_ENABLE + startup_user(); + #endif } #ifdef AUDIO_ENABLE -void play_goodbye_tone() + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() { - PLAY_NOTE_ARRAY(goodbye, false, 0); - _delay_ms(150); + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); } + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + #endif diff --git a/keyboard/planck/keymaps/pvc/config.h b/keyboard/planck/keymaps/pvc/config.h index b8960038a..b64893108 100644 --- a/keyboard/planck/keymaps/pvc/config.h +++ b/keyboard/planck/keymaps/pvc/config.h @@ -74,7 +74,7 @@ along with this program. If not, see . */ /* disable debug print */ -#define NO_DEBUG +//#define NO_DEBUG /* disable print */ //#define NO_PRINT diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c index 177f04484..2fc5f0da1 100644 --- a/keyboard/planck/keymaps/pvc/keymap.c +++ b/keyboard/planck/keymaps/pvc/keymap.c @@ -8,43 +8,44 @@ #include "song_list.h" #endif -#define LAYER_QWERTY 0 -#define LAYER_COLEMAK 1 -#define LAYER_DVORAK 2 -#define LAYER_LOWER 3 -#define LAYER_RAISE 4 -#define LAYER_FUNCTION 5 -#define LAYER_MOUSE 6 -#define LAYER_MUSIC 7 -#define LAYER_ADJUST 8 - -#define MACRO_QWERTY 0 -#define MACRO_COLEMAK 1 -#define MACRO_DVORAK 2 -#define MACRO_LOWER 3 -#define MACRO_RAISE 4 -#define MACRO_FUNCTION 5 -#define MACRO_MOUSE 6 -#define MACRO_TIMBRE_1 7 -#define MACRO_TIMBRE_2 8 -#define MACRO_TIMBRE_3 9 -#define MACRO_TIMBRE_4 10 -#define MACRO_TEMPO_U 11 -#define MACRO_TEMPO_D 12 -#define MACRO_TONE_DEFAULT 13 -#define MACRO_MUSIC_ON 14 -#define MACRO_MUSIC_OFF 15 -#define MACRO_AUDIO_ON 16 -#define MACRO_AUDIO_OFF 17 -#define MACRO_INC_VOICE 18 -#define MACRO_DEC_VOICE 19 -#define MACRO_BACKLIGHT 20 +#define LAYER_QWERTY 0 +#define LAYER_COLEMAK 1 +#define LAYER_DVORAK 2 +#define LAYER_UPPER 3 +#define LAYER_LOWER 4 +#define LAYER_FUNCTION 5 +#define LAYER_MOUSE 6 +#define LAYER_ADJUST 7 + +#define MACRO_QWERTY 0 +#define MACRO_COLEMAK 1 +#define MACRO_DVORAK 2 +#define MACRO_UPPER 3 +#define MACRO_LOWER 4 +#define MACRO_FUNCTION 5 +#define MACRO_MOUSE 6 +#define MACRO_TIMBRE_1 7 +#define MACRO_TIMBRE_2 8 +#define MACRO_TIMBRE_3 9 +#define MACRO_TIMBRE_4 10 +#define MACRO_TEMPO_U 11 +#define MACRO_TEMPO_D 12 +#define MACRO_TONE_DEFAULT 13 +#define MACRO_MUSIC_TOGGLE 14 +#define MACRO_AUDIO_TOGGLE 16 +#define MACRO_INC_VOICE 18 +#define MACRO_DEC_VOICE 19 +#define MACRO_BACKLIGHT 20 +#define MACRO_BREATH_TOGGLE 21 +#define MACRO_BREATH_SPEED_INC 23 +#define MACRO_BREATH_SPEED_DEC 24 +#define MACRO_BREATH_DEFAULT 25 #define M_QWRTY M(MACRO_QWERTY) #define M_COLMK M(MACRO_COLEMAK) #define M_DVORK M(MACRO_DVORAK) +#define M_UPPER M(MACRO_UPPER) #define M_LOWER M(MACRO_LOWER) -#define M_RAISE M(MACRO_RAISE) #define M_FUNCT M(MACRO_FUNCTION) #define M_MOUSE M(MACRO_MOUSE) #define TIMBR_1 M(MACRO_TIMBRE_1) @@ -55,12 +56,12 @@ #define TMPO_DN M(MACRO_TEMPO_D) #define TMPO_DF M(MACRO_TONE_DEFAULT) #define M_BACKL M(MACRO_BACKLIGHT) +#define M_BRTOG M(MACRO_BREATH_TOGGLE) +#define M_BSPDU M(MACRO_BREATH_SPEED_INC) +#define M_BSPDD M(MACRO_BREATH_SPEED_DEC) +#define M_BDFLT M(MACRO_BREATH_DEFAULT) -#define MUS_ON M(MACRO_MUSIC_ON) -#define MUS_OFF M(MACRO_MUSIC_OFF) -#define AUD_OFF M(MACRO_AUDIO_OFF) -#define AUD_ON M(MACRO_AUDIO_ON) #define VC_UP M(MACRO_INC_VOICE) #define VC_DOWN M(MACRO_DEC_VOICE) @@ -76,6 +77,7 @@ #define SC_ACLS LALT(KC_F4) #define SC_CCLS LCTL(KC_F4) +#define OS_SHFT KC_FN0 #define _______ KC_TRNS #define XXXXXXX KC_NO @@ -90,17 +92,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER | + * | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | ENTER | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_QWERTY] = { /* QWERTY */ - { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, + [LAYER_QWERTY] = { // QWERTY + { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }, }, /* COLEMAK @@ -109,77 +111,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | ENTER | + * | LSHIFT | Z | X | C | V | B | K | M | , | . | UP | ENTER | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_COLEMAK] = { /* COLEMAK */ + [LAYER_COLEMAK] = { // COLEMAK { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC }, { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }, }, /* DVORAK * .-----------------------------------------------------------------------------------------------------------. * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | ESC | A | O | E | U | I | D | H | T | N | S | ' | + * | ESC | A | O | E | U | I | D | H | T | N | S | / | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_DVORAK] = { /* DVORAK */ + [LAYER_DVORAK] = { // DVORAK { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC }, { KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH }, { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, }, -/* Raise +/* UPPER * .-----------------------------------------------------------------------------------------------------------. - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL | + * | PRINT | F1 | F2 | F3 | F4 | NUM LK | / | 7 | 8 | 9 | - | DEL | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | [ | ] | \ | + * | CAP LK | F5 | F6 | F7 | F8 | SCR LK | * | 4 | 5 | 6 | + | INS | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END | + * | | F9 | F10 | F11 | F12 | PAUSE | | 1 | 2 | 3 | ENTER | HOME | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | | | | | 0 | 0 | | RALT | . | ENTER | END | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_RAISE] = { /* RAISED */ - { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, - { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, - { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END }, + [LAYER_UPPER] = { // UPPER + { KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL }, + { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS }, + { _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME }, + { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END }, }, - -/* LOWERED +/* LOWER * .-----------------------------------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | INS | + * | | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * | | ^ | * | + | - | ; | : | _ | ' | " | ` | PG DN | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END | + * | | | | & | ! | ~ | / | \ | = | < | > | ? | HOME | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | | | | | | | | | | | END | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_LOWER] = { /* LOWERED */ - { KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS }, - { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, - { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END }, + [LAYER_LOWER] = { // LOWER + { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, KC_PGUP }, + { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, KC_PGDN }, + { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_HOME }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END }, }, + /* FUNCTION * .-----------------------------------------------------------------------------------------------------------. * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE | @@ -188,10 +190,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | LCTRL | LWIN | FN | LALT | RAISE | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV | + * | LCTRL | LWIN | FN | LALT | UPPER | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV | * '-----------------------------------------------------------------------------------------------------------' */ - [LAYER_FUNCTION] = { /* FUNCTION */ + [LAYER_FUNCTION] = { // FUNCTION { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS }, { KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR }, { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE }, @@ -200,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef MOUSEKEY_ENABLE - [LAYER_MOUSE] = { /* MOUSE */ + [LAYER_MOUSE] = { // MOUSE { KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D }, @@ -209,21 +211,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #endif - [LAYER_MUSIC] = { /* MUSIC */ - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - }, - - [LAYER_ADJUST] = { /* ADJUST */ - { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF }, + [LAYER_ADJUST] = { // ADJUST + { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, MU_TOG, AU_TOG }, { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ }, + { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, MUV_IN, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, }, - /* [LAYER_EMPTY] = { { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, @@ -263,6 +257,7 @@ void persistant_default_layer_set(uint16_t default_layer) } const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -306,25 +301,25 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { layer_on(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } else { layer_off(LAYER_LOWER); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } break; - case MACRO_RAISE: + case MACRO_UPPER: if (record->event.pressed) { - layer_on(LAYER_RAISE); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + layer_on(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } else { - layer_off(LAYER_RAISE); - update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + layer_off(LAYER_UPPER); + update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST); } break; @@ -393,65 +388,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; - case MACRO_AUDIO_OFF: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - audio_off(); - #endif - } - break; - - case MACRO_AUDIO_ON: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - audio_on(); - PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); - #endif - } - break; - - case MACRO_MUSIC_ON: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); - layer_on(LAYER_MUSIC); - #endif - } - break; - - case MACRO_MUSIC_OFF: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - layer_off(LAYER_MUSIC); - stop_all_notes(); - #endif - } - break; - - case MACRO_INC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_iterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; - - case MACRO_DEC_VOICE: - if (record->event.pressed) - { - #ifdef AUDIO_ENABLE - voice_deiterate(); - PLAY_NOTE_ARRAY(music_scale, false, STACCATO); - #endif - } - break; - #endif /* AUDIO_ENABLE */ default: @@ -464,31 +400,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE - -void process_action_user(keyrecord_t *record) -{ - - uint8_t starting_note = 0x0C; - int offset = 7; - - if (IS_LAYER_ON(LAYER_MUSIC)) - { - if (record->event.pressed) - { - play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } - else - { - stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } - } -} - - void matrix_init_user(void) { set_voice(default_voice); - play_startup_tone(); + startup_user(); println("Matrix Init"); } @@ -532,16 +447,32 @@ void led_set_user(uint8_t usb_led) } -void play_startup_tone() +void startup_user() { _delay_ms(10); // gets rid of tick PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO); } -void play_goodbye_tone() +void shutdown_user() { PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO); - _delay_ms(1000); + _delay_ms(2000); + stop_all_notes(); +} + +void audio_on_user(void) +{ + PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); +} + +void music_on_user(void) +{ + PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); } #endif /* AUDIO_ENABLE */ \ No newline at end of file diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 32f64417e..3ca249fdf 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -475,20 +475,3 @@ void increase_tempo(uint8_t tempo_change) { note_tempo -= tempo_change; } } - - -//------------------------------------------------------------------------------ -// Override these functions in your keymap file to play different tunes on -// startup and bootloader jump -__attribute__ ((weak)) -void play_startup_tone() {} - -__attribute__ ((weak)) -void play_goodbye_tone() {} - -__attribute__ ((weak)) -void audio_on_user() {} - -__attribute__ ((weak)) -void play_music_scale() {} -//------------------------------------------------------------------------------ diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index b46f587bb..00d45f7ac 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -5,6 +5,7 @@ #include "musical_notes.h" #include "song_list.h" #include "voices.h" +#include "quantum.h" #ifndef AUDIO_H #define AUDIO_H @@ -87,9 +88,4 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) bool is_playing_notes(void); -void play_goodbye_tone(void); -void play_startup_tone(void); -void audio_on_user(void); -void play_music_scale(void); - #endif \ No newline at end of file diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 1d9ab2e05..ba7269388 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -26,6 +26,7 @@ along with this program. If not, see . #include "backlight.h" #include "bootloader.h" #include "eeconfig.h" +#include "quantum.h" #ifdef MIDI_ENABLE #include "keymap_midi.h" @@ -190,7 +191,7 @@ static action_t keycode_to_action(uint16_t keycode) clear_keyboard(); #ifdef AUDIO_ENABLE stop_all_notes(); - play_goodbye_tone(); + shutdown_user(); #endif _delay_ms(250); #ifdef ATREUS_ASTAR diff --git a/quantum/quantum.c b/quantum/quantum.c index 34c575af4..eb64a99a4 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -23,17 +23,16 @@ int offset = 7; #ifdef AUDIO_ENABLE bool music_activated = false; - float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); - // music sequencer - static bool music_sequence_recording = false; - static bool music_sequence_playing = false; - static float music_sequence[16] = {0}; - static uint8_t music_sequence_count = 0; - static uint8_t music_sequence_position = 0; +// music sequencer +static bool music_sequence_recording = false; +static bool music_sequence_playing = false; +static float music_sequence[16] = {0}; +static uint8_t music_sequence_count = 0; +static uint8_t music_sequence_position = 0; - static uint16_t music_sequence_timer = 0; - static uint16_t music_sequence_interval = 100; +static uint16_t music_sequence_timer = 0; +static uint16_t music_sequence_interval = 100; #endif @@ -133,7 +132,7 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef MIDI_ENABLE if (keycode == MI_ON && record->event.pressed) { midi_activated = true; - play_music_scale(); + music_scale_user(); return false; } @@ -230,37 +229,37 @@ bool process_record_quantum(keyrecord_t *record) { } if (keycode == MU_ON && record->event.pressed) { - music_on(); - return false; + music_on(); + return false; } if (keycode == MU_OFF && record->event.pressed) { - music_off(); - return false; + music_off(); + return false; } if (keycode == MU_TOG && record->event.pressed) { if (music_activated) { - music_off(); + music_off(); } else { - music_on(); + music_on(); } return false; } if (keycode == MUV_IN && record->event.pressed) { - voice_iterate(); - play_music_scale(); - return false; + voice_iterate(); + music_scale_user(); + return false; } if (keycode == MUV_DE && record->event.pressed) { - voice_deiterate(); - play_music_scale(); - return false; + voice_deiterate(); + music_scale_user(); + return false; } if (music_activated) { @@ -272,12 +271,14 @@ bool process_record_quantum(keyrecord_t *record) { music_sequence_count = 0; return false; } + if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing stop_all_notes(); music_sequence_recording = false; music_sequence_playing = false; return false; } + if (keycode == KC_LGUI && record->event.pressed) { // Start playing stop_all_notes(); music_sequence_recording = false; @@ -289,12 +290,13 @@ bool process_record_quantum(keyrecord_t *record) { if (keycode == KC_UP) { if (record->event.pressed) - music_sequence_interval-=10; + music_sequence_interval-=10; return false; } + if (keycode == KC_DOWN) { if (record->event.pressed) - music_sequence_interval+=10; + music_sequence_interval+=10; return false; } @@ -459,5 +461,24 @@ void matrix_scan_quantum() { } #endif + +//------------------------------------------------------------------------------ +// Override these functions in your keymap file to play different tunes on +// different events such as startup and bootloader jump + +__attribute__ ((weak)) +void startup_user() {} + +__attribute__ ((weak)) +void shutdown_user() {} + __attribute__ ((weak)) void music_on_user() {} + +__attribute__ ((weak)) +void audio_on_user() {} + +__attribute__ ((weak)) +void music_scale_user() {} + +//------------------------------------------------------------------------------ \ No newline at end of file diff --git a/quantum/quantum.h b/quantum/quantum.h index d4da77289..69a0d8126 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -67,6 +67,10 @@ void music_toggle(void); void music_on(void); void music_off(void); +void startup_user(void); +void shutdown_user(void); +void audio_on_user(void); void music_on_user(void); +void music_scale_user(void); #endif \ No newline at end of file diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 9edcc42a0..024d7c67a 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -33,20 +33,21 @@ along with this program. If not, see . #include "led.h" #include "command.h" #include "backlight.h" +#include "quantum.h" #ifdef MOUSEKEY_ENABLE #include "mousekey.h" #endif #ifdef PROTOCOL_PJRC -# include "usb_keyboard.h" -# ifdef EXTRAKEY_ENABLE -# include "usb_extra.h" -# endif + #include "usb_keyboard.h" + #ifdef EXTRAKEY_ENABLE + #include "usb_extra.h" + #endif #endif #ifdef PROTOCOL_VUSB -# include "usbdrv.h" + #include "usbdrv.h" #endif #ifdef AUDIO_ENABLE @@ -358,7 +359,7 @@ static bool command_common(uint8_t code) print("\n\nJumping to bootloader... "); #ifdef AUDIO_ENABLE stop_all_notes(); - play_goodbye_tone(); + shutdown_user(); #else _delay_ms(1000); #endif diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 552f32331..1d384574f 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -366,7 +366,13 @@ ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: begin gccversion sizebefore build sizeafter end +all: + $(MAKE) begin + $(MAKE) gccversion + $(MAKE) sizebefore + $(MAKE) build + $(MAKE) sizeafter + $(MAKE) end # Change the build target to build a HEX file or a library. build: elf hex eep lss sym -- cgit v1.3.1