Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/nessmd2usb.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2016-07-02 02:56:24 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2016-07-02 02:56:24 +0300
commit61bf4375a94f6aed98e33d0effc1ec22a26c32f5 (patch)
treed0823b6c8b216ea51465d680916bdf1312bf78b6
parent604e5b24aeeabde606c87b53688bb97b60fd7e43 (diff)
Support for 9-pin Dendy controllers
-rw-r--r--README.md2
-rw-r--r--defines.h1
-rw-r--r--gamepad.c143
-rw-r--r--nessmd2usb.hex725
4 files changed, 501 insertions, 370 deletions
diff --git a/README.md b/README.md
index 8ab71b1..4b3faf9 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@
## Как использовать
Устройство работает без дополнительных драйверов. Под Windows оно видится как четыре игровых контроллера. Под *nix и MacOS скорее всего понадобятся танцы с бубном.
-Контроллеры от Денди поддерживаются только с широким (15-пиновым) разъёмом. Не пытайтесь включать Денди-контроллеры с узким (9-пиновым) разъёмом в гнёзда для Сеги. Они туда влезут, но работать не будут.
+Контроллеры от Денди поддерживаются как с широким (15-пиновым) разъёмом, так и с узким (9-пиновым) разъёмом. Последние можно включать в гнёзда для Сеги.
## Корпус
diff --git a/defines.h b/defines.h
index 8b2ea11..74ba1d0 100644
--- a/defines.h
+++ b/defines.h
@@ -16,6 +16,7 @@
#define SMD_DATA3_PIN2 3
#define SMD_DATA4_PIN2 4
#define SMD_DATA5_PIN2 5
+#define SMD_USE_DENDY9_PIN
#define NES_ENABLED
#define NES_SECOND_ENABLED
diff --git a/gamepad.c b/gamepad.c
index 98253a5..3e38f16 100644
--- a/gamepad.c
+++ b/gamepad.c
@@ -5,7 +5,6 @@
#include "bits.h"
#ifdef NES_ENABLED
-
void init_nes_gamepad()
{
NES_PORT_DDR |= 1<<NES_LATCH_PIN; // Latch, output
@@ -22,6 +21,7 @@ uint16_t get_nes_gamepad()
{
uint16_t gamepad_data = 0;
NES_PORT_PORT &= ~(1<<NES_LATCH_PIN); // Latch
+ _delay_us(10);
int b;
for (b = 0; b < 8; b++)
{
@@ -162,7 +162,7 @@ uint32_t get_smd_gamepad()
| (((SMD_DATA_PORT_PIN>>SMD_DATA3_PIN)&1)<<3)
| (((SMD_DATA_PORT_PIN>>SMD_DATA4_PIN)&1)<<4)
| (((SMD_DATA_PORT_PIN>>SMD_DATA5_PIN)&1)<<5);
-#ifdef SMD_SECOND_ENABLED
+#ifdef SMD_SECOND_ENABLED
gamepad_data_high2 = ((SMD_DATA_PORT_PIN2>>SMD_DATA0_PIN2)&1)
| (((SMD_DATA_PORT_PIN2>>SMD_DATA1_PIN2)&1)<<1)
| (((SMD_DATA_PORT_PIN2>>SMD_DATA2_PIN2)&1)<<2)
@@ -174,14 +174,79 @@ uint32_t get_smd_gamepad()
}
#endif
+#ifdef SMD_USE_DENDY9_PIN
+void init_dendy_9pin(uint8_t n)
+{ // 3, 4, 6
+ if (!n)
+ {
+ SMD_DATA_PORT_DDR &= ~(1<<SMD_DATA1_PIN); // Data 1 aka data, input
+ SMD_DATA_PORT_DDR |= 1<<SMD_DATA2_PIN; // Data 2 aka latch, output
+ SMD_DATA_PORT_DDR |= 1<<SMD_DATA3_PIN; // Data 3 aka clock, output
+ SMD_DATA_PORT_DDR |= 1<<SMD_DATA4_PIN; // Data 4 aka VCC, output
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA1_PIN; // Data 1 aka data, pull-up
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA2_PIN; // Data 2 aka latch, hi
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA3_PIN; // Data 3 aka clock, hi
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA4_PIN; // Data 4 aka VCC, hi
+ } else {
+#ifdef SMD_SECOND_ENABLED
+ SMD_DATA_PORT_DDR2 &= ~(1<<SMD_DATA1_PIN2); // Data 1 aka data, input
+ SMD_DATA_PORT_DDR2 |= 1<<SMD_DATA2_PIN2; // Data 2 aka latch, output
+ SMD_DATA_PORT_DDR2 |= 1<<SMD_DATA3_PIN2; // Data 3 aka clock, output
+ SMD_DATA_PORT_DDR2 |= 1<<SMD_DATA4_PIN2; // Data 4 aka VCC, output
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA1_PIN2; // Data 1 aka data, pull-up
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA2_PIN2; // Data 2 aka latch, hi
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA3_PIN2; // Data 3 aka clock, hi
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA4_PIN2; // Data 4 aka VCC, hi
+#endif
+ }
+}
+
+uint8_t get_dendy_9pin(uint8_t n)
+{
+ uint8_t gamepad_data = 0;
+ if (!n)
+ {
+ SMD_DATA_PORT_PORT &= ~(1<<SMD_DATA2_PIN); // Data 2 aka latch, low
+ _delay_us(10);
+ int b;
+ for (b = 0; b < 8; b++)
+ {
+ SMD_DATA_PORT_PORT &= ~(1<<SMD_DATA3_PIN); // Data 3 aka clock, low
+ _delay_us(10);
+ gamepad_data |= (((SMD_DATA_PORT_PIN>>SMD_DATA1_PIN)&1)<<b);
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA3_PIN; // Data 3 aka clock, hi
+ _delay_us(10);
+ }
+ SMD_DATA_PORT_PORT |= 1<<SMD_DATA2_PIN; // Data 2 aka latch, hi
+ } else {
+#ifdef SMD_SECOND_ENABLED
+ SMD_DATA_PORT_PORT2 &= ~(1<<SMD_DATA2_PIN2); // Data 2 aka latch, low
+ _delay_us(10);
+ int b;
+ for (b = 0; b < 8; b++)
+ {
+ SMD_DATA_PORT_PORT2 &= ~(1<<SMD_DATA3_PIN2); // Data 3 aka clock, low
+ _delay_us(10);
+ gamepad_data |= (((SMD_DATA_PORT_PIN2>>SMD_DATA1_PIN2)&1)<<b);
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA3_PIN2; // Data 3 aka clock, hi
+ _delay_us(10);
+ }
+ SMD_DATA_PORT_PORT2 |= 1<<SMD_DATA2_PIN2; // Data 2 aka latch, hi
+#endif
+ }
+ return gamepad_data;
+}
+#endif
+
uint32_t get_smd_gamepad_decoded(void)
{
uint32_t result = 0;
+ uint8_t smd_detected[2] = {0, 0};
uint8_t b, c, d;
for (c = 0; c < 4; c++)
{
uint32_t smd_gamepad_data = get_smd_gamepad();
- for (d = 0; d < 2; d++)
+ for (d = 0; d < 2; d++) // for each controller
{
if ((smd_gamepad_data & 0b00001111) || (c < 2)) // 3-button mode
{
@@ -197,6 +262,10 @@ uint32_t get_smd_gamepad_decoded(void)
case 1: // Down
set_bit(result, 9 + d*16);
break;
+ case 2: // always low
+ case 3:
+ smd_detected[d] = 1;
+ break;
case 4: // A
set_bit(result, 0 + d*16);
break;
@@ -250,6 +319,25 @@ uint32_t get_smd_gamepad_decoded(void)
smd_gamepad_data >>= 16;
}
}
+ if (!smd_detected[0] || !smd_detected[1]) // SMD gamepad is not connected?
+ {
+#ifdef SMD_USE_DENDY9_PIN
+ // so maybe it's 9-pin dendy gamepad?
+ for (d = 0; d < 2; d++)
+ {
+ if (!smd_detected[d])
+ {
+ init_dendy_9pin(d);
+ _delay_us(50);
+ uint32_t dendy_data = ~get_dendy_9pin(d);
+ result &= ~(0xFFFFUL << (d*16));
+ result |= ((dendy_data & 0x0F) | ((dendy_data & 0xF0) << 4)) << (16*d);
+ }
+ }
+ init_smd_gamepad(); // back to SMD mode
+#endif
+ }
+
return result;
}
@@ -260,19 +348,26 @@ void init_dualshock_gamepad()
DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_COMMAND_PIN); // Command pin - login high
DUALSHOCK_PORT_DDR &= ~(1<<DUALSHOCK_DATA_PIN); // Data pin - input
DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_DATA_PIN); // Data pin - pull-up
- DUALSHOCK_PORT_DDR |= (1<<DUALSHOCK_ATTENTION_PIN); // Attention - output
- DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // Attention - logic high
DUALSHOCK_PORT_DDR |= (1<<DUALSHOCK_CLOCK_PIN); // Clock - output
DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_CLOCK_PIN); // Clock - logic high
+ DUALSHOCK_ATTENTION_DDR |= (1<<DUALSHOCK_ATTENTION_PIN); // Attention - output
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // Attention - logic high
+#ifdef DUALSHOCK_SECOND_ENABLED
+ DUALSHOCK_ATTENTION_DDR |= (1<<DUALSHOCK_ATTENTION_PIN2); // Attention 2 - output
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN2); // Attention 2 - logic high
+#endif
/*
DUALSHOCK_PORT_DDR &= ~(1<<DUALSHOCK_ACK_PIN); // Ack pin - input
DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_ACK_PIN); // Ack pin - pull-up
*/
}
-int dualshock_command(uint8_t* command, uint8_t* data, int length)
+int dualshock_command(uint8_t* command, uint8_t* data, int length, uint8_t controller_number)
{
- DUALSHOCK_PORT_PORT &= ~(1<<DUALSHOCK_ATTENTION_PIN); // Attention!
+ if (!controller_number)
+ DUALSHOCK_ATTENTION_PORT &= ~(1<<DUALSHOCK_ATTENTION_PIN); // Attention!
+ else
+ DUALSHOCK_ATTENTION_PORT &= ~(1<<DUALSHOCK_ATTENTION_PIN2); // Attention!
_delay_us(20);
int b, bit;
for (b = 0; b < length; b++) // Each byte...
@@ -292,7 +387,10 @@ int dualshock_command(uint8_t* command, uint8_t* data, int length)
}
if (b == 1 && data[1] == 0xFF) // Alternative device detection
{
- DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // No attention...
+ if (!controller_number)
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // No attention...
+ else
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN2); // No attention...
return 0;
}
/*
@@ -312,35 +410,38 @@ int dualshock_command(uint8_t* command, uint8_t* data, int length)
}
*/
}
- DUALSHOCK_PORT_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // No attention...
+ if (!controller_number)
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN); // No attention...
+ else
+ DUALSHOCK_ATTENTION_PORT |= (1<<DUALSHOCK_ATTENTION_PIN2); // No attention...
_delay_us(20);
return 1;
}
-int get_dualshock_gamepad(uint8_t* data, int size, uint8_t motor_small, uint8_t motor_large) // pointer to uint8_t[21], number of bytes to request, vibration...
+int get_dualshock_gamepad(uint8_t* data, int size, uint8_t motor_small, uint8_t motor_large, uint8_t controller_number) // pointer to uint8_t[21], number of bytes to request, vibration...
{
- static char dualshock_configered = 0;
+ static uint8_t dualshock_configered[2] = {0, 0};
uint8_t command_query[21] = {0x01, 0x42, 0, motor_small, motor_large, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- if (!dualshock_command(command_query, data, size))
+ if (!dualshock_command(command_query, data, size, controller_number))
{
- dualshock_configered = 0;
+ dualshock_configered[controller_number] = 0;
return 0;
}
- if (!dualshock_configered) // Need to reconfigure dualshock
+ if (!dualshock_configered[controller_number]) // Need to reconfigure dualshock
{
uint8_t command_config_mode[5] = {0x01, 0x43, 0x00, 0x01, 0x00};
- if (!dualshock_command(command_config_mode, data, sizeof(command_config_mode))) return 0;
+ if (!dualshock_command(command_config_mode, data, sizeof(command_config_mode), controller_number)) return 0;
uint8_t command_analog_mode[9] = {0x01, 0x44, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00};
- if (!dualshock_command(command_analog_mode, data, sizeof(command_analog_mode))) return 0;
+ if (!dualshock_command(command_analog_mode, data, sizeof(command_analog_mode), controller_number)) return 0;
uint8_t command_config_motors[9] = {0x01, 0x4D, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF};
- if (!dualshock_command(command_config_motors, data, sizeof(command_config_motors))) return 0;
+ if (!dualshock_command(command_config_motors, data, sizeof(command_config_motors), controller_number)) return 0;
uint8_t command_config_pressure[9] = {0x01, 0x4F, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00};
- if (!dualshock_command(command_config_pressure, data, sizeof(command_config_pressure))) return 0;
+ if (!dualshock_command(command_config_pressure, data, sizeof(command_config_pressure), controller_number)) return 0;
uint8_t command_config_mode_exit[8] = {0x01, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF};
- if (!dualshock_command(command_config_mode_exit, data, sizeof(command_config_mode_exit))) return 0;
- dualshock_configered = 1;
- if (!dualshock_command(command_query, data, size)) return 0;
+ if (!dualshock_command(command_config_mode_exit, data, sizeof(command_config_mode_exit), controller_number)) return 0;
+ dualshock_configered[controller_number] = 1;
+ if (!dualshock_command(command_query, data, size, controller_number)) return 0;
}
return 1;
}
diff --git a/nessmd2usb.hex b/nessmd2usb.hex
index 706aba3..8eb5dee 100644
--- a/nessmd2usb.hex
+++ b/nessmd2usb.hex
@@ -1,6 +1,6 @@
:10000000EAC0000004C1000002C1000000C10000FD
:10001000FEC00000FCC00000FAC00000F8C00000F4
-:10002000F6C00000F4C00000F2C000000C947F088D
+:10002000F6C00000F4C00000F2C000000C946109AA
:10003000EEC00000ECC00000EAC00000E8C0000014
:10004000E6C00000E4C00000E2C00000E0C0000024
:10005000DEC00000DCC00000DAC00000D8C0000034
@@ -28,9 +28,9 @@
:1001B0002F00440065006E00640079002000630099
:1001C0006F006E00740072006F006C006C006500C0
:1001D00072007300000011241FBECFEFD2E0DEBF1B
-:1001E000CDBF11E0A0E0B1E0E8EFF9E102C0059079
+:1001E000CDBF11E0A0E0B1E0E4ECFBE102C005907E
:1001F0000D92A031B107D9F711E0A0E1B1E001C043
-:100200001D92A533B107E1F776D00C94FA0CF8CE25
+:100200001D92A533B107E1F776D00C94E00DF8CE3E
:1002100008952E98089580910E0190910F010097F6
:1002200029F0019790930F0180930E0108950F9389
:100230001F93D9018091100190E001968370907016
@@ -40,16 +40,16 @@
:1002700080911001ECE1F1E0E80FF11D9081129600
:100280008C911297892B12968C93809110018F5F1D
:10029000FB01808383E090E0F8019183808381E01B
-:1002A0001F910F910895089580E091E00C94930BB5
-:1002B00080E091E00E94720BE2EEF0E080818460C9
+:1002A0001F910F910895089580E091E00C94790CCE
+:1002B00080E091E00E94580CE2EEF0E080818460E2
:1002C00080832E9A089584B7877F84BF88E10FB614
:1002D000F89480936000109260000FBE80E090E080
:1002E00020E80FB6F89420936100809361000FBE60
-:1002F000F7D637D1F4C08F929F92AF92BF92CF9230
+:1002F000D9D73AD1F4C08F929F92AF92BF92CF924A
:10030000DF92EF92FF920F931F93CF93DF9384B10D
:10031000806C84B92E982F98D6DF7894B4E68B2E13
-:10032000912CACE9AA2EAFEFBA2EF5E0CF2EA2D2D7
-:100330007B018C0110D1AC01E0921C01C801AA27FD
+:10032000912CACE9AA2EAFEFBA2EF5E0CF2E02D376
+:100330007B018C0113D1AC01E0921C01C801AA27FA
:10034000BB2780931D01842F8F7080931E01852F02
:100350008F7080931F01BB27A12F902F8F2D6FE0EF
:10036000D62ED822812F9927AA27BB27782F7F70D6
@@ -66,7 +66,7 @@
:1004100004C0EC5EFE4F118210822F5F3F4F2430EC
:10042000310509F0B1CFE114F1040105110511F412
:10043000452B11F02F9A01C02F98C0E0D0E08C2DF1
-:100440008A95F1F780E091E00E94A30A0E948E0A4B
+:100440008A95F1F780E091E00E94890B0E94740B7D
:10045000219683E0C83ED80709F469CFF0CFDA01CE
:100460009330B1F0943028F4913041F0923079F526
:100470000AC0913211F1923251F524C0ECE5F1E05D
@@ -76,343 +76,372 @@
:1004B00012C0E6EAF1E08491F9CFE0E8F1E029E04A
:1004C00030E009C0E4E7F0E028EE30E004C0E0E00E
:1004D000F0E020E030E0ED93FC93C90108953C9AF0
-:1004E0003D9A3E98469A3F98479A0895449860E00E
-:1004F00070E040E050E0E5E345988E2F8A95F1F7F3
-:1005000026B186B1229526952695237030E021707C
-:100510003070042E02C0220F331F0A94E2F7881FA6
-:100520008827881F90E0042E02C0880F991F0A9424
-:10053000E2F7982F8827282B392B622B732B459AAB
-:100540008E2F8A95F1F74F5F5F4F48305105A1F626
-:10055000449ACB010895CADF9C0120953095C901CA
-:100560000895569A5098519852985398549855987F
-:10057000589A599A5A9A5B9A5C9A5D9A209821984F
-:100580002298239824982598289A299A2A9A2B9A6F
-:100590002C9A2D9A08952F923F924F925F926F92CC
-:1005A0007F928F929F92AF92BF92CF92DF92EF9203
-:1005B000FF920F931F93DF93CF93CDB7DEB72797AB
-:1005C0000FB6F894DEBF0FBECDBF5E9888EC90E00A
-:1005D000FC013197F1F7F9B009B149B029B029B15F
-:1005E0002F8369B16E8313B1A3B1C3B0A3B083B03D
-:1005F00063B05E9A0197F1F789B18D83E9B0E9B1F3
-:10060000EC83F9B1FB8329B12A8369B1698353B1C2
-:1006100083B123B143B163B1E3B1869590E08170BA
-:100620009070880F991F2695269530E021703070C4
-:10063000220F331F220F331F822B5170852B4695BB
-:100640004695469550E041705070B3E0440F551FF9
-:10065000BA95E1F7842B62956F7070E061707070ED
-:10066000F4E0660F771FFA95E1F7862BE295E695A1
-:10067000E770F0E0E170F07075E0EE0FFF1F7A9523
-:10068000E1F78E2B282F30E040E050E0522F442736
-:1006900033272227A695B0E0A170B070AA0FBB1F28
-:1006A000C694C694DD2481E0C822DD24CC0CDD1C78
-:1006B000CC0CDD1CAC291170A12BA694A694A69499
-:1006C000BB24E1E0AE22BB2413E0AA0CBB1C1A95AC
-:1006D000E1F7AA298294BFE08B229924F1E08F22CE
-:1006E0009924F4E0880C991CFA95E1F7A829629402
-:1006F0006694E7E06E22772461E06622772475E055
-:10070000660C771C7A95E1F7A6298A2F90E0A0E085
-:10071000B0E0DC0199278827282B392B4A2B5B2B4B
-:10072000069510E001701070000F111F469446945A
-:10073000552481E048225524440C551C440C551C7A
-:100740000429E1E0FE220F292694269426943324DE
-:10075000F1E02F22332413E0220C331C1A95E1F729
-:1007600002296F8162956F70862F90E08170907082
-:10077000B4E0880F991FBA95E1F7082B8E81829516
-:10078000869587708E8390E081709070A5E0880FC9
-:10079000991FAA95E1F7082B802F90E0A0E0B0E028
-:1007A000282B392B4A2B5B2BE694FF24E1E0EE2229
-:1007B000FF24EE0CFF1CFC81F695F6958F2F90E040
-:1007C00081709070880F991F880F991FE82A6D819A
-:1007D0006170E62A8B818695869586958B8390E05D
-:1007E0008170907073E0880F991F7A95E1F7E82A7D
-:1007F000EA81E295EF708E2F90E08170907064E056
-:10080000880F991F6A95E1F7E82AF981F295F69524
-:10081000F7708F2F90E08170907005E0880F991F1E
-:100820000A95E1F7E82A8E2D90E0A0E0B0E0BA2F1B
-:10083000A92F982F8827282B392B4A2B5B2BB901FE
-:10084000CA0127960FB6F894DEBF0FBECDBFCF9179
-:10085000DF911F910F91FF90EF90DF90CF90BF90AD
-:10086000AF909F908F907F906F905F904F903F9050
-:100870002F9008952F923F924F925F926F927F92A6
-:100880008F929F92AF92BF92CF92DF92EF92FF92A0
-:100890000F931F93DF93CF93CDB7DEB7E1970FB6DA
-:1008A000F894DEBF0FBECDBFEE24FF24870119866A
-:1008B00051E0A52EB12CC12CD12C6DDE3B014C0199
-:1008C00020E030E066E070E0D401C3018F709070EA
-:1008D000A070B0700097A105B10509F47FC0285F32
-:1008E0003F4FD601C501022E04C0880F991FAA1FD1
-:1008F000BB1F0A94D2F78EA79FA7A8ABB9AB2F5FF7
-:100900003F4FD601C501022E04C0880F991FAA1FB0
-:10091000BB1F0A94D2F78AA79BA7ACA7BDA72950F3
-:100920003040D601C501022E04C0880F991FAA1FAE
-:10093000BB1F0A94D2F78D839E83AF83B887D601FD
-:10094000C501062E04C0880F991FAA1FBB1F0A9459
-:10095000D2F789839A83AB83BC83265F3F4FD6014E
-:10096000C501022E04C0880F991FAA1FBB1F0A943D
-:10097000D2F78E8F9F8FA8A3B9A32F5F3F4FD601C9
-:10098000C501022E04C0880F991FAA1FBB1F0A941D
-:10099000D2F78A8F9B8FAC8FBD8F2A503040D60103
-:1009A000C501022E04C0880F991FAA1FBB1F0A94FD
-:1009B000D2F78E8B9F8BA88FB98F2F5F3F4F15017A
-:1009C0002601022E04C0220C331C441C551C0A9420
-:1009D000D2F722503040E0E0F0E005C09985923037
-:1009E00008F058C07CCFD401C3010E2E04C0B695C8
-:1009F000A795979587950A94D2F781709070892B67
-:100A000009F042C0E53041F1E63038F4E130B1F0B0
-:100A1000E13078F0E430C1F51AC0EB3039F1EC3058
-:100A200018F4EA3089F51DC0EC3029F1ED3061F59C
-:100A300027C08EA59FA5A8A9B9A904C08AA59BA572
-:100A4000ACA5BDA5E82AF92A0A2B1B2B1DC08D8158
-:100A50009E81AF81B885F6CF89819A81AB81BC81B7
-:100A6000F1CF8E8D9F8DA8A1B9A1ECCF8A8D9B8DE2
-:100A7000AC8DBD8DE7CF8E899F89A88DB98DE2CFD2
-:100A8000E228F328042915293196EE30F10509F002
-:100A9000AACFA0C0D601C501022E04C0880F991F9D
-:100AA000AA1FBB1F0A94D2F78EA39FA3A8A7B9A71A
-:100AB000D601C501062E04C0880F991FAA1FBB1FAF
-:100AC0000A94D2F78AA39BA3ACA3BDA32B5F3F4F8D
-:100AD000D601C501022E04C0880F991FAA1FBB1F93
-:100AE0000A94D2F78A8B9B8BAC8BBD8B2150304004
-:100AF000D601C501022E04C0880F991FAA1FBB1F73
-:100B00000A94D2F78E879F87A88BB98B21503040EB
-:100B1000D601C501022E04C0880F991FAA1FBB1F52
-:100B20000A94D2F78A879B87AC87BD872C5F3F4F9B
-:100B300015012601022E04C0220C331C441C551C36
-:100B40000A94D2F727503040E4E0F0E0D401C3012A
-:100B50000E2E04C0B695A795979587950A94D2F75F
-:100B600081709070892B89F5E830E1F0E93028F444
-:100B7000E43051F0E53049F50CC0EA30E9F0EA30F4
-:100B8000B0F0EB3011F51DC08EA19FA1A8A5B9A5AD
-:100B900004C08AA19BA1ACA1BDA1E82AF92A0A2B15
-:100BA0001B2B13C08A899B89AC89BD89F6CF8E85A2
-:100BB0009F85A889B989F1CF8A859B85AC85BD853C
-:100BC000ECCFE228F328042915293196EC30F10501
-:100BD00009F0BCCF205F3F4F605F7F4F203231056F
-:100BE00021F03401882499246FCE99859F5F9987DD
-:100BF000943009F062CEB701C801E1960FB6F894BF
-:100C0000DEBF0FBECDBFCF91DF911F910F91FF903F
-:100C1000EF90DF90CF90BF90AF909F908F907F909C
-:100C20006F905F904F903F902F9008959C0140915E
-:100C30003301509134014617570718F4F90190E039
-:100C40003DC06115710511F0AB01F8CF8091E8004E
-:100C50008E778093E80040E050E0F0CF80912C0147
-:100C6000882309F441C0853009F440C08091E80030
-:100C700083FD3EC08091E80082FD30C08091E80095
-:100C800080FF1CC08091F200282F30E007C08191C6
-:100C90008093F100415050402F5F3F4F4115510567
-:100CA00019F02830310598F390E02830310509F427
-:100CB00091E08091E8008E778093E800411551051E
-:100CC00069F6992359F60AC080912C01882361F0B6
-:100CD000853061F08091E80083FD0AC08091E800D2
-:100CE00082FFF2CF80E0089582E0089583E00895C6
-:100CF00081E008959C016115710529F48091E80057
-:100D00008B778093E800F90120C080912C01882323
-:100D100061F1853061F18091E80083FF02C081E0DC
-:100D200008958091E80082FFF0CF06C08091F10025
-:100D300081936150704021F08091F2008823B1F7D7
-:100D40008091E8008B778093E80061157105E9F6E2
-:100D500006C080912C01882341F0853041F08091BC
-:100D6000E80080FFF6CF80E0089582E0089583E0F8
-:100D700008959C0140913301509134014617570763
-:100D800018F4F90190E03EC06115710511F0AB0156
-:100D9000F8CF8091E8008E778093E80040E050E043
-:100DA000F0CF80912C01882309F442C0853009F4EA
-:100DB00041C08091E80083FD3FC08091E80082FD42
-:100DC00031C08091E80080FF1DC08091F200282F83
-:100DD00030E008C084918093F1003196415050403A
-:100DE0002F5F3F4F4115510519F02830310590F321
-:100DF00090E02830310509F491E08091E8008E7789
-:100E00008093E8004115510561F6992351F60AC017
-:100E100080912C01882361F0853061F08091E80099
-:100E200083FD0AC08091E80082FFF2CF80E0089540
-:100E300082E0089583E0089581E00895BF92CF9203
-:100E4000DF92EF92FF920F931F93CF93DF93182FB0
-:100E5000092F7B016A01D9D0B82E8823B1F5812FE3
-:100E6000902F9C01E901C114D10439F0F601808171
-:100E70009181E81AF90AC80FD91F00E010E022C0DA
-:100E80008091E80085FD16C08091E8008E77809300
-:100E9000E80044D3C114D10449F0F6018081918166
-:100EA000800F911F9183808385E010C0AED088238E
-:100EB00049F00CC089918093F1000894E108F10891
-:100EC0000F5F1F4FE114F104D9F68B2DDF91CF9105
-:100ED0001F910F91FF90EF90DF90CF90BF900895FA
-:100EE000382F282F2EC0822F8F708093E900231770
-:100EF00021F4762F942F50E006C07091EC00909171
-:100F0000ED005091F00091FF1BC08091EB008E7FAF
-:100F10008093EB008091ED008D7F8093ED008091B8
-:100F2000EB0081608093EB007093EC009093ED00F8
-:100F30005093F0008091EE0087FD02C080E008959C
-:100F40002F5F253080F23F703093E90081E00895F3
-:100F50000F931F93CF93DF93062FEC0110E02AC06D
-:100F60009881992329F16B81E981FA812C81892F5C
-:100F70008F70853018F5223010F452E001C056E031
-:100F800040E028E030E003C04F5F220F331F2E17F0
-:100F90003F07D0F36295660F660F607C991F992713
-:100FA000991F692B4295407F452B9ADF882331F0AA
-:100FB0001F5F25961017A0F281E001C080E0DF914D
-:100FC000CF911F910F91089580912D0188239CF45A
-:100FD00004C080912C018823B9F08091E80082FF41
-:100FE000F8CF8091E8008B778093E8000895809196
-:100FF0002C01882349F08091E80080FFF8CF809190
-:10100000E8008E778093E80008954091E4005091C5
-:10101000E50024E68091EC0080FF24C08091E80088
-:1010200080FD1EC080912C01882311F482E0089578
-:10103000853011F483E008958091EB0085FF02C0B4
-:1010400081E008958091E4009091E5008417950770
-:1010500009F3222311F484E008952150AC01DACF82
-:1010600080E008958091E80082FFDCCFF9CF41D085
-:1010700043D08091D8008F778093D8008091D8009A
-:1010800080688093D8008091D8008F7D8093D800AD
-:1010900084E089BD86E089BD09B400FEFDCF1092D1
-:1010A0002C011092280110922A011092290180E04F
-:1010B00060E042E015DF8091E1008E7F8093E100E7
-:1010C0008091E20081608093E2008091E20088607C
-:1010D0008093E2008091E0008E7F8093E00008958D
-:1010E000E3E6F0E080818E7F808381E080932B01B6
-:1010F000BECF1092E20008951092E10008951F9271
-:101100000F920FB60F9211242F933F934F935F933B
-:101110006F937F938F939F93AF93BF93EF93FF93BF
-:101120008091E10082FF0AC08091E20082FF06C048
-:101130008091E1008B7F8093E1006DD88091E10088
-:1011400080FF17C08091E20080FF13C08091E20011
-:101150008E7F8093E2008091E20080618093E200C4
-:101160008091D80080628093D80019BC10922C0125
-:1011700050D88091E10084FF2FC08091E20084FF6D
-:101180002BC084E089BD86E089BD09B400FEFDCF97
-:101190008091D8008F7D8093D8008091E1008F7E70
-:1011A0008093E1008091E2008F7E8093E200809145
-:1011B000E20081608093E20080912801882311F091
-:1011C00084E007C08091E30087FD02C081E001C098
-:1011D00083E080932C011CD88091E10083FF22C022
-:1011E0008091E20083FF1EC08091E100877F8093A1
-:1011F000E10082E080932C01109228018091E100AF
-:101200008E7F8093E1008091E2008E7F8093E200E8
-:101210008091E20080618093E20080E060E042E043
-:101220005FDE7BD1FF91EF91BF91AF919F918F9145
-:101230007F916F915F914F913F912F910F900FBED2
-:101240000F901F9018951F93DF93CF93CDB7DEB704
-:10125000AC970FB6F894DEBF0FBECDBFEDE2F1E064
-:101260008091F100819321E0E533F207C9F71CD8A2
-:101270008091E80083FF39C180912D0130912E01CA
-:10128000353009F487C0363040F43130C9F131309F
-:1012900070F0333009F029C133C0383009F4F6C09A
-:1012A000393009F405C1363009F01FC196C08038C5
-:1012B00021F0823809F019C108C09091290180916C
-:1012C0002A01882399F0926011C0809131018F70BA
-:1012D0008093E9008091EB0090E025E0969587955A
-:1012E0002A95E1F7982F91701092E9008091E8001B
-:1012F000877F8093E8009093F1001092F100D1C0B5
-:10130000882319F0823009F0F0C090E08F7190705E
-:10131000009721F0029709F0E8C00CC080912F01DE
-:10132000813009F0E2C010922A01333069F58093D0
-:101330002A012AC080912F01882331F520913101A3
-:101340002F7009F4D2C02093E9008091EB0080FF58
-:101350001BC0333021F48091EB00806213C0809178
-:10136000EB0080618093EB0081E090E002C0880F89
-:10137000991F2A95E2F78093EA001092EA00809183
-:10138000EB0088608093EB001092E9008091E80008
-:10139000877F8AC0882309F0A8C010912F011F778A
-:1013A0008091E3008078812B8093E3008091E800B6
-:1013B000877F8093E80008DE8091E80080FFFCCF03
-:1013C0008091E30080688093E300112311F482E0B0
-:1013D00001C083E080932C0188C08058823008F0DF
-:1013E00084C080912F019091300123E08C3D9207C1
-:1013F00009F033C083E08C838AE28B837FB7F89453
-:10140000DE0115966EE040E050E011E2E62FF0E0DC
-:1014100010935700849140FF03C082958F706F5FD7
-:101420008F70282F30E08A3018F0C901C79602C0AB
-:10143000C901C0968D939D934F5F5F4F4431510515
-:1014400029F77FBF8091E800877F8093E800CE0175
-:1014500003966AE270E0EADB13C060913101AE01ED
-:101460004F5F5F4F0E942F02BC01009709F43DC0FF
-:101470008091E800877F8093E80089819A8179DCF8
-:101480008091E8008B778093E8002FC0803869F561
-:101490008091E800877F8093E80080912801809305
-:1014A000F1008091E8008E778093E8008DDD1DC00B
-:1014B0008823D9F490912F019230B8F48091E800FC
-:1014C000877F8093E800909328017EDD809128013A
-:1014D000882331F48091E30087FD02C081E001C0E0
-:1014E00084E080932C010E9458018091E80083FFE2
-:1014F0000AC08091E800877F8093E8008091EB002C
-:1015000080628093EB00AC960FB6F894DEBF0FBEFE
-:10151000CDBFCF91DF911F91089508951F938091C2
-:101520002C01882371F01091E9008091EC00109259
-:10153000E9008091E80083FF01C085DE1F701093F1
-:10154000E9001F9108954F925F926F927F928F9260
-:101550009F92AF92BF92CF92DF92EF92FF920F9342
-:101560001F93DF93CF9300D00F92CDB7DEB77C01EE
-:101570006DB67EB680912C01843009F09AC020911E
-:10158000E4003091E500F701828593858217930787
-:1015900009F48FC081818F708093E9008091E80009
-:1015A00085FF87C05DB64EB6408550E08DB79EB7CB
-:1015B000841B950B0FB6F8949EBF0FBE8DBF0DB761
-:1015C0001EB70F5F1F4F19821B821A82C02E912EE9
-:1015D000C80160E070E050E006D2C701BE016F5F55
-:1015E0007F4F40E098018E010E5F1F4F0E94170150
-:1015F000882EF70184859585892B19F4AA24BB24AC
-:101600000BC020E0F70186859785892B09F021E042
-:1016100081E02827A22EBB24F7010681178101153E
-:10162000110511F4DD2412C04A815B818C2D992DA6
-:10163000B801C3D1DD24009711F0DD24D394F70164
-:101640004085C8016C2D792D50E0C4D18A819B81E1
-:10165000892B01F1882021F4DD2011F4AB28D1F091
-:10166000F701848595859787868781818F70809320
-:10167000E9008981882311F08093F1006A817B81E0
-:101680008C2D992D40E050E0D9DB8091E8008E77D9
-:101690008093E8008091E4009091E500F701938742
-:1016A0008287252D342DC9010FB6F8949EBF0FBE39
-:1016B0008DBF0FB6F8947EBE0FBE6DBE0F900F901B
-:1016C0000F90CF91DF911F910F91FF90EF90DF90DE
-:1016D000CF90BF90AF909F908F907F906F905F90D2
-:1016E0004F900895CF93DF93DC010996FC0187E0CA
-:1016F000EF0119928A95E9F781E019968C93199771
-:1017000084EF91E01D969C938E931C9783E0149632
-:101710008C931497CD01019661E01ADC811181E070
-:10172000DF91CF9108956F927F928F929F92AF92A7
-:10173000BF92CF92DF92EF92FF920F931F93DF93AE
-:10174000CF9300D00F92CDB7DEB76C016DB67EB6E9
-:101750008091E80083FF1AC1F601808190E020911A
-:101760003101309132012817390709F00FC18091FA
-:101770002E01833009F4B2C0843030F4813071F02E
-:10178000823009F003C1E6C08A3009F4CBC08B3047
-:1017900009F4B5C0893009F0F9C05CC080912D0111
-:1017A000813A09F0F3C09DB68EB61B821A828091F1
-:1017B0002F01109130018983F601408550E08DB7EB
-:1017C0009EB7841B950B0FB6F8949EBF0FBE8DBFBE
-:1017D000EDB6FEB60894E11CF11CBE2CAF2CC7017F
-:1017E00060E070E050E0FFD01150C601BE016F5FB5
-:1017F0007F4F412F97018E010E5F1F4F0E941701EF
-:10180000F601268137812115310529F04085C9016E
-:10181000B70150E0DFD01092E9008091E800877FA7
-:101820008093E8008981882311F08093F1006A8118
-:101830007B818B2D9A2DFAD98091E8008B7780934C
-:10184000E800292D382DC9010FB6F8949EBF0FBEB0
-:101850008DBF9CC080912D01813209F097C09DB64B
-:101860008EB60091330110913401A0902F01B090F9
-:1018700030018DB79EB7801B910B0FB6F8949EBFB9
-:101880000FBE8DBFEDB6FEB60894E11CF11C809131
-:10189000E800877F8093E800C701B8012BDA8091C8
-:1018A000E8008E778093E80080E090E0AA2011F0B5
-:1018B00081E090E0BA94E80EF91E081B190BC601EE
-:1018C0006A2D4B2D97010E945301892D982D9C0163
-:1018D0000FB6F8943EBF0FBE2DBF58C080912D01AA
-:1018E000813A09F053C08091E800877F8093E80037
-:1018F0008091E80080FFFCCFF60181853FC0809198
-:101900002D01813209F042C08091E800877F8093E9
-:10191000E8005ADB90E080912F01811191E0F601FF
-:10192000918734C080912D01813281F58091E8004A
-:10193000877F8093E80048DB80912F0190913001F0
-:10194000807036E0969587953A95E1F7F601958790
-:1019500084871CC080912D01813AC1F48091E800F8
-:10196000877F8093E8008091E80080FFFCCFF6013C
-:101970008485958596958795969587958093F100B2
-:101980008091E8008E778093E8001EDB0FB6F89414
-:101990007EBE0FBE6DBE0F900F900F90CF91DF9166
-:1019A0001F910F91FF90EF90DF90CF90BF90AF907D
-:1019B0009F908F907F906F900895FB01DC0104C091
-:1019C0008D910190801921F441505040C8F7881B37
-:1019D000990B0895FB01DC0102C001900D9241506A
-:1019E0005040D8F70895DC0101C06D93415050403C
-:0819F000E0F70895F894FFCF21
-:1019F8000081080000011101030000000000000040
+:1004E0003D9A3E98469A3F98479A0895449885E3E6
+:1004F0008A95F1F760E070E040E050E0E5E3459870
+:100500008E2F8A95F1F726B186B1229526952695EC
+:10051000237030E021703070042E02C0220F331F90
+:100520000A94E2F7881F8827881F90E0042E02C0F3
+:10053000880F991F0A94E2F7982F8827282B392BC8
+:10054000622B732B459A8E2F8A95F1F74F5F5F4F81
+:1005500048305105A1F6449ACB010895C7DF9C01AC
+:1005600020953095C9010895569A509851985298FF
+:10057000539854985598589A599A5A9A5B9A5C9AF3
+:100580005D9A209821982298239824982598289A53
+:10059000299A2A9A2B9A2C9A2D9A08952F923F9253
+:1005A0004F925F926F927F928F929F92AF92BF9283
+:1005B000CF92DF92EF92FF920F931F93DF93CF932F
+:1005C000CDB7DEB727970FB6F894DEBF0FBECDBF0D
+:1005D0005E9888EC90E0FC013197F1F7F9B009B131
+:1005E00049B029B029B12F8369B16E8313B1A3B18A
+:1005F000C3B0A3B083B063B05E9A0197F1F789B13D
+:100600008D83E9B0E9B1EC83F9B1FB8329B12A8389
+:1006100069B1698353B183B123B143B163B1E3B12C
+:10062000869590E081709070880F991F2695269589
+:1006300030E021703070220F331F220F331F822BC6
+:100640005170852B46954695469550E04170507007
+:10065000B3E0440F551FBA95E1F7842B62956F7094
+:1006600070E061707070F4E0660F771FFA95E1F743
+:10067000862BE295E695E770F0E0E170F07075E0AA
+:10068000EE0FFF1F7A95E1F78E2B282F30E040E028
+:1006900050E0522F442733272227A695B0E0A170BF
+:1006A000B070AA0FBB1FC694C694DD2481E0C82297
+:1006B000DD24CC0CDD1CCC0CDD1CAC291170A12B75
+:1006C000A694A694A694BB24E1E0AE22BB2413E03A
+:1006D000AA0CBB1C1A95E1F7AA298294BFE08B22D1
+:1006E0009924F1E08F229924F4E0880C991CFA9562
+:1006F000E1F7A82962946694E7E06E22772461E02E
+:100700006622772475E0660C771C7A95E1F7A629B6
+:100710008A2F90E0A0E0B0E0DC0199278827282B01
+:10072000392B4A2B5B2B069510E001701070000FDF
+:10073000111F46944694552481E048225524440CC8
+:10074000551C440C551C0429E1E0FE220F29269477
+:10075000269426943324F1E02F22332413E0220C34
+:10076000331C1A95E1F702296F8162956F70862F0D
+:1007700090E081709070B4E0880F991FBA95E1F70E
+:10078000082B8E818295869587708E8390E081708C
+:100790009070A5E0880F991FAA95E1F7082B802F8C
+:1007A00090E0A0E0B0E0282B392B4A2B5B2BE6949D
+:1007B000FF24E1E0EE22FF24EE0CFF1CFC81F69505
+:1007C000F6958F2F90E081709070880F991F880F99
+:1007D000991FE82A6D816170E62A8B81869586953E
+:1007E00086958B8390E08170907073E0880F991FDD
+:1007F0007A95E1F7E82AEA81E295EF708E2F90E092
+:100800008170907064E0880F991F6A95E1F7E82A7B
+:10081000F981F295F695F7708F2F90E081709070C6
+:1008200005E0880F991F0A95E1F7E82A8E2D90E0E0
+:10083000A0E0B0E0BA2FA92F982F8827282B392BBA
+:100840004A2B5B2BB901CA0127960FB6F894DEBF7D
+:100850000FBECDBFCF91DF911F910F91FF90EF9011
+:10086000DF90CF90BF90AF909F908F907F906F90D0
+:100870005F904F903F902F900895882349F45198AE
+:10088000529A539A549A599A5A9A5B9A5C9A089532
+:100890002198229A239A249A299A2A9A2B9A2C9A56
+:1008A0000895882319F55A9885E38A95F1F740E071
+:1008B00020E030E055E35B98852F8A95F1F789B108
+:1008C000869590E081709070022E02C0880F991F6B
+:1008D0000A94E2F7482B5B9A852F8A95F1F72F5FF0
+:1008E0003F4F2830310539F75A9A22C02A9885E3BC
+:1008F0008A95F1F740E020E030E055E32B98852F12
+:100900008A95F1F783B1869590E081709070022E00
+:1009100002C0880F991F0A94E2F7482B2B9A852F63
+:100920008A95F1F72F5F3F4F2830310539F72A9A22
+:10093000842F08952F923F924F925F926F927F92F1
+:100940008F929F92AF92BF92CF92DF92EF92FF92DF
+:100950000F931F93DF93CF93CDB7DEB7E7970FB613
+:10096000F894DEBF0FBECDBF19821A82EE24FF2499
+:1009700087011D86CE0101969FAB8EABB1E0AB2EF9
+:10098000B12CC12CD12C0ADE3B014C01DE011196A9
+:10099000BC83AB8320E030E066E070E0D401C301AB
+:1009A0008F709070A070B0700097A105B10509F428
+:1009B0007FC0285F3F4FD601C501022E04C0880FBB
+:1009C000991FAA1FBB1F0A94D2F78AAB9BABACAB93
+:1009D000BDAB2F5F3F4FD601C501022E04C0880F6B
+:1009E000991FAA1FBB1F0A94D2F78EA79FA7A8AB77
+:1009F000B9AB29503040D601C501022E04C0880F82
+:100A0000991FAA1FBB1F0A94D2F789879A87AB87C1
+:100A1000BC87D601C501062E04C0880F991FAA1FE6
+:100A2000BB1F0A94D2F78D839E83AF83B887265F5E
+:100A30003F4FD601C501022E04C0880F991FAA1F7F
+:100A4000BB1F0A94D2F78AA39BA3ACA3BDA32F5FBD
+:100A50003F4FD601C501022E04C0880F991FAA1F5F
+:100A6000BB1F0A94D2F78E8F9F8FA8A3B9A32A50D9
+:100A70003040D601C501022E04C0880F991FAA1F5D
+:100A8000BB1F0A94D2F78A8F9B8FAC8FBD8F2F5FCD
+:100A90003F4F15012601022E04C0220C331C441CBA
+:100AA000551C0A94D2F722503040E0E0F0E005C037
+:100AB0009D85923008F05DC07CCFD401C3010E2E1D
+:100AC00004C0B695A795979587950A94D2F781703B
+:100AD0009070892B09F047C0E43041F1E53028F4EB
+:100AE000E130B1F0E230E8F40EC0EB3071F1EC30FF
+:100AF00028F4E53001F1EA30B1F522C0EC3051F1D3
+:100B0000ED3089F52CC08AA99BA9ACA9BDA904C068
+:100B10008EA59FA5A8A9B9A9E82AF92A0A2B1B2BFB
+:100B200022C081E0AB81BC818C931DC089859A85F0
+:100B3000AB85BC85F1CF8D819E81AF81B885ECCF2F
+:100B40008AA19BA1ACA1BDA1E7CF8E8D9F8DA8A14D
+:100B5000B9A1E2CF8A8D9B8DAC8DBD8DDDCFE22812
+:100B6000F328042915293196EE30F10509F0A5CFB7
+:100B7000A0C0D601C501022E04C0880F991FAA1F6C
+:100B8000BB1F0A94D2F78AA79BA7ACA7BDA7D60123
+:100B9000C501062E04C0880F991FAA1FBB1F0A9407
+:100BA000D2F78EA39FA3A8A7B9A72B5F3F4FD6016B
+:100BB000C501022E04C0880F991FAA1FBB1F0A94EB
+:100BC000D2F78E8B9F8BA88FB98F21503040D601E2
+:100BD000C501022E04C0880F991FAA1FBB1F0A94CB
+:100BE000D2F78A8B9B8BAC8BBD8B21503040D601CA
+:100BF000C501022E04C0880F991FAA1FBB1F0A94AB
+:100C0000D2F78E879F87A88BB98B2C5F3F4F15013A
+:100C10002601022E04C0220C331C441C551C0A94CD
+:100C2000D2F727503040E4E0F0E0D401C3010E2EAB
+:100C300004C0B695A795979587950A94D2F78170C9
+:100C40009070892B89F5E830E1F0E93028F4E43040
+:100C500051F0E53049F50CC0EA30E9F0EA30B0F087
+:100C6000EB3011F51DC08AA59BA5ACA5BDA504C0A0
+:100C70008EA19FA1A8A5B9A5E82AF92A0A2B1B2BAA
+:100C800013C08E899F89A88DB98DF6CF8A899B89DB
+:100C9000AC89BD89F1CF8E859F85A889B989ECCFB4
+:100CA000E228F328042915293196EC30F10509F0E2
+:100CB000BCCF205F3F4F605F7F4FAB81BC811196FF
+:100CC000BC83AB832032310521F034018824992480
+:100CD00065CEBD85BF5FBD87B43009F054CE898134
+:100CE000882321F08A81882309F067C06E01089467
+:100CF000C11CD11CAA24BB24FFEF4F2EFFEF5F2E97
+:100D0000612C712CE3E02E2E312C2C0E3D1E9C2CE0
+:100D1000EEA99E1AD6018C91882309F042C0892D34
+:100D2000ACDD88EC90E00197F1F7892DBADD90E019
+:100D300080959095AA2797FDA095BA2FA3019201BF
+:100D40000A2C04C0220F331F441F551F0A94D2F7E8
+:100D50002095309540955095E222F32204231523E7
+:100D60009C01AD01207F30704070507074E0220F04
+:100D7000331F441F551F7A95D1F78F709070A07064
+:100D8000B070282B392B4A2B5B2B0A2C04C0220F66
+:100D9000331F441F551F0A94D2F7E22AF32A042B6B
+:100DA000152B0894C11CD11CE0E1F0E0AE0EBF1E73
+:100DB000C214D30409F0ABCFD7DBB701C801E79663
+:100DC0000FB6F894DEBF0FBECDBFCF91DF911F915C
+:100DD0000F91FF90EF90DF90CF90BF90AF909F90DA
+:100DE0008F907F906F905F904F903F902F900895DD
+:100DF0009C0140913301509134014617570718F474
+:100E0000F90190E03DC06115710511F0AB01F8CF1B
+:100E10008091E8008E778093E80040E050E0F0CFCA
+:100E200080912C01882309F441C0853009F440C029
+:100E30008091E80083FD3EC08091E80082FD30C0D3
+:100E40008091E80080FF1CC08091F200282F30E0E4
+:100E500007C081918093F100415050402F5F3F4F78
+:100E60004115510519F02830310598F390E02830EC
+:100E7000310509F491E08091E8008E778093E800D5
+:100E80004115510569F6992359F60AC080912C0144
+:100E9000882361F0853061F08091E80083FD0AC00D
+:100EA0008091E80082FFF2CF80E0089582E008950B
+:100EB00083E0089581E008959C016115710529F48E
+:100EC0008091E8008B778093E800F90120C0809141
+:100ED0002C01882361F1853061F18091E80083FF66
+:100EE00002C081E008958091E80082FFF0CF06C043
+:100EF0008091F10081936150704021F08091F20067
+:100F00008823B1F78091E8008B778093E800611522
+:100F10007105E9F606C080912C01882341F08530E7
+:100F200041F08091E80080FFF6CF80E0089582E0F4
+:100F3000089583E008959C0140913301509134015C
+:100F40004617570718F4F90190E03EC06115710586
+:100F500011F0AB01F8CF8091E8008E778093E80024
+:100F600040E050E0F0CF80912C01882309F442C08A
+:100F7000853009F441C08091E80083FD3FC0809135
+:100F8000E80082FD31C08091E80080FF1DC08091A3
+:100F9000F200282F30E008C084918093F100319650
+:100FA000415050402F5F3F4F4115510519F02830F7
+:100FB000310590F390E02830310509F491E08091FB
+:100FC000E8008E778093E8004115510561F699237A
+:100FD00051F60AC080912C01882361F0853061F0C0
+:100FE0008091E80083FD0AC08091E80082FFF2CF83
+:100FF00080E0089582E0089583E0089581E00895F7
+:10100000BF92CF92DF92EF92FF920F931F93CF93F5
+:10101000DF93182F092F7B016A01D9D0B82E8823BE
+:10102000B1F5812F902F9C01E901C114D10439F051
+:10103000F60180819181E81AF90AC80FD91F00E0F2
+:1010400010E022C08091E80085FD16C08091E80084
+:101050008E778093E80048D3C114D10449F0F6019B
+:1010600080819181800F911F9183808385E010C0E2
+:10107000AED0882349F00CC089918093F100089488
+:10108000E108F1080F5F1F4FE114F104D9F68B2D31
+:10109000DF91CF911F910F91FF90EF90DF90CF9054
+:1010A000BF900895382F282F2EC0822F8F708093E5
+:1010B000E900231721F4762F942F50E006C0709199
+:1010C000EC009091ED005091F00091FF1BC08091D9
+:1010D000EB008E7F8093EB008091ED008D7F8093FD
+:1010E000ED008091EB0081608093EB007093EC0049
+:1010F0009093ED005093F0008091EE0087FD02C0C8
+:1011000080E008952F5F253080F23F703093E90032
+:1011100081E008950F931F93CF93DF93062FEC0187
+:1011200010E02AC09881992329F16B81E981FA8125
+:101130002C81892F8F70853018F5223010F452E001
+:1011400001C056E040E028E030E003C04F5F220FCE
+:10115000331F2E173F07D0F36295660F660F607C32
+:10116000991F9927991F692B4295407F452B9ADF3C
+:10117000882331F01F5F25961017A0F281E001C08F
+:1011800080E0DF91CF911F910F91089580912D0103
+:1011900088239CF404C080912C018823B9F08091AD
+:1011A000E80082FFF8CF8091E8008B778093E80019
+:1011B000089580912C01882349F08091E80080FFF8
+:1011C000F8CF8091E8008E778093E80008954091F1
+:1011D000E4005091E50024E68091EC0080FF24C0FB
+:1011E0008091E80080FD1EC080912C01882311F4BD
+:1011F00082E00895853011F483E008958091EB003A
+:1012000085FF02C081E008958091E4009091E5009F
+:101210008417950709F3222311F484E008952150DF
+:10122000AC01DACF80E008958091E80082FFDCCF46
+:10123000F9CF41D043D08091D8008F778093D800E8
+:101240008091D80080688093D8008091D8008F7DED
+:101250008093D80084E089BD86E089BD09B400FE92
+:10126000FDCF10922C011092280110922A011092A9
+:10127000290180E060E042E015DF8091E1008E7F8F
+:101280008093E1008091E20081608093E200809190
+:10129000E20088608093E2008091E0008E7F80937E
+:1012A000E0000895E3E6F0E080818E7F808381E0B6
+:1012B00080932B01BECF1092E20008951092E100BE
+:1012C00008951F920F920FB60F9211242F933F9300
+:1012D0004F935F936F937F938F939F93AF93BF933E
+:1012E000EF93FF938091E10082FF0BC08091E200B9
+:1012F00082FF07C08091E1008B7F8093E1000E9414
+:101300000B018091E10080FF18C08091E20080FF16
+:1013100014C08091E2008E7F8093E2008091E20011
+:1013200080618093E2008091D80080628093D80031
+:1013300019BC10922C010E9409018091E10084FFE8
+:1013400030C08091E20084FF2CC084E089BD86E03B
+:1013500089BD09B400FEFDCF8091D8008F7D8093B8
+:10136000D8008091E1008F7E8093E1008091E200BF
+:101370008F7E8093E2008091E20081608093E200A2
+:1013800080912801882311F084E007C08091E30058
+:1013900087FD02C081E001C083E080932C010E94A0
+:1013A00008018091E10083FF22C08091E20083FF69
+:1013B0001EC08091E100877F8093E10082E08093EE
+:1013C0002C01109228018091E1008E7F8093E10032
+:1013D0008091E2008E7F8093E2008091E200806144
+:1013E0008093E20080E060E042E05CDE7CD1FF912F
+:1013F000EF91BF91AF919F918F917F916F915F918D
+:101400004F913F912F910F900FBE0F901F90189505
+:101410001F93DF93CF93CDB7DEB7AC970FB6F89499
+:10142000DEBF0FBECDBFEDE2F1E08091F100819310
+:1014300021E0E533F207C9F70E9454018091E800EA
+:1014400083FF39C180912D0130912E01353009F48F
+:1014500087C0363040F43130C9F1313070F033306C
+:1014600009F029C133C0383009F4F6C0393009F425
+:1014700005C1363009F01FC196C0803821F082388E
+:1014800009F019C108C09091290180912A0188238F
+:1014900099F0926011C0809131018F708093E900C2
+:1014A0008091EB0090E025E0969587952A95E1F7ED
+:1014B000982F91701092E9008091E800877F8093C7
+:1014C000E8009093F1001092F100D1C0882319F048
+:1014D000823009F0F0C090E08F719070009721F099
+:1014E000029709F0E8C00CC080912F01813009F00B
+:1014F000E2C010922A01333069F580932A012AC094
+:1015000080912F01882331F5209131012F7009F44A
+:10151000D2C02093E9008091EB0080FF1BC03330E4
+:1015200021F48091EB00806213C08091EB00806118
+:101530008093EB0081E090E002C0880F991F2A950C
+:10154000E2F78093EA001092EA008091EB00886055
+:101550008093EB001092E9008091E800877F8AC0B9
+:10156000882309F0A8C010912F011F778091E30014
+:101570008078812B8093E3008091E800877F8093BF
+:10158000E80004DE8091E80080FFFCCF8091E3005A
+:1015900080688093E300112311F482E001C083E0AE
+:1015A00080932C0188C08058823008F084C08091DC
+:1015B0002F019091300123E08C3D920709F033C058
+:1015C00083E08C838AE28B837FB7F894DE011596E3
+:1015D0006EE040E050E011E2E62FF0E0109357009B
+:1015E000849140FF03C082958F706F5F8F70282FAA
+:1015F00030E08A3018F0C901C79602C0C901C09610
+:101600008D939D934F5F5F4F4431510529F77FBF05
+:101610008091E800877F8093E800CE0103966AE21C
+:1016200070E0E6DB13C060913101AE014F5F5F4FA8
+:101630000E942F02BC01009709F43DC08091E80090
+:10164000877F8093E80089819A8175DC8091E8002A
+:101650008B778093E8002FC0803869F58091E8008F
+:10166000877F8093E800809128018093F10080912A
+:10167000E8008E778093E80089DD1DC08823D9F4C7
+:1016800090912F019230B8F48091E800877F809389
+:10169000E800909328017ADD80912801882331F4B5
+:1016A0008091E30087FD02C081E001C084E0809367
+:1016B0002C010E9458018091E80083FF0AC08091AC
+:1016C000E800877F8093E8008091EB008062809340
+:1016D000EB00AC960FB6F894DEBF0FBECDBFCF9136
+:1016E000DF911F91089508951F9380912C01882305
+:1016F00071F01091E9008091EC001092E900809166
+:10170000E80083FF01C084DE1F701093E9001F9181
+:1017100008954F925F926F927F928F929F92AF92B5
+:10172000BF92CF92DF92EF92FF920F931F93DF93BE
+:10173000CF9300D00F92CDB7DEB77C016DB67EB6E9
+:1017400080912C01843009F09AC02091E4003091FE
+:10175000E500F701828593858217930709F48FC00E
+:1017600081818F708093E9008091E80085FF87C0B8
+:101770005DB64EB6408550E08DB79EB7841B950B85
+:101780000FB6F8949EBF0FBE8DBF0DB71EB70F5F8B
+:101790001F4F19821B821A82C02E912EC80160E051
+:1017A00070E050E006D2C701BE016F5F7F4F40E09E
+:1017B00098018E010E5F1F4F0E941701882EF701BE
+:1017C00084859585892B19F4AA24BB240BC020E0BD
+:1017D000F70186859785892B09F021E081E028278C
+:1017E000A22EBB24F701068117810115110511F402
+:1017F000DD2412C04A815B818C2D992DB801C3D1A3
+:10180000DD24009711F0DD24D394F7014085C80151
+:101810006C2D792D50E0C4D18A819B81892B01F1F7
+:10182000882021F4DD2011F4AB28D1F0F701848564
+:1018300095859787868781818F708093E90089815C
+:10184000882311F08093F1006A817B818C2D992D82
+:1018500040E050E0D5DB8091E8008E778093E8008F
+:101860008091E4009091E500F70193878287252D10
+:10187000342DC9010FB6F8949EBF0FBE8DBF0FB6B1
+:10188000F8947EBE0FBE6DBE0F900F900F90CF915B
+:10189000DF911F910F91FF90EF90DF90CF90BF905D
+:1018A000AF909F908F907F906F905F904F90089532
+:1018B000CF93DF93DC010996FC0187E0EF011992D9
+:1018C0008A95E9F781E019968C93199784EF91E056
+:1018D0001D969C938E931C9783E014968C9314977B
+:1018E000CD01019661E016DC811181E0DF91CF919D
+:1018F00008956F927F928F929F92AF92BF92CF92F4
+:10190000DF92EF92FF920F931F93DF93CF9300D05C
+:101910000F92CDB7DEB76C016DB67EB68091E80050
+:1019200083FF1AC1F601808190E02091310130914E
+:1019300032012817390709F00FC180912E01833039
+:1019400009F4B2C0843030F4813071F0823009F093
+:1019500003C1E6C08A3009F4CBC08B3009F4B5C0AE
+:10196000893009F0F9C05CC080912D01813A09F0FD
+:10197000F3C09DB68EB61B821A8280912F01109102
+:1019800030018983F601408550E08DB79EB7841BF6
+:10199000950B0FB6F8949EBF0FBE8DBFEDB6FEB689
+:1019A0000894E11CF11CBE2CAF2CC70160E070E074
+:1019B00050E0FFD01150C601BE016F5F7F4F412F35
+:1019C00097018E010E5F1F4F0E941701F6012681BD
+:1019D00037812115310529F04085C901B70150E053
+:1019E000DFD01092E9008091E800877F8093E800C3
+:1019F0008981882311F08093F1006A817B818B2D8E
+:101A00009A2DF6D98091E8008B778093E800292DF4
+:101A1000382DC9010FB6F8949EBF0FBE8DBF9CC074
+:101A200080912D01813209F097C09DB68EB600914C
+:101A3000330110913401A0902F01B09030018DB787
+:101A40009EB7801B910B0FB6F8949EBF0FBE8DBF43
+:101A5000EDB6FEB60894E11CF11C8091E800877F8A
+:101A60008093E800C701B80127DA8091E8008E77FB
+:101A70008093E80080E090E0AA2011F081E090E0FF
+:101A8000BA94E80EF91E081B190BC6016A2D4B2DDE
+:101A900097010E945301892D982D9C010FB6F8944F
+:101AA0003EBF0FBE2DBF58C080912D01813A09F075
+:101AB00053C08091E800877F8093E8008091E80020
+:101AC00080FFFCCFF60181853FC080912D018132DE
+:101AD00009F042C08091E800877F8093E80056DBE0
+:101AE00090E080912F01811191E0F601918734C03F
+:101AF00080912D01813281F58091E800877F80936C
+:101B0000E80044DB80912F0190913001807036E035
+:101B1000969587953A95E1F7F601958784871CC0DD
+:101B200080912D01813AC1F48091E800877F8093F4
+:101B3000E8008091E80080FFFCCFF6018485958560
+:101B400096958795969587958093F1008091E8000A
+:101B50008E778093E8001ADB0FB6F8947EBE0FBE36
+:101B60006DBE0F900F900F90CF91DF911F910F914D
+:101B7000FF90EF90DF90CF90BF90AF909F908F90AD
+:101B80007F906F900895FB01DC0104C08D9101905E
+:101B9000801921F441505040C8F7881B990B0895D3
+:101BA000FB01DC0102C001900D9241505040D8F77A
+:101BB0000895DC0101C06D9341505040E0F7089555
+:041BC000F894FFCFC7
+:101BC4000081080000011101030000000000000072
:00000001FF