Compare commits

..

169 commits

Author SHA1 Message Date
ladyada
b709c78954 Merge branch 'master' of https://github.com/arduino/ArduinoCore-samd into catchup_2019_10_26
(not working tho)
2019-10-26 21:35:56 -04:00
Martino Facchin
2ca7f7531d
Merge pull request #466 from nmaas87/master
Updated faulty gcc path in bootloader makefile
2019-10-24 13:01:25 +02:00
Nico Maas
f9521bbfc0 Updated faulty gcc path
Signed-off-by: Nico Maas <mail@nico-maas.de>
2019-10-24 12:24:00 +02:00
Martino Facchin
142814a5d2 Publish 1.8.4 2019-10-09 16:37:37 +02:00
Martino Facchin
eef7c6febc Revert "Temporarily remove mkrwan1310 from boards list"
This reverts commit e0d15ce0f7.
2019-10-09 16:36:56 +02:00
Martino Facchin
b0eb400803
Merge pull request #456 from arduino/remove-genuino
Remove Genuino Occurrences
2019-09-20 11:34:52 +02:00
Cristian Maglie
ed164f67be Remove Genuino and replace with Arduino on sketch upload 2019-09-20 11:31:10 +02:00
Luca Cipriani
01c0951313 remove geuino from build and .h files 2019-09-19 15:39:04 +02:00
Luca Cipriani
f3e6119a77 Remove Genuino 2019-09-19 15:15:50 +02:00
Nico Maas
ac5a61119f Update Bootloader_D21_M0_Pro_150427.hex
Remove erroneous two empty lines in the end as reported by @paul-hoffmann in #263 / https://github.com/arduino/ArduinoCore-samd/issues/263
2019-09-18 16:33:34 +02:00
Nico Maas
eb447919be Update Bootloader_D21_M0_150515.hex
Remove erroneous two empty lines in the end as reported by @paul-hoffmann in #263 / https://github.com/arduino/ArduinoCore-samd/issues/263
2019-09-18 16:33:34 +02:00
Jeff Rowberg
590b21b753 Add null pointer test to String destructor 2019-09-16 16:00:56 +02:00
Martino Facchin
d2de78ad7b
Merge pull request #449 from arduino/execute-notone-only-after-tone
Fixing infinite hang within 'noTone' if it is called before 'tone'
2019-09-16 11:29:51 +02:00
Alexander Entinger
5d74235ba2 Fixing infinite hang within 'noTone' if it is called before 'tone' was called at least once 2019-09-16 10:58:20 +02:00
Alexander Entinger
aef4af4c1e Bugfix - waiting for first ADC read to complete after ADC enable. 2019-09-03 10:45:55 +02:00
Martino Facchin
163ef56bbd Fix post_install script on Windows x86 (32bit) 2019-07-08 13:50:17 +02:00
Martino Facchin
dbd25c6e03 Release 1.8.3
Maintenance release to add Nano33IoT drivers
2019-07-08 12:38:31 +02:00
Martino Facchin
6762e4b9fb Update drivers to 1.4.3.0 2019-07-08 12:22:03 +02:00
Martino Facchin
4540784f35 Publish 1.8.2 2019-07-01 14:47:00 +02:00
Martino Facchin
eb629113e2 Fix commands for openocd 0.10.0
Fix bug introduced by 5704a06f
Double/triple {} surrounding filenames are not needed on unix but are on Win.

openocd 0.10.0 tcl interpreter (jimtcl) doesn't resolve curly braces recursively, while old did.

By surrounding with just one curly brace 0.10.0 is happy

Fixes #426 and #422
2019-06-28 17:17:28 +02:00
The Possessor
3ee886bc4f Fix array out of bounds in USB core 2019-06-28 10:00:08 +02:00
Martino Facchin
f80361f6bd Revert "USBDevice: interrupts are now enabled on init"
This reverts commit a8d208af70.

Fixes https://github.com/arduino/ArduinoCore-samd/issues/423 on Linux/Mac (and Windows when Arduino standard drivers are uninstalled)

Fix for normal behaviour on Windows is ongoing
2019-06-28 09:55:42 +02:00
Riccardo Rizzo
284bc5a318
Merge pull request #416 from Rocketct/master
Changed MKRGSM1400 variant to increase the reliability
2019-06-19 15:19:09 +02:00
Riccardo Rizzo
45163fae62 Changed MKRGSM1400 variant to increase the reliability
Changed input source control register value to avoid module's  hung due to discharge peak
this change increase the reliability  of the SARA when 2G band's are used
2019-06-05 15:35:29 +02:00
Martino Facchin
5c4d667dc7 Merge remote-tracking branch 'origin/beta' 2019-05-27 14:04:01 +02:00
Martino Facchin
566feb71d6
Merge pull request #413 from arduino/refactor-usb-stack
Using available defines instead of hardcoded values within USB stack
2019-05-27 13:59:57 +02:00
Martino Facchin
020b419fc1
Merge pull request #412 from James-Aylward/patch-1
Fixed an issue with interrupt pins
2019-05-27 13:59:41 +02:00
Martino Facchin
4d2bb9d0fb Merge remote-tracking branch 'origin/master' into staging 2019-05-27 13:58:09 +02:00
Alexander Entinger
3586e27dcb Using available defines/constants instead of hardcoded values for linestate 2019-05-27 08:44:04 +02:00
James Aylward
fa5075572f
Fixed an issue with interrupt pins
https://learn.adafruit.com/assets/47156
Fixed the discrepancy between the circuit playground diagram and the code. In the diagram, button A is labelled as an interrupt pin even though the code does not reflect this. This change fixes the issue.
2019-05-26 11:48:35 +10:00
Martino Facchin
0997a2e321 Update platform version to 1.8.1 2019-05-16 14:34:38 +02:00
Martino Facchin
980a990f9f Remove SoftwareSerial and MixedSerial libraries 2019-05-16 14:30:51 +02:00
Martino Facchin
4505276b03 NANO 33 IoT: remove references to R0 2019-05-16 14:30:51 +02:00
Martino Facchin
76416c01d2 Delete boards.txt.disabled 2019-05-16 14:30:51 +02:00
Martino Facchin
2b8150c36b [MKRNBV3] Reduce USB voltage limit to 3880mV
On module powerup there can be current spikes that make the USB voltage drop under 4.36V. This results in PGOOD fault and module lockup.
Only V3 seems affected, and FW A.02.01 even more.
2019-05-16 14:30:51 +02:00
Martino Facchin
eab09b44db USB: only clear pending interrupts explicitely 2019-05-16 14:30:51 +02:00
Martino Facchin
f87866ef59 USB: properly handle IRQ clash in DoubleBuffer endpoint 2019-05-16 14:30:51 +02:00
Martino Facchin
4e9cbc03af Use auxiliary RingBuffer for CDC Serial rx 2019-05-16 14:30:51 +02:00
Martino Facchin
a79f82b493 Remove CMSIS + gcc7 warnings 2019-05-16 14:30:51 +02:00
Martino Facchin
e0d15ce0f7 Temporarily remove mkrwan1310 from boards list 2019-05-16 14:30:51 +02:00
Martino Facchin
92efd74540 Add missing forward declaration of PINCOUNT_fn() 2019-05-16 14:28:46 +02:00
Martino Facchin
932537071b Rebuild MKRWAN1310 BL with I2C timeouts 2019-05-16 14:28:46 +02:00
Martino Facchin
206956dd47 [WIP] Enable battery charging on MKRWAN1310
Since MKRWAN1310 battery sense ADC pin is not connected we must enable the PMIC, check if it starts charging, eventually disable the charging circuitry.
ATM the bootloader is a bit pick and could hang the board on first upload.
2019-05-16 14:28:46 +02:00
Dario Pennisi
86081cbf35
Merge pull request #395 from per1234/digitalpotcontrol-delays
Add necessary delays to SPI DigitalPotControl example
2019-05-07 16:54:20 +02:00
Martino Facchin
c8094e7a37 Add 1 to available() if peek has been previously called
Fixes https://github.com/arduino/ArduinoCore-samd/issues/405; a proper fix require to use another RingBuffer (useless since the USB data is already internally buffered)
2019-04-29 14:24:40 +02:00
Martino Facchin
154166d321 Merge branch 'mkrwan1310' into beta 2019-04-29 13:08:33 +02:00
Martino Facchin
3c0fc11a43
Merge pull request #404 from arduino/cdc-bugfix
Removal of delay within USBDevice::ISRHandler
2019-04-29 12:59:07 +02:00
Sandeep Mistry
31104a1828 Correct and update keywords.txt 2019-04-26 09:17:20 -04:00
Sandeep Mistry
6802376ac8 I2S: Add API to set the buffer size (in bytes) 2019-04-26 09:17:20 -04:00
Alexander Entinger
4c5ac51cc9 Deleting superflous call to 'usbd.epBank0ResetReady' - this function is already called within 'USBDeviceClass::ISRHandler' and 'USBDeviceClass::recvControl' is called by 'handleClassInterfaceSetup' within the ISR
Bugfix - removal of delay within USBDeviceClass::ISRHandler
- remove stall requests of endpoint #0 OUT (bank #0) if present
- copy data from cache into structure instead of referencing it via pointer. When referencing via pointer the content of the structure can change if new data is written to the buffer.
- Fixing MULTI_PACKET_SIZE parameter of call to 'usbd.epBank0SetMultiPacketSize' within 'USBDeviceClass::armRecvCtrlOUT' to correct size, MULTI_PACKET_SIZE should not be set to a value < SIZE, this means at least to 64.
- resetting byte count for endpoint #0 seems to eliminate issue of the bootloader not being triggered.
2019-04-25 08:23:15 +02:00
Alexander Entinger
f6ae6d843d Fixing typo - although control endpoints are located at endpoint #0 we should leave this choice to the caller of the function and be consistent within the rest of the code 2019-04-24 16:32:26 +02:00
Six
e3e85d5591 deadlock detect and early return in startTransmissionWIRE 2019-04-24 11:43:23 +02:00
Martino Facchin
08629f90b1 Rename NONA_WLAN in NANO 33 IoT 2019-04-19 14:44:12 +02:00
Martino Facchin
169ec9c1d1 Mark mkrfox1200 and mkrwan1310 as very low power 2019-04-19 14:30:12 +02:00
Jonni Westphalen
a536cc8016 make PINS_COUNT dynamic 2019-04-19 14:30:12 +02:00
Jonni Westphalen
52e005278a allow the Low Power library to not break the Serial connection 2019-04-19 14:16:39 +02:00
Martino Facchin
3645829901 Allow boards to skip pinMode(INPUT) initialization 2019-04-19 14:11:30 +02:00
Martino Facchin
cd66b993c8 MKRWAN1310: fix FLASH_CS define 2019-04-19 14:11:02 +02:00
Martino Facchin
d44a9290a8 MKRWAN1310: add bootloader 2019-04-19 11:40:43 +02:00
Martino Facchin
a03e17cef2 MKRWAN1310: start integration 2019-04-19 11:40:00 +02:00
Martino Facchin
df57f9f2ec TEMP: NONA_WLAN: add workaround for R0 2019-04-19 11:03:45 +02:00
Martino Facchin
67d55562b3 NONA_WLAN: add SerialHCI support for BLE 2019-04-19 11:03:45 +02:00
Martino Facchin
4ed0be9045 Rebuild all bootloaders 2019-04-19 11:03:45 +02:00
Martino Facchin
d502e29b3a BL: borrow system_init from uf2
works way better in crystalless mode
2019-04-19 11:03:45 +02:00
Martino Facchin
57830a4c10 TEMP: update to fake version 1.6.28 2019-04-19 11:03:45 +02:00
Martino Facchin
1cc8f7c20f NONA_WLAN: update comments 2019-04-19 11:03:45 +02:00
Martino Facchin
4667e887a5 BL: NONW_WLAN: update bootloaders 2019-04-19 11:03:45 +02:00
Martino Facchin
37b592afdc Bootloader: allow crystalless configuration 2019-04-19 11:03:45 +02:00
Martino Facchin
a46d49aedf Allow reconfiguration of MixedSerial baud rate 2019-04-19 11:03:45 +02:00
Martino Facchin
1eaa6bfd37 Add Mixed Serial library to save the boards :)
Flash nina firmware with ./esptool.py --baud 115200 -p /dev/ttyACM0 write_flash 0x0 NINA_W102.bin
2019-04-19 11:03:45 +02:00
Martino Facchin
bef66cddc4 Fix sercoms 2019-04-19 11:03:45 +02:00
agdl
6a178b4048 Fixed software serial library inspired by https://github.com/arduino-org/Arduino/tree/master/hardware/arduino/samd/libraries/SoftwareSerial 2019-04-19 11:03:45 +02:00
Martino Facchin
996b3cd269 INITIAL: NONA WLAN
Bootloader not working, we need to define CRYSTALLESS mode
2019-04-19 11:03:45 +02:00
per1234
456afbb1d3 Add necessary delays to SPI DigitalPotControl example
According to https://github.com/arduino/Arduino/issues/6395, these delays are required for the code to work.
2019-03-26 00:24:27 -07:00
Martino Facchin
67bf93e52e Publish 1.6.25 (beta) 2018-11-21 17:14:42 +01:00
Martino Facchin
37c8d4f36a Allow precompiled libraries on samd core 2018-11-16 18:18:56 +01:00
Martino Facchin
aab0390111 Slow down USB ISRHandler to workaroung missing 1200bps touch 2018-11-16 18:02:52 +01:00
Martino Facchin
3acaa0365b Publish 1.6.24 (beta) 2018-09-06 17:33:52 +02:00
Martino Facchin
7b6434aa4a TEMP: remove verification from bossacI tool
This completely removes the verification phase, speeding up the compile/upload/test cycle.
The patch can be reverted if:
* we release a new version of bootloader + VidorBoot combo where checksum is internally calculated by the FPGA
* we patch bossac to avoid asking the checksum for locations over internal flash size
2018-09-04 18:36:00 +02:00
Sandeep Mistry
8575a52acf Add -Wno-expansion-to-defined compile warning flag 2018-08-29 16:31:06 +02:00
Sandeep Mistry
bffa9c0492 Remove some incorrect SD lib related lines 2018-08-29 16:31:06 +02:00
Sandeep Mistry
073c992816 Update some variant comments 2018-08-29 16:31:06 +02:00
Cristian Maglie
e5bb5c76bd Release samd-beta 1.6.23 2018-08-29 16:31:06 +02:00
Cristian Maglie
93b1392fa2 UpdateBootloader now accepts no-newline inputs 2018-08-29 16:31:06 +02:00
Sandeep Mistry
f9015a04a9 Remove FPGA bitstream based defines from variant 2018-08-29 16:31:06 +02:00
Sandeep Mistry
c0da99a336 Add comment about line ending setting in the serial monitor 2018-08-29 16:31:06 +02:00
Sandeep Mistry
78b0a5b02e Make SAMD_BootloaderUpdater samd_beta only for now 2018-08-29 16:31:06 +02:00
Sandeep Mistry
2facb399d3 Rebuild MKR Vidor 4000 bootloaders 2018-08-29 16:31:06 +02:00
Sandeep Mistry
b26dca4e85 Add 10ms delay at start of double detector for boards with EZ6301QI to settle
Without this change the board would stay in boot loader when USB cable
is freshly plugged in.
2018-08-29 16:31:06 +02:00
Sandeep Mistry
40b3dcfa20 Add retry count when waiting for JTAG response 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e72779d5c8 Store new boot loader in flash (const), only update user row if needed, increase flash chunk size 2018-08-29 16:31:06 +02:00
Sandeep Mistry
7eb793a438 Add initial SAMD Bootloader Updater library 2018-08-29 16:31:06 +02:00
Sandeep Mistry
6564319619 Add updated MKR Vidor 4000 bootloader 2018-08-29 16:31:06 +02:00
Sandeep Mistry
92c0774edf Check bitstream version before reloading, also check + reload before jumping to app 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e500e2b127 [bootloader] reset JTAG on boot 2018-08-29 16:31:06 +02:00
Sandeep Mistry
c637aa24ff [bootloader] fail fast if JTAG init fails 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e58f0eb0b2 [bootloader] Allow current USB current values 2018-08-29 16:31:06 +02:00
Sandeep Mistry
9398c530f5 correct boot loader filename 2018-08-29 16:31:06 +02:00
Sandeep Mistry
d355bbd7ad Rename the SPIWIFI_* pins to FPGA_SPIWIFI_* 2018-08-29 16:31:06 +02:00
Sandeep Mistry
4ac6becde9 [TEMP] only define ARDUINO_ARCH_SAMD if not defined 2018-08-29 16:31:06 +02:00
Sandeep Mistry
89f5ba36e9 [MKR Vidor 4000] correct FQBN 2018-08-29 16:31:06 +02:00
Martino Facchin
b9c71478d4 Revert "VIDOR: let library tweak digital* to allow virtual pins"
This reverts commit e41aa63d5a1d1e18884eda0403a3c59dc03a9c2e.
This reverts commit 1c1d59b6a147f27a7e2c6b66c94cc5c9bb5e93b4.
This reverts commit 68c73349b8b3c463878c4fedbd0b9e64dc4119cb.
2018-08-29 16:31:06 +02:00
Martino Facchin
a18b1017cb [TEMP] allow using libraries that define ARDUINO_ARCH_SAMD on Beta 2018-08-29 16:31:06 +02:00
Martino Facchin
ec243a52e7 [TEMP] disable all boards except MKRVidor
This way there is no clash if both MKRVidor and normal SAMD core are both installed.
The "beta" situation will continue (with regular rebases) until the new tools have been validated.

To test all boards with the new toolchain, simply replace boards.txt with boards.txt.disabled
2018-08-29 16:31:06 +02:00
Martino Facchin
92e812bf69 [TEMP] Rename the core to Beta 2018-08-29 16:31:06 +02:00
Martino Facchin
f06ecfd613 Add startFPGA weak hook to allow bitstream autostart 2018-08-29 16:31:06 +02:00
Martino Facchin
5839907666 [INITIAL] Start supporting internal SPI for NiNa 2018-08-29 16:31:06 +02:00
Martino Facchin
501b140c88 Force SerialUSB not to be stripped even if unused 2018-08-29 16:31:06 +02:00
Cristian Maglie
26ba1b0b83 USBDevice: removed useless resetReady 2018-08-29 16:31:06 +02:00
Cristian Maglie
a8d208af70 USBDevice: interrupts are now enabled on init
This change allow to rationalize EP initalization logic in one
single place.
2018-08-29 16:31:06 +02:00
Cristian Maglie
8ac782d179 USBDevice: pending interrupts flag are now automatically acknowledged 2018-08-29 16:31:06 +02:00
Cristian Maglie
a46a5b0c61 USBDevice: EPOUTHandler ISR now has a single exit point 2018-08-29 16:31:06 +02:00
Cristian Maglie
3c84f7cdd1 USBDevice: BULK-IN endpoints automatically clears BK1RDY flag 2018-08-29 16:31:06 +02:00
Cristian Maglie
02657fbe30 USBDevice: added missing ep interrupts in USBDevice_SAMD21G18x 2018-08-29 16:31:06 +02:00
Cristian Maglie
f051e7433a USBDevice: factored out a function to release OUT eps 2018-08-29 16:31:06 +02:00
Cristian Maglie
2397c45711 fixed indent and slightly simplified ifdef 2018-08-29 16:31:06 +02:00
Cristian Maglie
ba95a6ab6f USBDevice: Added missing packed attribute 2018-08-29 16:31:06 +02:00
Cristian Maglie
1fdbc69e46 USBDevice: simplified handling of endpoints
The previous way was a lot more complicated for a very little perfomance
benefit.
2018-08-29 16:31:06 +02:00
Cristian Maglie
bebea1acff USBDevice: slightly optimized ISR handler 2018-08-29 16:31:06 +02:00
Cristian Maglie
fc530e205c USBDevice: made recv fallthru to a single return 2018-08-29 16:31:06 +02:00
Cristian Maglie
3316756b0c USBDevice: do not use automatic multi-packet USB transactions
If the host sends an unfinished OUT transaction (=> a transaction
that ends with a data packet filled to the maximum allowed size but
not followed by another shorter packet or a ZLP) the Transaction
Completed interrupt is not fired and the incoming data remains
suspendend until the host sends more data.

This commit fix the problem by disabilng multi-packet transactions.
2018-08-29 16:31:06 +02:00
Cristian Maglie
c7894e82ea USBDevice: immediately ack EOR (it's just a bit more readable) 2018-08-29 16:30:33 +02:00
Cristian Maglie
639303de0b USBDevice: removed useless internal armRecv(..) method 2018-08-29 16:30:33 +02:00
Cristian Maglie
c1c082ee86 Using __attribute__((packed)) instead of pragmas 2018-08-29 16:30:33 +02:00
Cristian Maglie
8f1ccb3df8 Fixed uninitialized use of variable 2018-08-29 16:30:33 +02:00
Cristian Maglie
8f2dc6984d USBDevice: fixed some minor warnings 2018-08-29 16:30:33 +02:00
Martino Facchin
f72479d2a3 Add weak hook to trigger companion chip reinitialization 2018-08-29 16:30:33 +02:00
Martino Facchin
d81ee4f8fb Add disableFpgaClock function 2018-08-29 16:30:33 +02:00
Martino Facchin
18bcded0f1 Fix compilation if USBCON is not defined 2018-08-29 16:30:33 +02:00
Martino Facchin
b6ccd4f9ed [WORKAROUND] add 10uS of delay befor handling Setup packet 2018-08-29 16:30:33 +02:00
Martino Facchin
10432a3cbd Porting CDC to PluggableUSB 2018-08-29 16:30:33 +02:00
Martino Facchin
5c562e143d [FIXME] Reenable full EP_SIZE USB send 2018-08-29 16:30:33 +02:00
Martino Facchin
25ebd44179 Allow complete override of USB SerialNumber 2018-08-29 16:30:33 +02:00
Martino Facchin
ecdbde97fa Allow removing CDC_ENABLED with define switch 2018-08-29 16:30:33 +02:00
Martino Facchin
f9348d2193 [VIDOR] Let the library call enableFpgaClock 2018-08-29 16:30:33 +02:00
Martino Facchin
423c29aa30 Vidor: update bootloader binaries 2018-08-29 16:30:33 +02:00
Martino Facchin
d4c7854e55 [VIDORBL] Add timeouts to i2c operations 2018-08-29 16:30:33 +02:00
Martino Facchin
e66adeafc2 [VIDOR][PMIC] Check return value of Wire.startTransmission 2018-08-29 16:30:33 +02:00
Martino Facchin
bc51bc5184 [TEST][DANGER]Add timeout to startTransmissionWIRE 2018-08-29 16:30:33 +02:00
Alberto Mannari
4146aa8e45 Add check for arbitration in I2C master read
Add check for errors during I2C master read (likely loss of arbitration) so that the operation can be aborted and code does not get stuck in an infinite loop
2018-08-29 16:30:33 +02:00
Martino Facchin
bc2c7796c4 Make CDC/UART interface configurable from Makefile 2018-08-29 16:30:33 +02:00
Martino Facchin
2267161b19 [VIDORBL] port to IRQ architecture 2018-08-29 16:30:33 +02:00
Martino Facchin
91e34f568e Restore flash speedup via signature 2018-08-29 16:30:33 +02:00
Martino Facchin
5704a06f78 Mass rename old vidor2000 2018-08-29 16:30:33 +02:00
Martino Facchin
2f97fc2a19 Update openocd to 0.10.0-arduino7 2018-08-29 16:30:33 +02:00
Martino Facchin
606eb9aa12 Fix runtime paths for new tools
http://downloads.arduino.cc/packages/package_newboards_index.json contains all the needed tools
2018-08-29 16:30:33 +02:00
Martino Facchin
acbf2dbaee Don't reverse nibbles in jtagRead 2018-08-29 16:30:33 +02:00
Martino Facchin
fe8e0e2385 Add full 2M support to fpga flash 2018-08-29 16:30:33 +02:00
Martino Facchin
c434b44157 Move ACK pin for complete passthrough 2018-08-29 16:30:33 +02:00
Martino Facchin
e78bb78419 Configure PMIC before clocking the fpga
If the fpga is configured to boot from flash it easily passes to 100mA limit of default BQ config.
So configure it before clocking the fpga
2018-08-29 16:30:33 +02:00
Martino Facchin
dfdf5a0a9f Rename MKRVidor 2018-08-29 16:30:33 +02:00
Martino Facchin
fd116ad548 TEMP: set BQ power settings from user sketch
Will revert if i2c will ever fit in the bootloader
2018-08-29 16:30:33 +02:00
Martino Facchin
d0dc254c76 TEMP: add bossacI upload tool for Vidor 2018-08-29 16:30:33 +02:00
Martino Facchin
0411b6b067 [PROPOSAL] SPI: add getters for private fields
If we want to create an SPI-compatible class it needs to be able to access these fields, but only SPIClass can do it (since they are friends).
The other way is to make these fields public, but than users could try to change them at runtime (is there any performance issue with it?)
2018-08-29 16:30:33 +02:00
Martino Facchin
a16e8f3b6f Cache last used SPISettings
There's no need to disable and reenable the SPI peripheral if the settings didn't change
2018-08-29 16:30:33 +02:00
Martino Facchin
4a2012a868 Allow analogWrite for extended pins 2018-08-29 16:30:33 +02:00
Martino Facchin
b32d93eff2 Fix fpga_bitstream_section being included in all sketches 2018-08-29 16:30:33 +02:00
Martino Facchin
b02d829449 Fix PINS_COUNT 2018-08-29 16:30:33 +02:00
Martino Facchin
5ecc126b7e WiringExtended: silence warnings 2018-08-29 16:30:33 +02:00
Martino Facchin
56fb81ff92 [VIDORBL] add descriptor and configurable offset 2018-08-29 16:30:33 +02:00
Martino Facchin
a763a37b20 BL: add flashing routines 2018-08-29 16:30:33 +02:00
Martino Facchin
8eedb8b5c8 [VidorBL] fix all jtag ifdefs 2018-08-29 16:30:33 +02:00
Martino Facchin
7915d1f4d7 TEST: start porting jtag to bootloader
lto and a recent compiler are needed to occupy less than 8KB
2018-08-29 16:30:33 +02:00
Martino Facchin
64fddfa44a VIDOR: add proper bootloader 2018-08-29 16:30:33 +02:00
Martino Facchin
73af72d220 EXPERIMENTAL: add fpga bitstream to Vidor binary 2018-08-29 16:30:33 +02:00
Martino Facchin
1b0e383c53 VIDOR: let library tweak digital* to allow virtual pins 2018-08-29 16:30:33 +02:00
Martino Facchin
040c851a72 Remove initialization of all pins as INPUT 2018-08-29 16:30:33 +02:00
Martino Facchin
e87e10bd8a VIDOR: fix some pinuxing and enable clkout 2018-08-29 16:30:33 +02:00
Martino Facchin
8c1209c40b Initial import of MKRVidor (based on MKRZero) 2018-08-29 16:30:33 +02:00
384 changed files with 21973 additions and 17335 deletions

View file

@ -1,95 +0,0 @@
name: Bug Report
description: Report a problem
labels: 'Bug'
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
It's okay to leave some blank if it doesn't apply to your problem.
- type: dropdown
attributes:
label: Operating System
options:
- Linux
- MacOS
- RaspberryPi OS
- Windows 7
- Windows 10
- Windows 11
- Others
validations:
required: true
- type: input
attributes:
label: Arduino IDE version
placeholder: e.g Arduino 1.8.15
validations:
required: true
- type: input
attributes:
label: Board
placeholder: e.g Metro M4 Express
validations:
required: true
- type: input
attributes:
label: ArduinoCore version
description: Can be found under "Board Manager" menu
validations:
required: true
- type: textarea
attributes:
label: Sketch as ATTACHED TXT
placeholder: |
e.g examples/MassStorage/msc_ramdisk.
If it is custom sketch, please provide it as **ATTACHED** files or link to it.
Pasting raw long code that hurts readability can get your issue **closed**
validations:
required: true
- type: textarea
attributes:
label: Compiled Log as ATTACHED TXT
placeholder: |
Compiled log from Arduino IDE as **ATTACHED** txt.
Pasting raw long log that hurts readability can get your issue **closed**
validations:
required: true
- type: textarea
attributes:
label: What happened ?
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
attributes:
label: How to reproduce ?
placeholder: |
1. Go to '...'
2. Click on '....'
3. See error
validations:
required: true
- type: textarea
attributes:
label: Debug Log as ATTACHED TXT
placeholder: |
Debug log where the issue occurred as attached txt file, best with comments to explain the actual events.
validations:
required: false
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots to help explain your problem.
validations:
required: false

View file

@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: Adafruit Support Forum
url: https://forums.adafruit.com
about: If you have other questions or need help, post it here.

View file

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View file

@ -1,61 +0,0 @@
name: Build
on: [pull_request, push]
jobs:
build:
strategy:
fail-fast: false
matrix:
board:
# Alphabetical order
- 'circuitplayground_m0'
- 'feather_m4_can'
- 'hallowing'
- 'hallowing_m4'
- 'metro_m0'
- 'metro_m4'
- 'pybadge_m4'
- 'pygamer_m4'
- 'pyportal_m4'
- 'pyportal_m4_titano'
# with TinyUSB
- 'metro_m0:usbstack=tinyusb'
- 'metro_m4:speed=120,usbstack=tinyusb'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Install Arduino CLI and Tools
run: |
# make all our directories we need for files and libraries
mkdir $HOME/.arduino15
mkdir $HOME/.arduino15/packages
mkdir $HOME/Arduino
mkdir $HOME/Arduino/libraries
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: Install BSP and Libraries
env:
BSP_URL: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
BSP_PATH: .arduino15/packages/adafruit/hardware/samd
run: |
arduino-cli config init
arduino-cli core update-index
arduino-cli core update-index --additional-urls $BSP_URL
arduino-cli core install arduino:samd --additional-urls $BSP_URL
arduino-cli core install adafruit:samd --additional-urls $BSP_URL
# Replace release BSP with our code
BSP_VERSION=`eval ls $HOME/$BSP_PATH`
rm -r $HOME/$BSP_PATH/*
ln -s $GITHUB_WORKSPACE $HOME/$BSP_PATH/$BSP_VERSION
arduino-cli lib install "Adafruit NeoPixel" "Adafruit seesaw Library" "Adafruit SPIFlash" "FlashStorage" "MIDI Library" "SD" "SdFat - Adafruit Fork"
- name: Build examples
run: python3 tools/build_all.py ${{ matrix.board }}

3
.gitignore vendored
View file

@ -2,5 +2,4 @@
*.atsuo
bootloaders/*/build/
*~
/libraries/**/build/
*~

6
.gitmodules vendored
View file

@ -1,6 +0,0 @@
[submodule "libraries/Adafruit_TinyUSB_Arduino"]
path = libraries/Adafruit_TinyUSB_Arduino
url = https://github.com/adafruit/Adafruit_TinyUSB_Arduino.git
[submodule "libraries/Adafruit_ZeroDMA"]
path = libraries/Adafruit_ZeroDMA
url = https://github.com/adafruit/Adafruit_ZeroDMA

View file

@ -1,7 +1,5 @@
# Arduino Core for SAMD21 and SAMD51 CPU
[![Build Status](https://github.com/adafruit/ArduinoCore-samd/workflows/Build/badge.svg)](https://github.com/adafruit/ArduinoCore-samd/actions)
This repository contains the source code and configuration files of the Arduino Core
for Atmel's SAMD21 and SAMD51 processor (used on the Arduino/Genuino Zero, MKR1000 and MKRZero boards).

1785
boards.txt

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:1000600000000000A818000008B5084B002B03D0C2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:10009000A8180000600000205800002000000000A8
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,326 +78,326 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052039A601D4B1E4A041C5A60194AC021ED
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E00044004110E000E066
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78022402431A701A4B0F22197820
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7820210A431A7047
:10122000124B04211A6A0A431A62114B114A5A805E
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:101260004A440041354400414B44004100040040E1
:10127000000C004014400000000800422AF6000064
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC04600080042024B187EC5
:1012B0004007C00F7047C0460008004208B5FFF75E
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D0000008004208B5FFF7E9FF0023984205D057
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430041726475696E6F20C8
:1015F0004D4B5231303030001201000202000040E9
:1016000041234E000002010200010000080000001A
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343395
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020AC18000038B5304B27
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A121000021220000FC15000004000020DC
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C02002030160000940000207C1600007A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001016000000400041440200203C02002035
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:10107000400200208800002070160000940200202A
:1010800098020020280200208C00002090020020FE
:10109000940000204C160000751600004E1600004B
:1010A00098160000501600005C16000002A5FFFF15
:1010B000651600009000002044A5FFFF04A5FFFF77
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200206916000088020020C7
:1011D0006D1600006F1600003402002094020020FB
:1011E000880000207316000040020020300200201A
:1011F00010B51C4B01201A78022402431A701A4BB6
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78202137
:101220000A431A70124B04211A6A0A431A62114BBC
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BD4A440041354400414B440041D5
:1012700000040040000C0040144000000008004240
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046000800426B
:1012B000024B187E4007C00F7047C046000800422E
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC0460008004208B5FFF7E9FF00233B
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000A6160000F7B50024051C0F1C261CBC4295
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B52313030300012010002C5
:101600000200004041234E000002010200010000E0
:101610000800000010000000200000004000000052
:101620008000000000010000000200000004000033
:101630009D120000C1120000B1120000F51200005E
:101640000F13000099130000A11400007600200081
:1016500041707220313120323031390031333A302B
:10166000393A353100580A0D00590A0D005A002345
:101670000A0D003E00322E3000000000250B000055
:10168000410B00005D0B0000810B00009D0B000072
:10169000810B0000C50B00005B41726475696E6FC1
:1016A0003A58595A5D0000002110422063308440AE
:1016B000A550C660E770088129914AA16BB18CC121
:1016C000ADD1CEE1EFF13112100273325222B55298
:1016D0009442F772D662399318837BB35AA3BDD371
:1016E0009CC3FFF3DEE36224433420040114E66468
:1016F000C774A44485546AA54BB528850995EEE5C1
:10170000CFF5ACC58DD55336722611163006D77677
:10171000F6669556B4465BB77AA719973887DFF710
:10172000FEE79DD7BCC7C448E5588668A77840083F
:10173000611802282338CCC9EDD98EE9AFF9488960
:1017400069990AA92BB9F55AD44AB77A966A711AD7
:10175000500A333A122AFDDBDCCBBFFB9EEB799BB0
:10176000588B3BBB1AABA66C877CE44CC55C222C27
:10177000033C600C411CAEED8FFDECCDCDDD2AAD00
:101780000BBD688D499D977EB66ED55EF44E133EB7
:10179000322E511E700E9FFFBEEFDDDFFCCF1BBF50
:1017A0003AAF599F788F8891A981CAB1EBA10CD12A
:1017B0002DC14EF16FE18010A100C230E320045032
:1017C000254046706760B9839893FBA3DAB33DC3A5
:1017D0001CD37FE35EF3B1029012F322D232354282
:1017E000145277625672EAB5CBA5A89589856EF535
:1017F0004FE52CD50DC5E234C324A01481046674D2
:10180000476424540544DBA7FAB79987B8975FE784
:101810007EF71DC73CD7D326F2369106B016576621
:101820007676154634564CD96DC90EF92FE9C8990C
:10183000E9898AB9ABA94458654806782768C01871
:10184000E1088238A3287DCB5CDB3FEB1EFBF98BE4
:10185000D89BBBAB9ABB754A545A376A167AF10AC1
:10186000D01AB32A923A2EFD0FED6CDD4DCDAABDF4
:101870008BADE89DC98D267C076C645C454CA23C11
:10188000832CE01CC10C1FEF3EFF5DCF7CDF9BAFC4
:10189000BABFD98FF89F176E367E554E745E932E61
:0C18A000B23ED10EF01E0000000000005F
:1018AC000114000009024300020100803209040007
:1018BC0000010202000005240010010424020005AE
:1018CC00240600010524010001070583030800FF1D
:1018DC0009040100020A0000000705810240000013
:1018EC00070502024000000000C2010000000800D1
:0C18FC0069000000410000000000000036
:040000030000060DE6
:00000001FF

View file

@ -1,403 +0,0 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B5203DA6170477800002001000020B1
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052039A601D4B1E4A041C5A60194AC021ED
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E00044004110E000E066
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78022402431A701A4B0F22197820
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7820210A431A7047
:10122000124B04211A6A0A431A62114B114A5A805E
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:101260004A440041354400414B44004100040040E1
:10127000000C004014400000000800422AF6000064
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC04600080042024B187EC5
:1012B0004007C00F7047C0460008004208B5FFF75E
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D0000008004208B5FFF7E9FF0023984205D057
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430047656E75696E6F20C5
:1015F0004D4B5231303030001201000202000040E9
:1016000041234E0200020102000100000800000018
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343494
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:1000600000000000B018000008B5084B002B03D0BA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:10009000B0180000600000205800002000000000A0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,327 +78,327 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:10160000464F5820313230300000000012010002F5
:1016100002000040412350000002010200010000CE
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A313900580A0D00590A0D005A002337
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020B418000038B5304B1F
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A1210000212200000416000004000020D3
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C0200203816000094000020841600006A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001816000000400041440200203C0200202D
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:101070004002002088000020781600009402002022
:1010800098020020280200208C00002090020020FE
:1010900094000020541600007D1600005616000033
:1010A000A0160000581600006416000002A5FFFFFD
:1010B0006D1600009000002044A5FFFF04A5FFFF6F
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200207116000088020020BF
:1011D00075160000771600003402002094020020EB
:1011E000880000207B160000400200203002002012
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000AE160000F7B50024051C0F1C261CBC428D
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B5220464F582031323030AB
:1016000000000000120100020200004041235000CF
:1016100000020102000100000800000010000000AC
:1016200020000000400000008000000000010000D9
:1016300000020000000400009D120000C112000022
:10164000B1120000F51200000F1300009913000002
:10165000A114000076002000417072203131203248
:101660003031390031333A30393A353300580A0DC8
:1016700000590A0D005A00230A0D003E00322E3098
:1016800000000000250B0000410B00005D0B000076
:10169000810B00009D0B0000810B0000C50B0000BA
:1016A0005B41726475696E6F3A58595A5D0000006B
:1016B0002110422063308440A550C660E770088145
:1016C00029914AA16BB18CC1ADD1CEE1EFF13112BC
:1016D000100273325222B5529442F772D662399395
:1016E00018837BB35AA3BDD39CC3FFF3DEE362240C
:1016F000433420040114E664C774A44485546AA5E5
:101700004BB528850995EEE5CFF5ACC58DD553369B
:10171000722611163006D776F6669556B4465BB734
:101720007AA719973887DFF7FEE79DD7BCC7C4486B
:10173000E5588668A7784008611802282338CCC984
:10174000EDD98EE9AFF9488969990AA92BB9F55AFB
:10175000D44AB77A966A711A500A333A122AFDDBD4
:10176000DCCBBFFB9EEB799B588B3BBB1AABA66CCB
:10177000877CE44CC55C222C033C600C411CAEED24
:101780008FFDECCDCDDD2AAD0BBD688D499D977EDB
:10179000B66ED55EF44E133E322E511E700E9FFF74
:1017A000BEEFDDDFFCCF1BBF3AAF599F788F88912A
:1017B000A981CAB1EBA10CD12DC14EF16FE180100E
:1017C000A100C230E3200450254046706760B98311
:1017D0009893FBA3DAB33DC31CD37FE35EF3B1025E
:1017E0009012F322D2323542145277625672EAB521
:1017F000CBA5A89589856EF54FE52CD50DC5E234AE
:10180000C324A01481046674476424540544DBA7F0
:10181000FAB79987B8975FE77EF71DC73CD7D326FD
:10182000F2369106B01657667676154634564CD980
:101830006DC90EF92FE9C899E9898AB9ABA944584D
:10184000654806782768C018E1088238A3287DCB50
:101850005CDB3FEB1EFBF98BD89BBBAB9ABB754A9D
:10186000545A376A167AF10AD01AB32A923A2EFDE0
:101870000FED6CDD4DCDAABD8BADE89DC98D267CED
:10188000076C645C454CA23C832CE01CC10C1FEF30
:101890003EFF5DCF7CDF9BAFBABFD98FF89F176E3D
:1018A000367E554E745E932EB23ED10EF01E000071
:0418B0000000000034
:1018B40001140000090243000201008032090400FF
:1018C40000010202000005240010010424020005A6
:1018D400240600010524010001070583030800FF15
:1018E40009040100020A000000070581024000000B
:1018F400070502024000000000C2010000000800C9
:0C1904006900000041000000000000002D
:040000030000060DE6
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:1000600000000000D01E000008B5084B002B03D094
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:10009000D01E00006000002058000020000000007A
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,338 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C200047534D20313430300000000012010002D3
:101C300002000040412352000002010200010000A6
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004E6F7620333020323031370031303A31E8
:101C9000333A323100580A0D00590A0D005A002318
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D41E000038B5344D2B68013382
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000241C00000400002027
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020581C000098000020A41C000091
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000381C00000040004148020020400200207A
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020981C00009802002069
:101600009C0200202C020020920000209402002066
:1016100098000020741C00009D1C0000761C000037
:10162000C01C0000781C0000841C000002A5FFFF05
:101630008D1C00009400002044A5FFFF04A5FFFFBF
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:101740000040004190020020911C00008C0200200B
:10175000951C0000971C0000380200209802002011
:101760008E0000209B1C0000440200203402002058
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CE1C0000F7B50024051C0F1C261CBC42E2
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B522047534D203134303088
:101C200000000000120100020200004041235200A7
:101C30000002010200010000080000001000000086
:101C400020000000400000008000000000010000B3
:101C500000020000000400001D18000041180000F0
:101C600031180000751800008F18000019190000C5
:101C7000211A00007600200041707220313120329C
:101C80003031390031333A30393A353400580A0DA1
:101C900000590A0D005A00230A0D003E00322E3072
:101CA00000000000A5100000C1100000DD100000C1
:101CB000011100001D11000001110000451100007C
:101CC0005B41726475696E6F3A58595A5D00000045
:101CD0002110422063308440A550C660E77008811F
:101CE00029914AA16BB18CC1ADD1CEE1EFF1311296
:101CF000100273325222B5529442F772D66239936F
:101D000018837BB35AA3BDD39CC3FFF3DEE36224E5
:101D1000433420040114E664C774A44485546AA5BE
:101D20004BB528850995EEE5CFF5ACC58DD5533675
:101D3000722611163006D776F6669556B4465BB70E
:101D40007AA719973887DFF7FEE79DD7BCC7C44845
:101D5000E5588668A7784008611802282338CCC95E
:101D6000EDD98EE9AFF9488969990AA92BB9F55AD5
:101D7000D44AB77A966A711A500A333A122AFDDBAE
:101D8000DCCBBFFB9EEB799B588B3BBB1AABA66CA5
:101D9000877CE44CC55C222C033C600C411CAEEDFE
:101DA0008FFDECCDCDDD2AAD0BBD688D499D977EB5
:101DB000B66ED55EF44E133E322E511E700E9FFF4E
:101DC000BEEFDDDFFCCF1BBF3AAF599F788F889104
:101DD000A981CAB1EBA10CD12DC14EF16FE18010E8
:101DE000A100C230E3200450254046706760B983EB
:101DF0009893FBA3DAB33DC31CD37FE35EF3B10238
:101E00009012F322D2323542145277625672EAB5FA
:101E1000CBA5A89589856EF54FE52CD50DC5E23487
:101E2000C324A01481046674476424540544DBA7CA
:101E3000FAB79987B8975FE77EF71DC73CD7D326D7
:101E4000F2369106B01657667676154634564CD95A
:101E50006DC90EF92FE9C899E9898AB9ABA9445827
:101E6000654806782768C018E1088238A3287DCB2A
:101E70005CDB3FEB1EFBF98BD89BBBAB9ABB754A77
:101E8000545A376A167AF10AD01AB32A923A2EFDBA
:101E90000FED6CDD4DCDAABD8BADE89DC98D267CC7
:101EA000076C645C454CA23C832CE01CC10C1FEF0A
:101EB0003EFF5DCF7CDF9BAFBABFD98FF89F176E17
:101EC000367E554E745E932EB23ED10EF01E00004B
:041ED000000000000E
:101ED40001140000090243000201008032090400D9
:101EE4000001020200000524001001042402000580
:101EF400240600010524010001070583030800FFEF
:101F040009040100020A00000007058102400000E4
:101F1400070502024000000000C2010000000800A2
:0C1F240069000000410000000000000007
:0400000300000B7975
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D41E000008B5084B002B03D090
:1000600000000000CC1E000008B5084B002B03D098
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D41E000060000020580000200000000076
:10009000CC1E00006000002058000020000000007E
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,337 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020D81E000068
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:10106000281C000004000020141C0000041C0000C8
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A607047900200205C1C00003A
:1011C00098000020A81C000030B50A1C1C4985B0FE
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE73C1C000000400041FB
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:101600009C1C0000980200209C0200202C0200205C
:10161000920000209402002098000020781C000016
:10162000A11C00007A1C0000C41C00007C1C0000EF
:10163000881C000002A5FFFF911C00009400002000
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000951C00008C020020991C00009B1C0000BE
:1017600038020020980200208E0000209F1C0000FC
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D21C0000F7B50024F3
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C20004E422031353030001201000202000040E7
:101C300041235500000201020001000008000000DD
:101C400010000000200000004000000080000000A4
:101C50000001000000020000000400002518000040
:101C600049180000391800007D180000971800007E
:101C700021190000291A0000760020004E6F7620FE
:101C8000323620323031380031343A32383A333754
:101C900000580A0D00590A0D005A00230A0D003E93
:101CA00000322E3000000000AD100000C91000000E
:101CB000E5100000091100002511000009110000C5
:101CC0004D1100005B41726475696E6F3A58595A44
:101CD0005D0000002110422063308440A550C660A2
:101CE000E770088129914AA16BB18CC1ADD1CEE1D9
:101CF000EFF13112100273325222B5529442F77250
:101D0000D662399318837BB35AA3BDD39CC3FFF328
:101D1000DEE36224433420040114E664C774A4445F
:101D200085546AA54BB528850995EEE5CFF5ACC578
:101D30008DD55336722611163006D776F66695562F
:101D4000B4465BB77AA719973887DFF7FEE79DD7C8
:101D5000BCC7C448E5588668A778400861180228BF
:101D60002338CCC9EDD98EE9AFF9488969990AA918
:101D70002BB9F55AD44AB77A966A711A500A333A8F
:101D8000122AFDDBDCCBBFFB9EEB799B588B3BBB68
:101D90001AABA66C877CE44CC55C222C033C600C1F
:101DA000411CAEED8FFDECCDCDDD2AAD0BBD688DB8
:101DB000499D977EB66ED55EF44E133E322E511E6F
:101DC000700E9FFFBEEFDDDFFCCF1BBF3AAF599F08
:101DD000788F8891A981CAB1EBA10CD12DC14EF1A8
:101DE0006FE18010A100C230E3200450254046700E
:101DF0006760B9839893FBA3DAB33DC31CD37FE339
:101E00005EF3B1029012F322D2323542145277625D
:101E10005672EAB5CBA5A89589856EF54FE52CD508
:101E20000DC5E234C324A0148104667447642454AD
:101E30000544DBA7FAB79987B8975FE77EF71DC718
:101E40003CD7D326F2369106B016576676761546FD
:101E500034564CD96DC90EF92FE9C899E9898AB968
:101E6000ABA94458654806782768C018E10882384D
:101E7000A3287DCB5CDB3FEB1EFBF98BD89BBBAB78
:101E80009ABB754A545A376A167AF10AD01AB32A9D
:101E9000923A2EFD0FED6CDD4DCDAABD8BADE89DC8
:101EA000C98D267C076C645C454CA23C832CE01CED
:101EB000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F58
:101EC000F89F176E367E554E745E932EB23ED10E3D
:081ED000F01E000000000000FC
:101ED80001140000090243000201008032090400D5
:101EE800000102020000052400100104240200057C
:101EF800240600010524010001070583030800FFEB
:101F080009040100020A00000007058102400000E0
:101F1800070502024000000000C20100000008009E
:0C1F280069000000410000000000000003
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D01E000038B5344D2B68013386
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000201C0000040000202B
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020541C000098000020A01C000099
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000341C00000040004148020020400200207E
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020941C0000980200206D
:101600009C0200202C020020920000209402002066
:1016100098000020701C0000991C0000721C000043
:10162000BC1C0000741C0000801C000002A5FFFF11
:10163000891C00009400002044A5FFFF04A5FFFFC3
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:1017400000400041900200208D1C00008C0200200F
:10175000911C0000931C0000380200209802002019
:101760008E000020971C000044020020340200205C
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CA1C0000F7B50024051C0F1C261CBC42E6
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B52204E42203135303000DE
:101C2000120100020200004041235500000201029F
:101C3000000100000800000010000000200000006B
:101C400040000000800000000001000000020000D1
:101C5000000400001D1800004118000031180000A9
:101C6000751800008F18000019190000211A0000D3
:101C7000760020004170722031312032303139003D
:101C800031333A30393A353700580A0D00590A0DC8
:101C9000005A00230A0D003E00322E3000000000E2
:101CA000A5100000C1100000DD10000001110000AF
:101CB0001D11000001110000451100005B4172641C
:101CC00075696E6F3A58595A5D0000002110422024
:101CD00063308440A550C660E770088129914AA10D
:101CE0006BB18CC1ADD1CEE1EFF131121002733284
:101CF0005222B5529442F772D662399318837BB35D
:101D00005AA3BDD39CC3FFF3DEE362244334200413
:101D10000114E664C774A44485546AA54BB52885AC
:101D20000995EEE5CFF5ACC58DD553367226111663
:101D30003006D776F6669556B4465BB77AA71997FC
:101D40003887DFF7FEE79DD7BCC7C448E5588668EB
:101D5000A7784008611802282338CCC9EDD98EE94C
:101D6000AFF9488969990AA92BB9F55AD44AB77AC3
:101D7000966A711A500A333A122AFDDBDCCBBFFB9C
:101D80009EEB799B588B3BBB1AABA66C877CE44CD3
:101D9000C55C222C033C600C411CAEED8FFDECCDEC
:101DA000CDDD2AAD0BBD688D499D977EB66ED55EA3
:101DB000F44E133E322E511E700E9FFFBEEFDDDF3C
:101DC000FCCF1BBF3AAF599F788F8891A981CAB1C8
:101DD000EBA10CD12DC14EF16FE18010A100C230FA
:101DE000E3200450254046706760B9839893FBA3B5
:101DF000DAB33DC31CD37FE35EF3B1029012F3224A
:101E0000D2323542145277625672EAB5CBA5A89504
:101E100089856EF54FE52CD50DC5E234C324A01499
:101E200081046674476424540544DBA7FAB7998794
:101E3000B8975FE77EF71DC73CD7D326F2369106E9
:101E4000B01657667676154634564CD96DC90EF9DC
:101E50002FE9C899E9898AB9ABA944586548067839
:101E60002768C018E1088238A3287DCB5CDB3FEBF4
:101E70001EFBF98BD89BBBAB9ABB754A545A376A89
:101E8000167AF10AD01AB32A923A2EFD0FED6CDDC4
:101E90004DCDAABD8BADE89DC98D267C076C645CD9
:101EA000454CA23C832CE01CC10C1FEF3EFF5DCFD4
:101EB0007CDF9BAFBABFD98FF89F176E367E554E29
:101EC000745E932EB23ED10EF01E000000000000A2
:101ED00001140000090243000201008032090400DD
:101EE0000001020200000524001001042402000584
:101EF000240600010524010001070583030800FFF3
:101F000009040100020A00000007058102400000E8
:101F1000070502024000000000C2010000000800A6
:0C1F20006900000041000000000000000B
:0400000300000B7975
:00000001FF

View file

@ -0,0 +1 @@
samd21_sam_ba_arduino_mkrvidor4000.elf.ltrans0.o

View file

@ -0,0 +1,512 @@
:10000000FC7F0020C516000099010000950100004A
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000910100003E
:1000300000000000000000008D0100001101000020
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:10006000000000007C1F0000044B10B5002B03D0E3
:100070000349044800E000BF10BDC0460000000076
:10008000600000207C1F0000030010B50800110074
:1000900098476422014B1A8010BDC04678000020AA
:1000A000F0B5194B0A00997885B05C68002929D011
:1000B000042A1FD100680F263027520004AB9B187A
:1000C0000B3B9D1A01003140092919D83943197099
:1000D000013B00099D42F5D10A200C4B01A90B8080
:1000E0008B1898700330D8700432E068FFF7CCFFAB
:1000F00005B0F0BD022A01D10088DCE70078DAE71C
:100100003731E4E70100F0E77800002030780000A4
:100110001B4A1C4B117A002908D119785878091804
:100120008020C9B25970184940000860117A013125
:10013000C9B211725978F02902D85978092908D81A
:100140001978494249B21970197858780918C9B212
:100150005970117A5B78994203D180210A4B49008A
:1001600019601388002B03D01388013B9BB21380C6
:100170005389002B03D05389013B9BB253817047B5
:1001800078000020000000209C44004102BEFEE7F1
:1001900005BEFEE70DBEFEE70EBEFEE7074AFF30D6
:1001A00053699B0B9B035361022303728279823B49
:1001B00013438371037A9B07FCD570472C02002000
:1001C000802102000A4BC90100280ED099618021CC
:1001D000890199615961074B187B40008018064AD4
:1001E000800080581873C0B270475961EFE7C0466D
:1001F0000044004178000020AC1C00000C4B10B5FE
:100200001B7B082B10D00F2B0ED00120FFF7D8FF3F
:100210000120FFF7D5FF0120FFF7D2FF0120FFF7F4
:10022000CFFF0120FFF7CCFF0020FFF7C9FF10BD73
:10023000780000200D4B10B51B7B0F2B0AD0082B2C
:1002400008D00124A3420FD80020FFF7B9FF0020F7
:10025000FFF7B6FF0120FFF7B3FF0020FFF7B0FF65
:100260000020FFF7ADFF0024200010BD7800002023
:10027000074B10B51B7B01240B2B06D12000FFF789
:100280009FFF2000FFF79CFF0024200010BDC04608
:1002900078000020F0B587B003900020012604000C
:1002A0000700B4465E4001920596039B9F4201D130
:1002B00007B0F0BD002C04D1FF25002901D00D7836
:1002C00001316246184B40081E6AF60B1640F601D3
:1002D00030436646039A2E400496561E62460292AA
:1002E000BE4201D1059A0292049A002A18D08022B7
:1002F00052019A61029A002A03D08026B6019E61BB
:100300005E6107236D080134EDB21C4006D1019BEC
:10031000002B03D018702000013301930137C4E78C
:10032000802252015A61E5E700440041F7B50124FB
:100330006240019280220023520106009446180078
:10034000B34200D1FEBD0F4A2700156AED0B2540D0
:100350009D4028430D0025400095751E9D4200D10B
:10036000019F009D002D0AD065469561002F03D0A6
:100370008025AD019561556149100133E0E765467F
:100380005561F3E700440041154B10B51B7B040099
:10039000012B01D9FFF732FF0020FFF711FF0120E9
:1003A000FFF70EFF0120FFF70BFF0020FFF708FF0C
:1003B0000020FFF705FF012221000A20FFF7B6FF0A
:1003C0005623FF33984207D10120FFF7F9FE0120A1
:1003D000FFF7F6FE002010BD01204042FBE7C046BB
:1003E00078000020F7B50D4D0700EB7B0E202C7C2C
:1003F0000193FFF7C9FF061E0EDBFFF71BFF019BF2
:10040000611C9940E87BAB7B3943C0180122FFF7A0
:100410008DFFFFF72DFF6F743000FEBD78000020C8
:1004200037B505000020124B01905B7C0C00834225
:1004300018D10C20FFF7A8FFFFF7FCFE019B01A9D4
:100440009A00032313430193002320201A00FFF78F
:1004500021FF0023600102301A002900FFF71AFF74
:1004600020003EBDFFF7BEFF0028FADBE1E7C046F3
:10047000780000200222634BF0B51A708023624C92
:100480008027802680251B026360002385B0AD0194
:10049000FF017601A7600121A66003A8A560039370
:1004A000FFF7BEFF80235B05A3606361A761A661C0
:1004B0006561FFF7A3FE554D2B7B012B01D9FFF79B
:1004C0009DFE0020FFF77CFE0120FFF779FE012052
:1004D000FFF776FE0020FFF773FE0020FFF770FEA7
:1004E000012204210A20FFF721FF0120FFF768FE07
:1004F0000120FFF765FE9A27FFF79CFE80228023EC
:10050000FF3752019B01013F6261A3616361002FCC
:10051000F9D13A0039000120FFF708FF0400FFF786
:10052000A7FEFFF76BFE002C03D10120404205B06F
:10053000F0BD0E20FFF728FFFFF77CFE3A003900E0
:100540004020FFF7F3FEFFF793FE0C20FFF71CFFA0
:1005500008263C00FFF76EFE002204201100FFF782
:10056000E5FE24090007013E0443FFF781FEFFF783
:1005700045FE002EEED1FF2362032B746B74520DE7
:100580006E2AD2D131000120E20C009313406A732D
:10059000AE7301933200009BF7B21A4094460200FA
:1005A00063469A40019B0136934226DA002900D027
:1005B000AF730027EC736B7B9F42B6DA08260024EA
:1005C000FFF738FE002204201100FFF7AFFE2409D8
:1005D0000007013E0443FFF74BFEFFF70FFE002E1E
:1005E000EED1FF22E30C1340842B08D16403640D89
:1005F0006E2C04D12F74300099E70100CAE701374F
:10060000D9E7C0464F440041004400417800002033
:1006100003210A4B01405A68094809041040084365
:10062000084A5860D8694007C00F00D17047013AA6
:10063000002AF7D101204042F8E7C04600080042F6
:10064000FFFFFCFF52C30000F8B52A4D2A4A2900DB
:10065000937C2A485B00DCB26B8B9B069B0F012BC3
:1006600004D06B8B9B069B0F022B17D14B6ADB0AC6
:10067000DB0223434B620B7EDB0718D54B8B5B07FA
:10068000DB0F0ED118000127D47C002C13D10028D9
:1006900000D0D4740320FFF7BBFF06E00138831CB1
:1006A000DAD10320FFF7B4FF02242000F8BD01389F
:1006B000831CE0D1F5E7124D124E5D5D3570124D91
:1006C0000E7EF60707D54D8B01336D0706D4013C2E
:1006D000E4B23800D9E7013D002D07D1002800D051
:1006E000D4740320FFF794FF0324DEE74E8BF60754
:1006F000E6D5F3E7000800427800002050C3000070
:100700008C0000202808004252C3000010B56B2264
:100710000224044B9A741875DC745975FFF794FF22
:10072000200010BD780000206B2310B5234CA3746B
:100730006A3BE3742075FFF787FF002398422ED1B0
:10074000A0751F481F4A0300418B8906890F0129A4
:100750001CD1D720596AC90AC90201435962197EBE
:1007600089071ED55A8B520718D40122A2751A7E0A
:100770009207FCD5144A03201278E275802259684A
:10078000D2020A435A60FFF743FF07E0418B890614
:10079000890F0229DDD0013A911CD5D1E37D1800E3
:1007A00010BD013A911CF9D0197EC907D7D5C022D6
:1007B000596892020A435A60F0E7C0467800002068
:1007C0000008004250C300002808004237B5194C09
:1007D0000190637C0D00002B1FD10C20FFF7D4FD8E
:1007E000FFF728FD019B01A99A00032313430193FE
:1007F000002320201A00FFF74DFD637C012B12D14E
:100800000C20FFF7C1FDFFF715FD002320202A0073
:100810001900FFF73FFD002004E00020FFF7E2FD94
:100820000028DADA3EBD0120FFF7DCFD0028F9DB05
:10083000E6E7C0467800002013B50C00FFF7F0FD96
:100840000190A04215D180220C4B52050C4C9A61AC
:100850005A61013C002C0FD001A90020FFF7B6FF20
:10086000019B002BF5D101A90120FFF7AFFF0198F3
:1008700016BD0A204042FBE70120FBE7004400418F
:10088000EA030000F0B5124C0D00A544114B019095
:10089000029168460321160000930227FFF7CCFF60
:1008A000EC1CA4080134B90038006944FFF78EFF3E
:1008B0007B1E01379C42F6DC00231A006A44127B3F
:1008C000F2540133AB42F8D1034B9D44F0BDC04616
:1008D000FCFBFFFF0500000104040000F8B51A4FFF
:1008E00006003B7E08001400002B12D1174B184A5B
:1008F00018491A645A6C920B92035A645A6C0A4053
:100900005A64A22240235200B15C0B43B35401232A
:100910003B764825FF35735DDB07DB0F12D00B4AB2
:10092000536C9B049B0C9C4202D9546CA404A40CF1
:100930002200074901F069F90123735500233B7632
:100940002000F8BD1C00FBE7780000202C020020EE
:10095000EC010020FF3F00F013B56B46DC1D044B9B
:1009600001222100D869FFF7B9FF207816BDC046E3
:1009700078000020F7B5009001201C4D1C005B01A1
:1009800016000193EA18536910325B005B0F0333C2
:100990009840B04221D8802350681B06034353601F
:1009A0006301ED1829616B69B1049B0B890C9B03F2
:1009B0000B436B616B690E4908340B406B61009B04
:1009C00064011C190223E3716279823B1343637152
:1009D000E3799B07FCD53000FEBD064BA701FF184D
:1009E0003200380001F011F93900D9E72C0200205B
:1009F000FF3F00F02C01002010B50C000A000100A0
:100A000003480123C069FFF7B5FF200010BDC046B1
:100A100078000020012307B5019004481A0001A9BD
:100A2000C069FFF7A7FF01200EBDC0467800002077
:100A300010B50B4C0B4BA5440C000190110003A802
:100A400022000093029401F0E0F8E11C89080331D0
:100A50006846FFF7F1FE8023DB009D4410BDC046D1
:100A600000FCFFFF04000001F0B5CB4BCB4CCA48A3
:100A70005B68A54400AF28301B69402198470028D7
:100A800002D06423C44A5381C34BC34A98662833B7
:100A9000D36600231367C04B1B6FFB60BE4B9B6E7E
:100AA000BB60BA68FB68934200D3B2E1BA4BDB6E1D
:100AB000FB601B78FF2B63D0232B00D05CE3B64B8D
:100AC0009B78002B06D0B44B02225B68B449D868EF
:100AD000FFF7DAFAB04874300378532B5DD1AE4B90
:100AE000AD4A9B6E146FA3421FD9AB49926FC96E7A
:100AF00001344D1CF960A8491B1BCD660C6793425D
:100B000048D2CB67A44BA74EDB6F29001A00306890
:100B1000FB6001F07AF8FB68E4189F4B1C67FB68E8
:100B2000ED189D4BDD663B7B33719B4B9A4A1B6FE7
:100B30009949013B1367D36E896FFB60013BD36614
:100B4000984B1A798A420AD2891A934A18685268CD
:100B500092699047002802D064238F4A5381C0468F
:100B60007A228D4B74331A7000238B4A93679378E3
:100B7000002B05D053688C490122D868FFF784FA0E
:100B8000854B854A1B6F01331367D36EFB600133BE
:100B9000D36680E7804BDA67B4E7522B09D17E4BEE
:100BA0007D4A5B687F49926F09685869FFF76CFA64
:100BB000D6E74F2B07D1784A7A4B926F1B68FA60C1
:100BC0003A7B1A70CCE7482B07D1734A754B926F6A
:100BD0001B68FA60BA891A80C2E7572B06D1714B9D
:100BE0006D4A1B68926FFA601A60B9E76F2B05D1E6
:100BF00001216C4B1868FFF753FAB1E7682B07D156
:100C0000684B654A1B6804301B8802219367F2E732
:100C1000772B09D1634B04301B6804211B68FB60F0
:100C2000FA685D4B9A67E6E7472B19D15A4B996FE3
:100C300072B6EFF308825B4B9A600A6882F3088809
:100C40004A6810479A6882F3088862B61B7B002BBB
:100C500000D185E7504B06205B681B6898477FE70B
:100C6000542B0AD14C4A533B9370130002225B6809
:100C70004B49D868FFF708FA72E74E2B0ED1464B66
:100C80009B78002B06D1444B02225B684449D8680C
:100C9000FFF7FAF90023404A937061E7562B62D1BF
:100CA0003D4B01225B684149D868FFF7EDF93A4BAB
:100CB0003F4D5B6803222900D868FFF7E5F9364B02
:100CC0003C4C5B6801222100D868FFF7DDF9324B0C
:100CD000291D5B680D22D868FFF7D6F92E4B01223B
:100CE0005B682100D868FFF7CFF9002301202A4A6A
:100CF000844613671A0030494E1C8D5CB018002DD5
:100D00002BD1002B01D0244B1A67234B224AD866E3
:100D10005B68126FD868FFF7B7F91F4B01225B6859
:100D20002100D868FFF7B0F900231B4A012613679A
:100D30001A0022494D1C8C5CA818002C10D1002BE5
:100D400001D0154B1A67144B134AD8665B68126FB3
:100D5000D868FFF799F9104B88E701326346CCE772
:100D600001323300E7E7582B30D10E4A0A4B1069A5
:100D700052699B6F1249134C9200984204D8064B5B
:100D800003225B68104974E75D08CD610C800D7D1E
:100D9000ED07FCD59B18F0E7780000205CEFFFFF23
:100DA000541F0000F8000020571F00002C1F0000F7
:100DB000441C00002E1F0000301F00003C1F0000DC
:100DC0000040004102A5FFFF451F0000592B00D045
:100DD00041E1C94BC94A9B6F1468002B05D194614E
:100DE000C54B03225B68C64943E79B08FB609369D8
:100DF000BB608023DB029C4200D0C6E0FFF73AFBD9
:100E0000051E0AD0BC4B03225B68BE49D868FFF7B9
:100E10003BF9BD46BC4B9D44F0BD1023FE1832008B
:100E20009021BA48FFF72EFD08233E60BC68B84EFB
:100E30007B60220023002D322C3312781B781202A3
:100E40001A4323002E331B781B041A4323002F332D
:100E50001B781B06134351D06278237812021A4381
:100E6000A3781B041A43E3781B061343A84A536074
:100E70000122A24B1A770024BB6819190A000B0043
:100E80002932283312781B7812021A430B002A33B6
:100E90001B781B041A430B002B331B781B061343D0
:100EA000013305D01023FB181819302200F0ADFED5
:100EB0003034902CE0D110219022964B791889186B
:100EC00010200B60942102233818411810200B6069
:100ED000FF239821381841185B030B608018032109
:100EE000FFF7AAFC7134FF34FB68AB4240D81023F3
:100EF0009021FA188548FFF79BFD71E77A683B68F7
:100F00009B182200196A23002932283312781B7893
:100F100012021A4323002A331B781B041A432300AE
:100F20002B331B781B061343994201D04B1C17D15E
:100F30006278237812021A43A3781B041A43E378D9
:100F40001B0613437268934200D2736021007A68D3
:100F50003B6808319818202200F048FE002887D10D
:100F60007B68303430337B60982B00D061E782E7B8
:100F7000FF23DB02E818684B8000C218BB68210021
:100F80009A18FFF755FD8035AEE7644B9C4239D97E
:100F9000137F002B00D123E75D4B614A5B689B18F0
:100FA0001C19A3B2002B12D110219022594B791891
:100FB000891810200B6094210223381841180B6007
:100FC0009633C318032180181C60FFF735FCFB68BB
:100FD00080267F33DB095A02802320009B00E31820
:100FE000D318FB60B60080239B00C518FB689D42A8
:100FF00000D1F5E6BB6831001A18121BFFF718FD87
:101000002800F0E78020474B5968814359605169B7
:10101000454A89089446FA68002A00D1E0E6434A26
:101020001A801A7DD207FCD520000022BD6804007A
:10103000BD60914202D0FE68964208D16046188099
:10104000187DC007FCD5F868821AFA60E3E710CD76
:10105000013210C0EBE75A2B00D081E5264B9D6F83
:10106000264B1C688023DB029C423FD18026002453
:1010700076000CE010229023BA18D3181A19FF2317
:101080005B03E0183100FFF7FDFB0134FF34A5429C
:10109000F0D810229023BA18D4180026244A6519D3
:1010A000AC425FD1144B01225B682249D868FEF73D
:1010B000EBFF0F24072332002240D0B20100360993
:1010C0003031092A00DD07311022BA18D154013B12
:1010D000F1D21021084B08225B687918D868FEF716
:1010E000D3FF054B03225B681349C2E50B4B9C42BF
:1010F000D3D9002633E0C04678000020F800002055
:101100004D1F0000491F0000A410000000F01F0048
:1011100000000020030000010020E0FFFF0F04009A
:1011200000F0FBFF0040004104A5FFFF44A5FFFFC6
:101130002C1D0000511F0000531F0000102290239F
:101140008021BA18D3189A19244B49005868244BA7
:10115000C01820188019FFF795FB0136FF36AE4204
:10116000ECD396E72178330A4B405B0031029E5A5C
:1011700001344E40B6B293E71A00303AD1B2092991
:1011800007D8184B9B6FFB601B011343154A9367ED
:10119000F6E41A00413A052A05D8124A373B926F05
:1011A000FA601201F1E71A00613A052A05D80D4AE2
:1011B000573B926FFA601201E7E700222C2B08D10F
:1011C000084B9B6FFB60F968074B1960054B9A67EA
:1011D000D6E4044974310B70F8E7C04600000020E3
:1011E00000F0FBFF78000020F800002070B505003B
:1011F000C0B0080016000C0000F010FD6B46400067
:10120000023018706A46032376085370023B5A1E58
:10121000A15C5A00002901D09E4206DC00236946E9
:101220002800FFF7A7FB40B070BD6846013381522C
:10123000EDE7F7B5056808222900AB8B06001340DF
:10124000FF31002B27D080234020C024AA830932FD
:10125000AB724A7088714B71B34BB44D5A68A40598
:101260002A4022435A605A692A401443B04A5C61BA
:101270001A60B04AB04C1A615A6814408022920237
:1012800022435A605A68920B92035A6000234871B5
:1012900033713079FEBD10200A7A0242F9D0A44A97
:1012A000A64C1778087267775778A77797782784BE
:1012B000278CBC466046D7783F02074327841779BE
:1012C00067845779608C3F02074367849779A784C6
:1012D000D279A78C12023A434027A2844F71A27F91
:1012E000607F120202439648824200D1F2E026DC7F
:1012F0008020400082421CD00BDC812A04D0822A4C
:1013000000D1BEE0802A14D12100E38426310222DC
:101310004EE081235B009A4200D127E100DAF8E039
:10132000FF33FF339A4200D1CFE0864B9A4200D17F
:10133000EFE02023FF35AA791343AB71A9E7902191
:1013400009018A426CD017DCD021C9008A4222D020
:10135000882109018A4200D190E0A023DB009A4253
:10136000E7D12800FEF71AFF8023228C5B4213434B
:101370003268DBB293728CE7734B9A4200D1C8E0BB
:10138000D7DD724B9A4200D14DE1714B9A42D0D1D8
:10139000238C7371BDE0238C1B0A012B0CD112220C
:1013A000A38C934201D8A28C92B2002369491431D4
:1013B0002800FFF7DFFA6CE7238C1B0A022B09D108
:1013C0004322A38C934201D8A28C92B2624900239B
:1013D0000831EDE7238C1B0A032BAAD1238CDBB247
:1013E000012B16D0002B05D0022BA2D1A28C5B4979
:1013F000D2B211E057490422263101A800F005FCC1
:101400000422A38C934201D8A28C92B2002301A99A
:10141000CEE7A28C5249D2B22800FFF7E7FE38E7A8
:10142000238C28003371FEF7B9FEA0230322C021CC
:101430005B00EA543C4B3D485A6C890502400A4324
:101440005A644622FF32AF54464A30241A6490222E
:101450005200AC545A6B02401143922259638021CE
:101460005200A954404A1A63B0225200AF545A6F36
:1014700010405867B2235B00E9540AE7311D01228E
:1014800096E75022E384638C0F2013402200283219
:101490001370638C03406384638C032B15D813781B
:1014A000002B0BD0638C08335B01EB189B799B06F8
:1014B0002100DB0FE3842631002328E7638C083307
:1014C0005B01EB189B79DB06F2E720238A79134353
:1014D0008B71DEE68022638C0F21134022002832BC
:1014E0001370638C0B406384238C002B00D020E7A7
:1014F000638C002B00D11CE7638C032B00D918E709
:101500001378002B09D02022638C08335B01EB1881
:101510005A712800FEF742FEBBE6638C10220833A6
:101520005B01EB18F4E7C0462C020020FFFFFF8FA1
:10153000AC0100202C010020FF3F00F0F80000204B
:10154000020300000103000021200000A12100008F
:1015500021220000441C000000000020651F000044
:10156000591F0000EC0100206C0100208022638CD8
:1015700013402200283213700F22638C13406384BF
:10158000238C002B00D0D4E6638C002B00D1D0E656
:10159000638C032B00D9CCE6230028331B78002B67
:1015A00020D0638C08335B01EB189B799B06B0D588
:1015B000638C113208335B01EB181A71638C0833AA
:1015C0005B01EB18DB795B06A3D5638C2032083313
:1015D0005B01EB18DA71638C3E3A08335B01EB1860
:1015E0001A7196E7638C08335B01EB189B79DB0675
:1015F0008FD51022638C08335B01EB181A71638C52
:1016000008335B01EB18DB799B0600D481E7638C20
:10161000921808335B01EB18DA71638C1F3A0833B8
:101620005B01EB18DCE70822A38C934201D8A28C63
:1016300092B2024900234C31BAE6C04600000020B5
:10164000F8B50B4F060038001C300D00FFF7F1FD18
:101650002C00002808D1050008E022003100F869BC
:10166000FFF73CF9241A3618002CF6D12800F8BDF3
:101670007800002070B5084C050020001C300E00DA
:10168000FFF7D7FD03000020834204D03200290079
:10169000E069FFF723F970BD7800002010B5084C11
:1016A00020001C30FFF7C5FD03000020834205D059
:1016B0004823E269FF33D05CC007C00F10BDC046AD
:1016C000780000200D4A0E4870B5824206D10D4ABE
:1016D0000D4B002193420DD100F01AF80B4C002362
:1016E0009442F4D0D1188842F1D9E55804330D6002
:1016F000F8E702C39342FCD3EEE7C04600000020A7
:101700005C000020AC0200205C000020801F000074
:10171000F0B50B498BB00B6800AF013320D00948FE
:10172000094BC9B2C36200291AD1084B084A1B7879
:10173000DB07DB0F0ED011600123303003700FE0A8
:1017400000200000F80000200420000038040040C1
:10175000FC7F00201468DA498C4200D028E2136034
:101760001E22D8494B6893431C3A13434B6008230D
:10177000D549886903438B61D448D54B9882988AB0
:1017800010439882D8681042FCD00122D1480270E0
:101790000478144203D0447864B2002CF8DB0122B0
:1017A0008260427852B2002AFBDBCB4A4260427828
:1017B00052B2002AFBDB8222D2014280427852B22E
:1017C000002AFBDB80249A8CA2439A841022DC68D6
:1017D0001442FCD0C14ADA621022DC681442FCD008
:1017E0009C8CBF4A22439A841022DC681442FCD0AD
:1017F00002229C8C802522439A844022DC682C4261
:10180000FCD0DC681442F9D01022DC681442FCD011
:101810000023836043785BB2002BFBDBB14B43605A
:101820007B6043785BB2002BFBDB00230B724B72B7
:101830008B72CB7262B6AC4B438043785BB2002BA9
:10184000FBDB04230A6AA94C13430B6201232268C1
:10185000134323602368DB07FCD4E369DB07F9D477
:101860001423FF222360E36893431A00EF231343FA
:10187000E3600223226813432360E3699B07FCD4DF
:101880003022638B93431A00102313436383E5696B
:101890006D07ED0FFBD101260F200221944A13782A
:1018A00033431370934B1A7882431A701A780A43A1
:1018B0001A70914A1178314311701A7802401A70E7
:1018C000202219780A380A431A70FEF72DFF0028E3
:1018D0003BD0CE2101400520FEF718FF3000FEF777
:1018E00023FF30239843C1B23000FEF70FFF2800DA
:1018F000FEF71AFF782301009943483B1943C9B208
:101900002800FEF703FF2800FEF70EFF0721014322
:10191000C9B22800FEF7FAFE0220FEF705FF01001B
:1019200002203140FEF7F2FE0420FEF7FDFE032107
:101930000140982001439438FEF7E8FE0222236814
:1019400093432360E3699B07FCD40F226B49012575
:101950000B78604C1A4070231343694A0B7013785C
:101960002B43137080235B00A36080237A681B03E2
:1019700013436360FEF77EFD08232900F818BD605D
:10198000FEF75AFF000EB02804D02800FEF7FCFC3A
:10199000FEF750FC5B4D2B0030331B78002B0AD038
:1019A000594B1A6882F30888FF229343574A936081
:1019B000EB6A1B6818472023434A0F20D1690B4369
:1019C000D361012352490A781A430A70514A1178A7
:1019D0008143117006211678314311704E490E78FB
:1019E00033430B70137803401370602311780B435B
:1019F00013704A4B638063785BB2002BFBDB0123DF
:101A0000474E327813433370B378DB07FCD41F2181
:101A1000444A13685B0B0B408B4200D10523308D89
:101A2000414C0B409B0120400343338513689B0CC2
:101A30000B401F2B00D1023B1F20318D03408143FF
:101A40000B43338513680722DB0D13407A60934202
:101A500000D103230721328D0B4034491B030A4078
:101A600013437F2233853378314813403370042386
:101A70003278002113430C22337070623389934310
:101A8000338133890B3A934333817F3200F0A6F8D8
:101A90000021284C284BE6616362022321843278BE
:101AA0001A48134380223370C026244B52001A6018
:101AB000234A244B36065360036A1B021B0A43E089
:101AC0003581730700400041000400400C0600000F
:101AD00000080040000C004001050100B805FF7D32
:101AE000040A000000070300144000000008004240
:101AF0004844004134440041494400413D440041D0
:101B00005B440041F80000200020000000ED00E0F0
:101B1000584400413C440041594400410640000003
:101B200000500041246080003FF8FFFFFF8FFFFF5F
:101B30002C0200207800002033120000884400416D
:101B400010E000E0E70300003343036207230126AF
:101B5000916013602000636A1C309847002801D010
:101B6000194B1E70184B1B78002BF3D0174B1A0023
:101B70002C32626008224833BA1843CB43C243CBAD
:101B800043C203CB03C20821114A79189368743405
:101B90005B035B0F9B00CB586B61926892B253431F
:101BA0002B6100232B607A332370FEF75DFFFCE787
:101BB000084B013B002BFCD1074B1160013B002B74
:101BC000FCD11360B8E5C04629010020441C000088
:101BD00000400041C409000048E801000300121859
:101BE000934200D1704719700133F9E730B50024F2
:101BF000A24201D1002005E0035D651C0C5DA342FB
:101C000001D0181B30BD2C00F2E7002310B59A421A
:101C100000D110BDCC5CC4540133F8E70023C25C92
:101C20000133002AFBD1581E70470000F8B5C046AA
:101C3000F8BC08BC9E467047F8B5C046F8BC08BC66
:101C40009E467047322E30005B41726475696E6F3C
:101C50003A58595A5D00000012010002020000408B
:101C600041235600000201020001040309040000A0
:101C7000150A0000590900009D160000F90900002E
:101C800075160000F9090000411600000800000068
:101C90001000000020000000400000008000000054
:101CA000000100000002000000040000010000002C
:101CB0000000000001000000090000000300000017
:101CC0000000000004000000050000000400000007
:101CD00005000000060000000800000006000000EB
:101CE00007000000040000000800000001000000E0
:101CF000090000000A000000020000000B000000C4
:101D00000C0000000B0000000C0000000D000000A3
:101D10000F0000000D0000000E0000000B0000008E
:101D20000F00000001000000090000000000211069
:101D3000422063308440A550C660E7700881299135
:101D40004AA16BB18CC1ADD1CEE1EFF131121002DD
:101D500073325222B5529442F772D6623993188385
:101D60007BB35AA3BDD39CC3FFF3DEE362244334A9
:101D700020040114E664C774A44485546AA54BB5D5
:101D800028850995EEE5CFF5ACC58DD5533672267D
:101D900011163006D776F6669556B4465BB77AA725
:101DA00019973887DFF7FEE79DD7BCC7C448E558C9
:101DB0008668A7784008611802282338CCC9EDD975
:101DC0008EE9AFF9488969990AA92BB9F55AD44A1D
:101DD000B77A966A711A500A333A122AFDDBDCCBC5
:101DE000BFFB9EEB799B588B3BBB1AABA66C877CE9
:101DF000E44CC55C222C033C600C411CAEED8FFD15
:101E0000ECCDCDDD2AAD0BBD688D499D977EB66EBC
:101E1000D55EF44E133E322E511E700E9FFFBEEF64
:101E2000DDDFFCCF1BBF3AAF599F788F8891A98126
:101E3000CAB1EBA10CD12DC14EF16FE18010A10010
:101E4000C230E3200450254046706760B983989300
:101E5000FBA3DAB33DC31CD37FE35EF3B102901260
:101E6000F322D2323542145277625672EAB5CBA5CC
:101E7000A89589856EF54FE52CD50DC5E234C324B0
:101E8000A01481046674476424540544DBA7FAB7A0
:101E90009987B8975FE77EF71DC73CD7D326F23600
:101EA0009106B01657667676154634564CD96DC9EC
:101EB0000EF92FE9C899E9898AB9ABA94458654850
:101EC00006782768C018E1088238A3287DCB5CDB40
:101ED0003FEB1EFBF98BD89BBBAB9ABB754A545AA0
:101EE000376A167AF10AD01AB32A923A2EFD0FED0C
:101EF0006CDD4DCDAABD8BADE89DC98D267C076CF0
:101F0000645C454CA23C832CE01CC10C1FEF3EFFDF
:101F10005DCF7CDF9BAFBABFD98FF89F176E367E3F
:101F2000554E745E932EB23ED10EF01E7600200008
:101F300041756720203920323031380031313A3153
:101F4000373A333000580A0D00790A0D00590A0D4E
:101F5000005A00230A0D003E0041726475696E6FDD
:101F6000204C4C430041726475696E6F204D4B529A
:101F7000205669646F722034303030000000000059
:101F800001140000FFFFFFFF09024300020100806F
:101F9000FA090400000102020000052400100104F7
:101FA0002402000524060001052401000107058321
:101FB000030800FF09040100020A00000007058170
:101FC00002400000070502024000000000C20100BC
:0C1FD00000000800690000004100000053
:04000003000016C51E
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:1000600000000000B018000008B5084B002B03D0BA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:10009000B0180000600000205800002000000000A0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,327 +78,327 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:1016000057414E20313330300000000012010002FB
:1016100002000040412353000002010200010000CB
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A323200580A0D00590A0D005A00233D
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020B418000038B5304B1F
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A1210000212200000416000004000020D3
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C0200203816000094000020841600006A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001816000000400041440200203C0200202D
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:101070004002002088000020781600009402002022
:1010800098020020280200208C00002090020020FE
:1010900094000020541600007D1600005616000033
:1010A000A0160000581600006416000002A5FFFFFD
:1010B0006D1600009000002044A5FFFF04A5FFFF6F
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200207116000088020020BF
:1011D00075160000771600003402002094020020EB
:1011E000880000207B160000400200203002002012
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000AE160000F7B50024051C0F1C261CBC428D
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B522057414E2031333030B1
:1016000000000000120100020200004041235300CC
:1016100000020102000100000800000010000000AC
:1016200020000000400000008000000000010000D9
:1016300000020000000400009D120000C112000022
:10164000B1120000F51200000F1300009913000002
:10165000A114000076002000417072203131203248
:101660003031390031333A30393A353500580A0DC6
:1016700000590A0D005A00230A0D003E00322E3098
:1016800000000000250B0000410B00005D0B000076
:10169000810B00009D0B0000810B0000C50B0000BA
:1016A0005B41726475696E6F3A58595A5D0000006B
:1016B0002110422063308440A550C660E770088145
:1016C00029914AA16BB18CC1ADD1CEE1EFF13112BC
:1016D000100273325222B5529442F772D662399395
:1016E00018837BB35AA3BDD39CC3FFF3DEE362240C
:1016F000433420040114E664C774A44485546AA5E5
:101700004BB528850995EEE5CFF5ACC58DD553369B
:10171000722611163006D776F6669556B4465BB734
:101720007AA719973887DFF7FEE79DD7BCC7C4486B
:10173000E5588668A7784008611802282338CCC984
:10174000EDD98EE9AFF9488969990AA92BB9F55AFB
:10175000D44AB77A966A711A500A333A122AFDDBD4
:10176000DCCBBFFB9EEB799B588B3BBB1AABA66CCB
:10177000877CE44CC55C222C033C600C411CAEED24
:101780008FFDECCDCDDD2AAD0BBD688D499D977EDB
:10179000B66ED55EF44E133E322E511E700E9FFF74
:1017A000BEEFDDDFFCCF1BBF3AAF599F788F88912A
:1017B000A981CAB1EBA10CD12DC14EF16FE180100E
:1017C000A100C230E3200450254046706760B98311
:1017D0009893FBA3DAB33DC31CD37FE35EF3B1025E
:1017E0009012F322D2323542145277625672EAB521
:1017F000CBA5A89589856EF54FE52CD50DC5E234AE
:10180000C324A01481046674476424540544DBA7F0
:10181000FAB79987B8975FE77EF71DC73CD7D326FD
:10182000F2369106B01657667676154634564CD980
:101830006DC90EF92FE9C899E9898AB9ABA944584D
:10184000654806782768C018E1088238A3287DCB50
:101850005CDB3FEB1EFBF98BD89BBBAB9ABB754A9D
:10186000545A376A167AF10AD01AB32A923A2EFDE0
:101870000FED6CDD4DCDAABD8BADE89DC98D267CED
:10188000076C645C454CA23C832CE01CC10C1FEF30
:101890003EFF5DCF7CDF9BAFBABFD98FF89F176E3D
:1018A000367E554E745E932EB23ED10EF01E000071
:0418B0000000000034
:1018B40001140000090243000201008032090400FF
:1018C40000010202000005240010010424020005A6
:1018D400240600010524010001070583030800FF15
:1018E40009040100020A000000070581024000000B
:1018F400070502024000000000C2010000000800C9
:0C1904006900000041000000000000002D
:040000030000060DE6
:00000001FF

Binary file not shown.

View file

@ -0,0 +1,508 @@
:10000000FC7F0020E10B0000D10B0000D50B0000AD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000D90B0000EC
:100030000000000000000000DD0B0000350D000096
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000381F000008B5084B002B03D02B
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000381F000060000020580000200000000011
:1000A000094A0323184003040849506808401843CC
:1000B000074B5060D0694007C00F04D0013B002BB4
:1000C000F8D101204042704700080042FFFFFCFFCA
:1000D00052C3000070B5400008431D4BC0B21D4C18
:1000E0000325668B221C36092E40012E07D1546A47
:1000F000E40AE4022043506200290DD010E0648B32
:1001000024092540022DF2D0013B9A1CE7D10020A2
:100110001CE0013B581CFAD4117EC807F9D511E048
:10012000107E012440080B4920400BD1002BEEDB50
:100130000D7E013B2542F3D04A68C0239B02134346
:100140004B6003E0538B01209B08984370BDC04671
:1001500050C300000008004238B5284A284B5A8096
:100160005A7852B2002AFBDB264B04211A6A264D2C
:100170000A431A622B68012213432B602A68012369
:10018000214C1A42FAD1E2691A42F7D114232360B2
:1001900041001E4801F0F2FC421EE068FF231A40B5
:1001A00098431043E0602368022213432360EA6906
:1001B000154B9107FBD45A8B30218A4310210A43F7
:1001C0005A83EB6901205A07FBD4114B02241A7899
:1001D00002431A700F4B0F22197891431970197846
:1001E000214319700C490C782043087019780A4093
:1001F0001A701A7820210A431A7038BD1440000082
:10020000000C00400004004000080042006CDC02CA
:10021000484400413444004149440041044B022118
:100220001A688A431A60DA699107FCD47047C0469D
:1002300000080042F7B50D1C019234D01B4F00237B
:1002400001213B70FFF746FF00282BD001233B70B4
:10025000174C237E9907FBD5164A174B11780126B8
:1002600019706268AE4212D0144B022013406360D2
:10027000FFF716FF3B785A1C3A70227E9107FCD597
:100280000C4901360A780C49F6B2CA54E9E78023D2
:10029000DB0213436360019A002A04D00320FFF7B6
:1002A000FFFE00E0051C281CFEBDC04678000020B3
:1002B00000080042280800429D000020FFFFFBFFCD
:1002C000024B00221870024B1A7070477A0000200F
:1002D00079000020F8B51E4B051C00211878FFF7A7
:1002E000F9FE002804D10320FFF7DAFE02242CE0F7
:1002F000184A1678331C002B16D01748F11A405CA8
:100300001649174C087017480121077E0F4206D185
:10031000013C002C10D0408B0842F4D00CE0408B04
:10032000800808420ED007E013701C1C002D0CD072
:100330000320FFF7B5FE08E0032013700324FFF746
:10034000AFFE02E0013BDBB2D5E7201CF8BDC046A2
:100350007A000020790000207B000020280800425D
:1003600052C3000000080042034A1378591C117060
:10037000024AD05401207047790000207B00002001
:10038000154A164B1178002909D1154918780978B2
:100390004118C9B21970802012494003C861117810
:1003A0000131C9B211701978F02902D819780929D8
:1003B00009D80B4908784042C0B20870187809780B
:1003C0004118C9B2197012781B789A4203D1802261
:1003D000044B5203DA6170477D00002001000020C9
:1003E000000000200044004110B5041C6B20FFF702
:1003F00067FF201CFFF7B8FF0120FFF76BFF00230A
:10040000984206D101216B200A1CFFF713FF024B13
:100410001B78181C10BDC0469D00002038B5051C77
:100420006B200C1CFFF74CFF281CFFF79DFF201CC6
:10043000FFF79AFF0120FFF74DFF022038BD08B5F6
:100440000520FFF7D1FF0023984205D0CE210140BF
:100450000520FFF7E3FF0123181C08BD10B5041C9D
:100460000020FFF7C1FF78232D4A9843C1B2944280
:1004700042D018D82B4B9C4238D009D82A4B9C42EA
:1004800030D02A4B9C422FD0294B9C4245D13FE093
:10049000284B9C422CD0284B9C422BD0274B9C4273
:1004A0003BD1202333E0264A94422BD00AD8254B57
:1004B0009C4223D0244B9C4222D0244B9C422CD1E2
:1004C000402324E0224A94421ED004D8214B9C426F
:1004D00023D160231BE0204A944217D01F4A944244
:1004E00015D01AE0082312E0102310E018230EE0C4
:1004F00028230CE030230AE0382308E0482306E0F4
:10050000502304E0582302E0682300E070231943DD
:100510000020FFF783FF012000E0002010BDC0464F
:100520005811000018100000780F0000C80F0000DC
:10053000280F0000B810000008110000681000002B
:1005400098120000F811000048120000A8110000E5
:1005500038130000E812000088130000D8130000D0
:1005600010B5041C0020FFF73FFF07239843E1224A
:10057000C1B29200944220D008D8962C18D0FA2309
:100580005B009C4217D0642C22D11CE0114A94429B
:1005900015D005D89623DB009C4219D1042311E025
:1005A000FA22D20094420CD00B4A94420AD00FE0B7
:1005B0000124214307E0022304E0032302E0052392
:1005C00000E0062319430020FFF728FF012000E088
:1005D000002010BDDC050000B80B000070B504ACB5
:1005E000267805AC2578441EA041C401002901D01D
:1005F00040210C43002A01D020221443002B01D0BB
:1006000010231C43002E01D008231C43002D01D0D1
:1006100004231C430220FFF7E7FE0125011C2940AB
:1006200021430220FFF7FAFE281C70BD10B5041C00
:100630000420FFF7D9FE03231840084B9C4204D046
:10064000074B9C4208D1B02100E0982101430420CF
:10065000FFF7E4FE012000E0002010BD10100000B4
:100660007010000008B50120FFF7BEFECF23011C6B
:1006700019400120FFF7D2FE012008BD13B5FFF796
:10068000DEFE002817D0FFF7EDFF0C480024FFF72F
:10069000E5FE0B48FFF764FF211C221C231C00947D
:1006A0000194201CFFF79AFF0648FFF7BFFFFFF7F2
:1006B000B5FD201C01E00120404216BD08110000DC
:1006C000B80B00001010000008B50348FFF744FD08
:1006D000FFF7D4FF08BDC046A086010010B5C3696E
:1006E0009C07FCD403680224A3430360C46901236C
:1006F0001C42FBD10468234303600368DC07FCD47D
:10070000C46901231C42FBD1C469DC401C42F7D1FF
:10071000084B1A430260C3695A07FCD4C0239B02EA
:1007200043608181C3699C07FCD4036802221343A0
:10073000036010BD04000040037EDA07FCD501858C
:1007400070470000027E01235107FBD5428B1A42FD
:1007500007D1428BDA401A4203D1428B92081A42E7
:1007600002D0034B01221A70008DC0B27047C04600
:100770007E00002070B50368041C988B1A1C0821A9
:10078000FF32084226D0802099839872112353703B
:100790004021144B917150715E68134DC0202E4062
:1007A000800506435E605E693540284358610F4806
:1007B00018600F4818615D680E4828408025AD021A
:1007C000284358605868800B80035860002351719B
:1007D000237105E0137ADA0602D5201C00F0E4FA52
:1007E000207970BDA0010020FFFFFF8FA000002036
:1007F00020010020FF3F00F0002303714371044BF0
:10080000016083600B78022213430B707047C0466F
:100810007507000038B5364B2021DA6901200A43FC
:10082000DA61344B06241A7802431A70324B0F22D5
:100830001978914319701978214319702F490C7850
:100840002043087019780A401A701A7860210A4308
:100850001A702B4B2B4A5A805A7852B2002AFBDB73
:10086000294B01211A780A431A709A78D107FCD4CF
:1008700026480268510B1F221140914200D10521E8
:1008800011408C011D8D224929402143198504689E
:10089000A10C0A401F2A00D11D221C8D1F210A40D5
:1008A0008C4322431A8502680721D20D0A408A42EE
:1008B00000D103220A40188D1103164A02400A4350
:1008C0001A8519787F220A401A701A780421124872
:1008D0000A431A7058621A890C218A431A811A89AC
:1008E00001218A431A810021802201F0A0F938BD3C
:1008F00000040040584400413C4400415944004138
:10090000000C0040064000000050004124608000C0
:100910003FF8FFFFFF8FFFFFA0010020F7B5141C79
:100920001F4A5F0101971D1CD319061C5869271C1B
:100930004000400F03301033C74006D00F1C802208
:10094000596812060A435A6009E02F1C7B1E9F411A
:10095000144BBF01FF18381C221C01F05FF90199EC
:100960000F48083542181761131C5269A104920BF5
:10097000890C92030A435A6159690B4A0A405A6129
:100980006B01F3180222DA715979802252420A432C
:100990005A716B01F318DB799A07FAD5201CFEBD5A
:1009A000A001002020010020FF3F00F0F8B51A4E02
:1009B000051C3378141C002B12D1184B184A1A64EA
:1009C0005A6C920B92035A64586C164A02405A644D
:1009D000A2235B00EA5C40200243EA540123337007
:1009E0004827FF37EA5D0123134012D00B4B5A6CA6
:1009F0009204920CA24202D25C6CA404A40C081CC7
:100A0000221C074901F00AF90123EB55002333703A
:100A100000E01C1C201CF8BD7F000020A00100206D
:100A2000E0000020FF3F00F0FF3083792022002902
:100A300000D110221343837170470000084BFF3030
:100A40005A69920B92035A610223037282798023BE
:100A50005B4213438371037A9A07FCD57047C04603
:100A6000A001002080235B421943C9B28172704704
:100A700070B5A02303225B00C254134B134A5C6C75
:100A8000C021144089050C4346255C64FF35402491
:100A900044550F4D30261D6490256D0046555D6B05
:100AA00015402943922559636D0080214155094D18
:100AB0001D63B0256D0044555C6F22405A67B22318
:100AC0005B00C15470BDC046A0010020FFFFFF8F36
:100AD000E000002060010020024B5B785BB2002B3D
:100AE000FADB7047000C0040024BDB68DA06FBD5EE
:100AF0007047C04600080040F8B52A4B1E225968CE
:100B00009143022211435960274B28491E1C9982A8
:100B1000998A0A439A82F3680227234C3B42FAD00F
:100B2000234D0123AB60FFF7D7FF224B6B60FFF72C
:100B3000D3FF8223DB016B80FFF7CEFFA38C8022E3
:100B40009343A384FFF7D0FF1B4BE362FFF7CCFF77
:100B5000A38C1A4A1343A384FFF7C6FFA38C1F4339
:100B6000A784F3681A06FCD50F4BDB685A06F8D544
:100B70000024FFF7B9FFAC60FFF7AEFF104B6B60CE
:100B8000FFF7AAFF0F4B104AC0215A600F4A09060F
:100B9000106A0002000A0143116207229C601A6079
:100BA000F8BDC04600400041000800400C060000AF
:100BB000000C004001050100B805FF7D040A00009B
:100BC0000007030010E000E0E703000000ED00E094
:100BD0000EBEFEE70DBEFEE705BEFEE702BEFEE767
:100BE0000E4A0F4838B5824204D10E4A0E4B93424A
:100BF0000ED10AE00D4C9442F7D00023D118884260
:100C0000F3D9E55804330D60F8E700F011F804E07B
:100C10009342FAD2002102C3FAE7FEE70000002067
:100C20005C000020B00300205C0000203C1F00009E
:100C300038B5344D2B6801331AD0334B2A1D1A6056
:100C4000EAB2002A14D1314B197801231940304BF4
:100C50000AD118682F4A904201D1196008E01A6041
:100C60002D4A013A002AFCD11A602C4B01221A703D
:100C7000FFF742FF62B6FFF727FD284B284C1B7891
:100C8000002B0AD02B6883F308881E4BFF22934366
:100C9000A3601D4B1B681B68184700F09DFD00F00A
:100CA0004FF8204B802252039A601F4B1F4A051CAD
:100CB0005A60216AC0220902090A12060A43226206
:100CC00000229A6007221A60AB68281C9847184BCC
:100CD000002801D001221A701A78002A05D00020BD
:100CE00000F08CFA00F004FBFCE71B78002BEBD142
:100CF00000F0E6FD0028E7D0012000F07FFA00F0C8
:100D0000F7FAFCE700200000200200203804004031
:100D1000FC7F00203581730748E801008000002037
:100D200000ED00E00044004110E000E0E7030000B7
:100D30008100002008B5FFF723FB00F0C3FA08BDCF
:100D400010B5054B054C2360FFF764FD201C21689E
:100D5000FFF752FD201C10BD00500041240200206E
:100D600070B5051CC0B0081C161C0C1C00F067FFF9
:100D700040006A4603230230537010707608012346
:100D8000E218013A11785A00002906D1281C694658
:100D90000023FFF7C3FD40B070BDB342F6DA6846EA
:100DA00081520133ECE70000F7B5BA4A04681378C2
:100DB000B949271CFF37051C102038720B70537877
:100DC000B648B74E037093783380D17833880902E0
:100DD0000B4333801179B34B19805179188809027C
:100DE000084318809079B0490880D27908881202A7
:100DF00002430A8040227A71A84F3A78A64F120225
:100E000038780F1C0243A9488446181C624500D15B
:100E1000C2E020DC802149008A4200D16EE109DC79
:100E2000812A00D192E0822A00D195E0802A00D068
:100E300064E18BE081235B009A4200D1CFE000DACD
:100E400058E1C0239B009A4200D157E1984B9A4247
:100E500000D14FE152E190231B019A4269D015DC89
:100E6000D023DB009A4222D088231B019A4269D00A
:100E7000A023DB009A4200D040E1201CFFF7DEFDFA
:100E80003188286889B2FFF7EDFD3BE1894B9A4232
:100E900000D12FE100DC31E1874B9A4200D11DE106
:100EA000864B9A4200D029E133886B7122E1338866
:100EB0001B0A012B08D10B8812222868934201D803
:100EC0000A8892B27E4911E133881B0A022B08D1AD
:100ED0000B8843222868934201D80A8892B2794944
:100EE00004E133881B0A032B00D007E13388DBB20F
:100EF000012B17D0002B07D0022B00D0FEE00A8870
:100F00002868D2B2704911E0042201A86F4900F0AC
:100F100085FE3B8804222868934201D83A8892B221
:100F200001A9E3E00A8828686949D2B2FFF718FFEF
:100F3000E8E03388201C2B71FFF780FD201CFFF7B1
:100F400097FDDFE0291C01C90122CFE061490023A0
:100F50000B8028680222CAE05E4900220A801888B5
:100F6000502210405C4A10701E880F2030401880BC
:100F70001888032800D9C1E012781B8808335B0168
:100F8000E418A379002A01D09B0600E0DB06DB0F02
:100F90000B8028680222A9E019887F2291434E4ADB
:100FA000C9B2117018880F210140198031880029B9
:100FB00000D0A3E01988002900D19FE019880329F7
:100FC00000D99BE012781B8808335B01E318002AE4
:100FD00002D020225A718DE0102159718AE00288D6
:100FE0007F239A433C4BD2B21A7001880F220A40E9
:100FF00002803288002A00D080E00288002A00D1D6
:101000007CE00288032A00D978E01B78002B1FD0EF
:10101000038808335B01E3189B799A066AD5038835
:10102000202208335B01E3181A71038808335B013F
:10103000E318DB795F065DD50388402208335B0146
:10104000E318DA710388022208335B01E3181EE01B
:10105000038808335B01E3189B79D9064AD50388D6
:10106000102208335B01E3181A71038808335B010F
:10107000E318DB799A063DD50388202208335B010B
:10108000E318DA710388012208335B01E3181A714F
:1010900030E0C046A000002083000020880000202F
:1010A0008A0000208C00002086000020020300003F
:1010B0000103000021200000A121000021220000E6
:1010C0008C1C000004000020741C0000641C000044
:1010D000681C000084000020820000200B88082289
:1010E0002868934201D80A8892B207490023FFF783
:1010F00015FC07E0201CFFF7A1FC03E0201C0121E8
:10110000FFF792FCF7BDC0464800002007B5054B2D
:101110000122019001A91868131CFFF7FFFB0120B1
:101120000EBDC0462402002013B5054B6C460734A3
:101130001868211C0122FFF739FC207816BDC04633
:101140002402002010B5074C201CFFF713FB031CE2
:101150000020834205D022684823FF33D05C01235E
:10116000184010BD2402002010B5054A0C1C031CB9
:10117000191C10680123221CFFF7D0FB201C10BD96
:101180002402002070B5084C061C201C0D1CFFF723
:10119000F1FA0023984205D02068311C2A1CFFF781
:1011A00005FC031C181C70BD24020020F8B50C4C73
:1011B000051C201C0E1CFFF7DDFA0023271C341C25
:1011C00098420AD0002C07D0291C221C3868FFF74F
:1011D000EDFB241A2D18F5E7331C181CF8BDC0468A
:1011E0002402002008B5031C081C111C9847024B60
:1011F00064221A8008BDC04692000020012805D153
:10120000054B064A1A60064B187004E0002802D10C
:10121000044A014B1A60704794020020C01C000071
:10122000940000200C1D000030B50A1C1C4985B03C
:101230000978031C00292AD0042A01D1006804E09F
:10124000022A01D1008800E00078520004A98B181E
:101250000B3B9C1AA3420BD00F210140092902D855
:101260003025294300E0373119700009013BF1E7CF
:1012700001A930230B7078234B700A208B189870CB
:101280000D20D870074B04321B68D86803E005496D
:101290000968C868191CFFF7A5FF05B030BDC04636
:1012A0008E0000209402002072B6EFF30883044AF7
:1012B0001360036883F30888436818477047C04683
:1012C00098020020084B1A88002A03D01A88013A95
:1012D00092B21A80054B1A88002A03D01A88013A64
:1012E00092B21A807047C046920000209000002001
:1012F000F0B591B008A9CC4A0B1C31CA31C351CA10
:1013000051C360CA60C3C94BC9489A687A25520361
:10131000520F92005258C74902609C68A4B26243BF
:101320000C60C54900240A60C44A1460C44C25708E
:10133000C44CC54D2368281C1B69402198470028D0
:1013400002D0C24B64221A80C14B00221860C14BEC
:101350001D60C14BC04DBE4F1A602A683B689A425F
:10136000E6D2BC4B1B681A78FF2A00D114E2232A6C
:1013700000D0EBE1B94E3378002B06D0B14BB84921
:101380001B680222D868FFF72DFFAD4B1B78532B4B
:101390003CD13B682A6893421ED9AE4801322A608C
:1013A0009A1AB04B01681B6801310160AE4E9A4237
:1013B00001D2326000E03360A048326800680490D7
:1013C00000F02CFC336829685A182A60A14A166874
:1013D000F1181160A54A13702B68013B2B609D4BDF
:1013E0001A68013A1A60A14B9E4A1B7811688B4219
:1013F0000AD222689148C91A006892699047002869
:1014000002D0924B64221A80C0468DE1522B0AD141
:101410008A48944A2368006811685B69039098477A
:101420006422934B0DE04F2B05D1844B8D4A1B68F2
:1014300012681A7078E1482B05D1804B894A1B68E5
:1014400012681A8070E1572B05D17C4B854A1B68C6
:1014500012681A6068E16F2B03D1784B012118687C
:1014600007E0682B08D1754B7E481B6802211B885A
:101470000360FFF7D9FE57E1772B06D16F4B794810
:101480001B6804211B680360F3E7472B13D1754BDE
:101490001868FFF709FF774B1B6883F3088862B66B
:1014A000754B1B78002B00D13EE1664B06201B6874
:1014B0001B68984738E1542B04D101233370614BEA
:1014C0001B6864E04E2B0CD13378002B06D15D4BAA
:1014D00063491B680222D868FFF784FE002333703B
:1014E00022E1562B57D123686449D8680122FFF7BF
:1014F00079FE23686249D8680322FFF773FE614DC5
:101500002368291CD8680122FFF76CFE23685E4916
:10151000D8680D22FFF766FE2368291CD8680122CF
:10152000FFF760FE4B4F4C4D5849002339602B604C
:101530003A1C281C13685E1C16601B780593002B50
:1015400003D0036801330360F4E73E4E2A68336832
:10155000D868FFF747FE33684A49D8680122FFF789
:1015600041FE059929604A4939603A4A1368581C76
:1015700010601B78002B04D0374B1A6801321A60B8
:10158000F3E733682A68D868FFF72CFE3368D86819
:1015900033490222C6E0334A582B17D1244E264D38
:1015A000366813682A68B10093420AD21F4D580862
:1015B000E861384828801D4D287DC607FBD55B189B
:1015C000F2E7204B34491B68D868AAE0592B79D13F
:1015D00012681A4B3149002A02D11B680B606CE07B
:1015E000124D086819686B68104E8025AB4392084D
:1015F0007360002A61D02A4B0C4D2B800B4E337D3B
:10160000DD07FBD500230A4D2D680195AD08AB42DF
:1016100003D3244D054E358046E09342F9D09D001A
:10162000465901334E51EEE7A01C00000040004136
:101630004C020020440200204002002090020020C2
:101640003C02002094020020500200209000002064
:101650003402002038020020480200208E000020C2
:10166000001D00009C020020A0020020300200208B
:10167000920000209802002094000020DC1C000052
:10168000051D0000DE1C0000281D0000E01C0000FD
:10169000EC1C000002A5FFFFF51C000098000020D4
:1016A00044A5FFFF04A5FFFF3F4E357DEE07FBD5A8
:1016B0009D0049194019D21A9BE73C4B3C491B68D5
:1016C000D8682EE05A2B2FD13A4B17681D68002698
:1016D000EF19BD4206D02878311C00F013F901350E
:1016E000061CF6E7314B34491B680122D868FFF726
:1016F00079FD07230F223240111C36093031092AA7
:1017000000DD07311820C0186A468154013BF1D230
:10171000236806A9D8680822FFF764FD23682749D3
:10172000D8680322FFF75EFD254B7A221A70254BFD
:1017300000221A60244B1B7893422DD01B4B234967
:101740001B680122D868FFF74DFD25E0111C3039D8
:10175000C8B21C4B092804D81D682A01114319601E
:101760001AE0111C4139052903D81E68373A3101A6
:1017700006E0111C6139052904D81868573A01019F
:101780000A4308E02C2A03D10A4A1968116001E0D3
:101790000B490A7000221A600D4B1A6801321A6058
:1017A0000C4B1A680132D5E500400041940200203C
:1017B000F91C000090020020FD1C0000FF1C00002E
:1017C0003C0200209C0200208E000020031D00002F
:1017D000480200203802002010B51C4B01201A7866
:1017E000032402431A701A4B0F221978914319707F
:1017F00019782143197017490C782043087019781B
:101800000A401A701A7830210A431A70124B80214C
:101810001A6A0A431A62114B114A5A805A7852B214
:10182000002AFBDBC4220F480F499203FEF756FF44
:101830000E4A002313700E4A13700E4A13700E4A9C
:1018400013700E4A13700E4A137010BDD644004137
:10185000BB440041D744004100040040000C00405C
:1018600019400000001C00422AF60000A4020020DB
:101870002B030020A5020020A80200202C0300203A
:101880002903002008B5C1B20248FEF755FF012028
:1018900008BDC046001C0042024B187E4007C00F26
:1018A0007047C046001C004208B5FFF7F5FF00284E
:1018B000FBD00248FEF746FF08BDC046001C0042B0
:1018C00008B5FFF7E9FF0023984205D0FFF7ECFFCA
:1018D000031C233B5A425341181C08BD70B5041C1D
:1018E0000D1C4618B44204D02078FFF7CBFF01341A
:1018F000F8E7281C70BD10B5041CFFF7D5FF207059
:10190000012010BD0B0A5840034B4000C05A090289
:10191000484080B27047C046361D0000F0B53E4ECC
:1019200085B0002203900C1C32703C4B914201D1D7
:10193000012201E03A490C801A707F231C4201D039
:1019400080349C43FFF7B0FF3378C0B2002B07D040
:1019500000253570FFF7A8FF3378C0B2AB4236D10F
:10196000432803D0712853D01528EBD101230093CD
:101970000120FFF787FF0098FFF784FF009980257B
:10198000C843C0B2FFF77EFF039B00270293244A9F
:101990001388002B1DD1214901930978002918D102
:1019A0000198FFF76FFF391C0198FFF7ABFF013D6E
:1019B000071C002DEBD1000AC0B2FFF763FFF8B29D
:1019C000FFF760FFFFF770FF3378002B0AD0357008
:1019D0001FE00299013B09781380029B01910133BA
:1019E0000293DDE7C0B2062807D1009B03990133BB
:1019F000DBB280310093803C0391002CB8D10420ED
:101A0000FFF740FFFFF750FF044B01251C7000E07B
:101A10000025281C05B0F0BD290300202A03002062
:101A2000A6020020F7B50024051C0F1C261CBC4292
:101A300020D0FFF739FF114BC0B21B780190002B6B
:101A40001AD1311CFFF75EFF0D4B061C1A88002AC5
:101A500004D10C4A11782A1C002907D001996A1C6C
:101A60002970802F02D11988013919800134A4B25C
:101A7000151CDCE7301C00E00120FEBD290300201E
:101A8000A60200202A030020F0B5384C87B00023BE
:101A900001902370994201D1012301E0344A118061
:101AA000344A642613704320FFF7ECFE324FFFF7F1
:101AB000F3FE002803D1002F03D0013FF7E7002FEA
:101AC00003D1013E002EEED14DE00125FFF7ECFEE3
:101AD0002378002B38D1C0B20290012805D0042809
:101AE0003DD10620FFF7CEFE39E005AE0221301CC5
:101AF000FFF798FF01988021FFF794FF2378039068
:101B0000002B18D1FFF7D0FE0702FFF7CDFEBFB2C2
:101B100023783F18BFB2012B0DD0039B9F4207D102
:101B20003378AB4204D1EB437278DBB29A4204D0F3
:101B30001820FFF7A7FE002303E00620FFF7A2FE10
:101B4000029B2278002A02D0002626700BE0012B8F
:101B500005D1019A6B1C8032DDB20192B6E7054ACD
:101B6000002313700126301C07B0F0BD29030020AC
:101B7000A60200202A03002000350C00002934D0E2
:101B80000123002210B488422CD301242407A1424F
:101B900004D2814202D209011B01F8E7E400A1420C
:101BA00004D2814202D249005B00F8E7884201D3A7
:101BB000401A1A434C08A04202D3001B5C0822437F
:101BC0008C08A04202D3001B9C082243CC08A042F0
:101BD00002D3001BDC082243002803D01B0901D0DC
:101BE0000909E3E7101C10BC7047002801D0002051
:101BF000C04307B4024802A14018029003BDC0468A
:101C0000190000000029F0D003B5FFF7B9FF0EBCA2
:101C10004243891A1847C0467047C04610B5002392
:101C2000934203D0CC5CC4540133F9E710BD031CCC
:101C30008218934202D019700133FAE770470023EB
:101C4000C25C0133002AFBD1581E7047F8B5C0466C
:101C5000F8BC08BC9E467047F8B5C046F8BC08BC46
:101C60009E4670470403090441726475696E6F20D3
:101C70004C4C430041726475696E6F204D4B52208D
:101C800057414E2031333130000000001201000274
:101C9000020000404123590000020102000100003F
:101CA00008000000100000002000000040000000BC
:101CB000800000000001000000020000000400009D
:101CC00085180000A918000099180000DD18000010
:101CD000F71800001D190000891A00007600200086
:101CE00041707220333020323031390031323A3491
:101CF000313A353700580A0D00590A0D005A0023B1
:101D00000A0D003E00322E30000000000D110000D0
:101D10002911000045110000691100008511000023
:101D200069110000AD1100005B41726475696E6F4E
:101D30003A58595A5D000000211042206330844017
:101D4000A550C660E770088129914AA16BB18CC18A
:101D5000ADD1CEE1EFF13112100273325222B55201
:101D60009442F772D662399318837BB35AA3BDD3DA
:101D70009CC3FFF3DEE36224433420040114E664D1
:101D8000C774A44485546AA54BB528850995EEE52A
:101D9000CFF5ACC58DD55336722611163006D776E1
:101DA000F6669556B4465BB77AA719973887DFF77A
:101DB000FEE79DD7BCC7C448E5588668A7784008A9
:101DC000611802282338CCC9EDD98EE9AFF94889CA
:101DD00069990AA92BB9F55AD44AB77A966A711A41
:101DE000500A333A122AFDDBDCCBBFFB9EEB799B1A
:101DF000588B3BBB1AABA66C877CE44CC55C222C91
:101E0000033C600C411CAEED8FFDECCDCDDD2AAD69
:101E10000BBD688D499D977EB66ED55EF44E133E20
:101E2000322E511E700E9FFFBEEFDDDFFCCF1BBFB9
:101E30003AAF599F788F8891A981CAB1EBA10CD193
:101E40002DC14EF16FE18010A100C230E32004509B
:101E5000254046706760B9839893FBA3DAB33DC30E
:101E60001CD37FE35EF3B1029012F322D2323542EB
:101E7000145277625672EAB5CBA5A89589856EF59E
:101E80004FE52CD50DC5E234C324A014810466743B
:101E9000476424540544DBA7FAB79987B8975FE7EE
:101EA0007EF71DC73CD7D326F2369106B01657668B
:101EB0007676154634564CD96DC90EF92FE9C89976
:101EC000E9898AB9ABA94458654806782768C018DB
:101ED000E1088238A3287DCB5CDB3FEB1EFBF98B4E
:101EE000D89BBBAB9ABB754A545A376A167AF10A2B
:101EF000D01AB32A923A2EFD0FED6CDD4DCDAABD5E
:101F00008BADE89DC98D267C076C645C454CA23C7A
:101F1000832CE01CC10C1FEF3EFF5DCF7CDF9BAF2D
:101F2000BABFD98FF89F176E367E554E745E932ECA
:0C1F3000B23ED10EF01E000000000000C8
:101F3C000114000009024300020100803209040070
:101F4C000001020200000524001001042402000517
:101F5C00240600010524010001070583030800FF86
:101F6C0009040100020A000000070581024000007C
:101F7C00070502024000000000C20100000008003A
:0C1F8C006900000041000000000000009F
:0400000300000BE10D
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:1000600000000000D01E000008B5084B002B03D094
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:10009000D01E00006000002058000020000000007A
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,338 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C2000576946692031303130000000120100024E
:101C300002000040412354000002010200010000A4
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004D617220313920323031380030393A34E8
:101C9000353A313400580A0D00590A0D005A002314
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D41E000038B5344D2B68013382
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000241C00000400002027
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020581C000098000020A41C000091
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000381C00000040004148020020400200207A
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020981C00009802002069
:101600009C0200202C020020920000209402002066
:1016100098000020741C00009D1C0000761C000037
:10162000C01C0000781C0000841C000002A5FFFF05
:101630008D1C00009400002044A5FFFF04A5FFFFBF
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:101740000040004190020020911C00008C0200200B
:10175000951C0000971C0000380200209802002011
:101760008E0000209B1C0000440200203402002058
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CE1C0000F7B50024051C0F1C261CBC42E2
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B5220576946692031303133
:101C20003000000012010002020000404123540075
:101C30000002010200010000080000001000000086
:101C400020000000400000008000000000010000B3
:101C500000020000000400001D18000041180000F0
:101C600031180000751800008F18000019190000C5
:101C7000211A00007600200041707220313120329C
:101C80003031390031333A30393A353600580A0D9F
:101C900000590A0D005A00230A0D003E00322E3072
:101CA00000000000A5100000C1100000DD100000C1
:101CB000011100001D11000001110000451100007C
:101CC0005B41726475696E6F3A58595A5D00000045
:101CD0002110422063308440A550C660E77008811F
:101CE00029914AA16BB18CC1ADD1CEE1EFF1311296
:101CF000100273325222B5529442F772D66239936F
:101D000018837BB35AA3BDD39CC3FFF3DEE36224E5
:101D1000433420040114E664C774A44485546AA5BE
:101D20004BB528850995EEE5CFF5ACC58DD5533675
:101D3000722611163006D776F6669556B4465BB70E
:101D40007AA719973887DFF7FEE79DD7BCC7C44845
:101D5000E5588668A7784008611802282338CCC95E
:101D6000EDD98EE9AFF9488969990AA92BB9F55AD5
:101D7000D44AB77A966A711A500A333A122AFDDBAE
:101D8000DCCBBFFB9EEB799B588B3BBB1AABA66CA5
:101D9000877CE44CC55C222C033C600C411CAEEDFE
:101DA0008FFDECCDCDDD2AAD0BBD688D499D977EB5
:101DB000B66ED55EF44E133E322E511E700E9FFF4E
:101DC000BEEFDDDFFCCF1BBF3AAF599F788F889104
:101DD000A981CAB1EBA10CD12DC14EF16FE18010E8
:101DE000A100C230E3200450254046706760B983EB
:101DF0009893FBA3DAB33DC31CD37FE35EF3B10238
:101E00009012F322D2323542145277625672EAB5FA
:101E1000CBA5A89589856EF54FE52CD50DC5E23487
:101E2000C324A01481046674476424540544DBA7CA
:101E3000FAB79987B8975FE77EF71DC73CD7D326D7
:101E4000F2369106B01657667676154634564CD95A
:101E50006DC90EF92FE9C899E9898AB9ABA9445827
:101E6000654806782768C018E1088238A3287DCB2A
:101E70005CDB3FEB1EFBF98BD89BBBAB9ABB754A77
:101E8000545A376A167AF10AD01AB32A923A2EFDBA
:101E90000FED6CDD4DCDAABD8BADE89DC98D267CC7
:101EA000076C645C454CA23C832CE01CC10C1FEF0A
:101EB0003EFF5DCF7CDF9BAFBABFD98FF89F176E17
:101EC000367E554E745E932EB23ED10EF01E00004B
:041ED000000000000E
:101ED40001140000090243000201008032090400D9
:101EE4000001020200000524001001042402000580
:101EF400240600010524010001070583030800FFEF
:101F040009040100020A00000007058102400000E4
:101F1400070502024000000000C2010000000800A2
:0C1F240069000000410000000000000007
:0400000300000B7975
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:1000600000000000A818000008B5084B002B03D0C2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:10009000A8180000600000205800002000000000A8
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B2197080201249400008601178B7
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,326 +78,326 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052001A601D4B1E4A041C5A60194AC02170
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E08844004110E000E0DE
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78032402431A701A4B0F2219781F
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7830210A431A7037
:10122000124B80211A6A0A431A62114B114A5A80E2
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:10126000D6440041BB440041D74400410004004043
:10127000000C004019400000001C00422AF600004B
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC046001C0042024B187EB1
:1012B0004007C00F7047C046001C004208B5FFF74A
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D000001C004208B5FFF7E9FF0023984205D043
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430041726475696E6F20C8
:1015F0004D4B525A65726F0012010002020000400A
:1016000041234F0000020102000100000800000019
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343692
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020AC18000038B5304B27
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B8022520002
:1006C0001A601F4B1F4A041C5A601B4AC021106A43
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E0884400417E
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A121000021220000FC15000004000020DC
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C02002030160000940000207C1600007A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001016000000400041440200203C02002035
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:10107000400200208800002070160000940200202A
:1010800098020020280200208C00002090020020FE
:10109000940000204C160000751600004E1600004B
:1010A00098160000501600005C16000002A5FFFF15
:1010B000651600009000002044A5FFFF04A5FFFF77
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200206916000088020020C7
:1011D0006D1600006F1600003402002094020020FB
:1011E000880000207316000040020020300200201A
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000A6160000F7B50024051C0F1C261CBC4295
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B525A65726F0012010002E6
:101600000200004041234F000002010200010000DF
:101610000800000010000000200000004000000052
:101620008000000000010000000200000004000033
:101630009D120000C1120000B1120000F51200005E
:101640000F13000099130000A11400007600200081
:1016500041707220313120323031390031333A302B
:10166000393A353300580A0D00590A0D005A002343
:101670000A0D003E00322E3000000000250B000055
:10168000410B00005D0B0000810B00009D0B000072
:10169000810B0000C50B00005B41726475696E6FC1
:1016A0003A58595A5D0000002110422063308440AE
:1016B000A550C660E770088129914AA16BB18CC121
:1016C000ADD1CEE1EFF13112100273325222B55298
:1016D0009442F772D662399318837BB35AA3BDD371
:1016E0009CC3FFF3DEE36224433420040114E66468
:1016F000C774A44485546AA54BB528850995EEE5C1
:10170000CFF5ACC58DD55336722611163006D77677
:10171000F6669556B4465BB77AA719973887DFF710
:10172000FEE79DD7BCC7C448E5588668A77840083F
:10173000611802282338CCC9EDD98EE9AFF9488960
:1017400069990AA92BB9F55AD44AB77A966A711AD7
:10175000500A333A122AFDDBDCCBBFFB9EEB799BB0
:10176000588B3BBB1AABA66C877CE44CC55C222C27
:10177000033C600C411CAEED8FFDECCDCDDD2AAD00
:101780000BBD688D499D977EB66ED55EF44E133EB7
:10179000322E511E700E9FFFBEEFDDDFFCCF1BBF50
:1017A0003AAF599F788F8891A981CAB1EBA10CD12A
:1017B0002DC14EF16FE18010A100C230E320045032
:1017C000254046706760B9839893FBA3DAB33DC3A5
:1017D0001CD37FE35EF3B1029012F322D232354282
:1017E000145277625672EAB5CBA5A89589856EF535
:1017F0004FE52CD50DC5E234C324A01481046674D2
:10180000476424540544DBA7FAB79987B8975FE784
:101810007EF71DC73CD7D326F2369106B016576621
:101820007676154634564CD96DC90EF92FE9C8990C
:10183000E9898AB9ABA94458654806782768C01871
:10184000E1088238A3287DCB5CDB3FEB1EFBF98BE4
:10185000D89BBBAB9ABB754A545A376A167AF10AC1
:10186000D01AB32A923A2EFD0FED6CDD4DCDAABDF4
:101870008BADE89DC98D267C076C645C454CA23C11
:10188000832CE01CC10C1FEF3EFF5DCF7CDF9BAFC4
:10189000BABFD98FF89F176E367E554E745E932E61
:0C18A000B23ED10EF01E0000000000005F
:1018AC000114000009024300020100803209040007
:1018BC0000010202000005240010010424020005AE
:1018CC00240600010524010001070583030800FF1D
:1018DC0009040100020A0000000705810240000013
:1018EC00070502024000000000C2010000000800D1
:0C18FC0069000000410000000000000036
:040000030000060DE6
:00000001FF

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -1592,4 +1592,3 @@
:106FC40000000000000000000000000000000000BD
:040000030000433581
:00000001FF

View file

@ -1593,4 +1593,3 @@
:106FCC0000000000000000000000000000000000B5
:040000030000433581
:00000001FF

View file

@ -0,0 +1,403 @@
:10000000FC7F002001060000F1050000F50500005E
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000F9050000D2
:100030000000000000000000FD0500004107000076
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A018000008B5084B002B03D0CA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A0180000600000205800002000000000B0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012498002C8611178B4
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B9202DA617047780000200100002072
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D4FA207970BDEA
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F040F938BD000400401C
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F0FFF801990F480835AE
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AAF80123EB550023337000E01C1CE7
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B5264B1E215A6802268A436F
:10053000244C32435A60A660FFF7E4FF224B234D60
:100540006360FFF7DFFFAE84FFF7E4FF204B1B681B
:100550009B0E3F2B00D11F231E4A9B0213431E4AB2
:100560000026EA62AB62AE84FFF7D4FF1B4B022782
:10057000AB84FFF7CFFFAB8C3B43AB84FFF7CAFFE5
:1005800063883F2293431F43678062888023DB0197
:1005900013436380A660FFF7B5FF114B6360FFF75D
:1005A000B1FF104B104AC0215A60104A0906106A68
:1005B0000002000A0143116207229E601A60F8BD22
:1005C00000400041000C004006000100000800400F
:1005D00024608000FF01000080BB0A1C240500008D
:1005E0000007030010E000E0E703000000ED00E07A
:1005F0000EBEFEE70DBEFEE705BEFEE702BEFEE74D
:100600000E4A0F4838B5824204D10E4A0E4B93422F
:100610000ED10AE00D4C9442F7D00023D118884245
:10062000F3D9E55804330D60F8E700F011F804E061
:100630009342FAD2002102C3FAE7FEE7000000204D
:100640005C000020A80300205C000020A41800002B
:1006500038B5304B1A681C1C013221D02E4A191DA6
:100660001160D9B200291BD12C4A10780122104008
:100670002B4A0AD115682B498D4201D110600FE039
:100680001160294901390029FCD11160226882F3E7
:100690000888FF229343254A93601E4B5B681847E6
:1006A000FFF740FF62B600F09DFD00F04FF8204BD1
:1006B000802292029A601F4B1F4A041C5A601B4AF8
:1006C000C021106A09060002000A014311620022DB
:1006D0009A6007221A60A368201C9847174B0028CD
:1006E00001D001221A701A78002A05D0002000F0EB
:1006F0008BFA00F003FBFCE71B78002BEBD100F03A
:10070000E5FD0028E7D0012000F07EFA00F0F6FABF
:10071000FCE7C0460020000018020020380400401A
:10072000FC7F00203581730748E8010000ED00E000
:100730000044004110E000E0E70300007B000020DF
:1007400008B5FFF7ADFC00F0C3FA08BD10B5054BC6
:10075000054C2360FFF774FD201C2168FFF762FD44
:10076000201C10BD005000411C02002070B5051C6B
:10077000C0B0081C161C0C1C00F017FF40006A4695
:10078000032302305370107076080123E218013AF7
:1007900011785A00002906D1281C69460023FFF76A
:1007A000D3FD40B070BDB342F6DA684681520133E2
:1007B000ECE70000F7B5BA4A04681378B949271C7A
:1007C000FF37051C102038720B705378B648B74EAF
:1007D000037093783380D178338809020B433380D8
:1007E0001179B34B19805179188809020843188090
:1007F0009079B0490880D2790888120202430A80B1
:1008000040227A71A84F3A78A64F120238780F1C0E
:100810000243A9488446181C624500D1C2E020DC8E
:10082000802149008A4200D16EE109DC812A00D191
:1008300092E0822A00D195E0802A00D064E18BE02A
:1008400081235B009A4200D1CFE000DA58E1C02357
:100850009B009A4200D157E1984B9A4200D14FE158
:1008600052E190231B019A4269D015DCD023DB00B2
:100870009A4222D088231B019A4269D0A023DB0030
:100880009A4200D040E1201CFFF7EEFD3188286835
:1008900089B2FFF7FDFD3BE1894B9A4200D12FE180
:1008A00000DC31E1874B9A4200D11DE1864B9A4230
:1008B00000D029E133886B7122E133881B0A012BB8
:1008C00008D10B8812222868934201D80A8892B274
:1008D0007E4911E133881B0A022B08D10B88432281
:1008E0002868934201D80A8892B2794904E1338892
:1008F0001B0A032B00D007E13388DBB2012B17D092
:10090000002B07D0022B00D0FEE00A882868D2B264
:10091000704911E0042201A86F4900F035FE3B88C0
:1009200004222868934201D83A8892B201A9E3E0F0
:100930000A8828686949D2B2FFF718FFE8E03388CF
:10094000201C2B71FFF790FD201CFFF7A7FDDFE0B7
:10095000291C01C90122CFE0614900230B802868CE
:100960000222CAE05E4900220A8018885022104004
:100970005C4A10701E880F203040188018880328A9
:1009800000D9C1E012781B8808335B01E418A37911
:10099000002A01D09B0600E0DB06DB0F0B802868F5
:1009A0000222A9E019887F2291434E4AC9B21170F0
:1009B00018880F21014019803188002900D0A3E058
:1009C0001988002900D19FE01988032900D99BE0EC
:1009D00012781B8808335B01E318002A02D020221A
:1009E0005A718DE0102159718AE002887F239A4361
:1009F0003C4BD2B21A7001880F220A400280328822
:100A0000002A00D080E00288002A00D17CE0028821
:100A1000032A00D978E01B78002B1FD00388083305
:100A20005B01E3189B799A066AD503882022083374
:100A30005B01E3181A71038808335B01E318DB7963
:100A40005F065DD50388402208335B01E318DA7145
:100A50000388022208335B01E3181EE00388083391
:100A60005B01E3189B79D9064AD503881022083325
:100A70005B01E3181A71038808335B01E318DB7923
:100A80009A063DD50388202208335B01E318DA710A
:100A90000388012208335B01E3181A7130E0C04675
:100AA000980000207D0000208200002084000020AB
:100AB00086000020800000200203000001030000E7
:100AC00021200000A121000021220000F4150000D7
:100AD00004000020E0150000D0150000D41500002F
:100AE0007E0000207C0000200B88082228689342AA
:100AF00001D80A8892B207490023FFF725FC07E0D6
:100B0000201CFFF7B1FC03E0201C0121FFF7A2FC31
:100B1000F7BDC0464800002007B5054B01220190F3
:100B200001A91868131CFFF70FFC01200EBDC04679
:100B30001C02002013B5054B6C4607341868211CB5
:100B40000122FFF749FC207816BDC0461C02002098
:100B500010B5074C201CFFF723FB031C0020834229
:100B600005D022684823FF33D05C0123184010BD14
:100B70001C02002010B5054A0C1C031C191C10682F
:100B80000123221CFFF7E0FB201C10BD1C020020EB
:100B900070B5084C061C201C0D1CFFF701FB002340
:100BA000984205D02068311C2A1CFFF715FC031C55
:100BB000181C70BD1C020020F8B50C4C051C201C34
:100BC0000E1CFFF7EDFA0023271C341C98420AD0B4
:100BD000002C07D0291C221C3868FFF7FDFB241AC3
:100BE0002D18F5E7331C181CF8BDC0461C02002068
:100BF00008B5031C081C111C9847024B64221A807C
:100C000008BDC0468C000020012805D1054B064ACE
:100C10001A60064B187004E0002802D1044A014B08
:100C20001A6070478C0200202816000094000020F3
:100C30007416000030B50A1C1C4985B00978031CE5
:100C400000292AD0042A01D1006804E0022A01D137
:100C5000008800E00078520004A98B180B3B9C1A16
:100C6000A3420BD00F210140092902D83025294386
:100C700000E0373119700009013BF1E701A9302389
:100C80000B7078234B700A208B1898700D20D87049
:100C9000074B04321B68D86803E005490968C86837
:100CA000191CFFF7A5FF05B030BDC0468800002025
:100CB0008C02002072B6EFF30883044A13600368C5
:100CC00083F30888436818477047C04690020020A5
:100CD000084B1A88002A03D01A88013A92B21A8067
:100CE000054B1A88002A03D01A88013A92B21A805A
:100CF0007047C0468C0000208A000020F0B591B0FB
:100D000008A9CC4A0B1C31CA31C351CA51C360CAAD
:100D100060C3C94BC9489A687A255203520F9200A2
:100D20005258C74902609C68A4B262430C60C5492E
:100D300000240A60C44A1460C44C2570C44CC54DDC
:100D40002368281C1B6940219847002802D0C24B09
:100D500064221A80C14B00221860C14B1D60C14B38
:100D6000C04DBE4F1A602A683B689A42E6D2BC4B1F
:100D70001B681A78FF2A00D114E2232A00D0EBE185
:100D8000B94E3378002B06D0B14BB8491B6802220C
:100D9000D868FFF72DFFAD4B1B78532B3CD13B6838
:100DA0002A6893421ED9AE4801322A609A1AB04B83
:100DB00001681B6801310160AE4E9A4201D2326077
:100DC00000E03360A04832680068049000F0DCFB6B
:100DD000336829685A182A60A14A1668F118116008
:100DE000A54A13702B68013B2B609D4B1A68013A92
:100DF0001A60A14B9E4A1B7811688B420AD2226866
:100E00009148C91A006892699047002802D0924B15
:100E100064221A80C0468DE1522B0AD18A48944A36
:100E20002368006811685B69039098476422934BBC
:100E30000DE04F2B05D1844B8D4A1B6812681A7048
:100E400078E1482B05D1804B894A1B6812681A80CB
:100E500070E1572B05D17C4B854A1B6812681A60DC
:100E600068E16F2B03D1784B0121186807E0682BEC
:100E700008D1754B7E481B6802211B880360FFF771
:100E8000D9FE57E1772B06D16F4B79481B680421B7
:100E90001B680360F3E7472B13D1754B1868FFF706
:100EA00009FF774B1B6883F3088862B6754B1B7884
:100EB000002B00D13EE1664B06201B681B6898475B
:100EC00038E1542B04D101233370614B1B6864E07B
:100ED0004E2B0CD13378002B06D15D4B63491B6838
:100EE0000222D868FFF784FE0023337022E1562BDC
:100EF00057D123686449D8680122FFF779FE236837
:100F00006249D8680322FFF773FE614D2368291CEC
:100F1000D8680122FFF76CFE23685E49D8680D226D
:100F2000FFF766FE2368291CD8680122FFF760FEE0
:100F30004B4F4C4D5849002339602B603A1C281CFC
:100F400013685E1C16601B780593002B03D00368A2
:100F500001330360F4E73E4E2A683368D868FFF730
:100F600047FE33684A49D8680122FFF741FE0599D8
:100F700029604A4939603A4A1368581C10601B7846
:100F8000002B04D0374B1A6801321A60F3E733683C
:100F90002A68D868FFF72CFE3368D86833490222E4
:100FA000C6E0334A582B17D1244E264D36681368B5
:100FB0002A68B10093420AD21F4D5808E8613848A8
:100FC00028801D4D287DC607FBD55B18F2E7204B16
:100FD00034491B68D868AAE0592B79D112681A4B9A
:100FE0003149002A02D11B680B606CE0124D086881
:100FF00019686B68104E8025AB4392087360002A15
:1010000061D02A4B0C4D2B800B4E337DDD07FBD579
:1010100000230A4D2D680195AD08AB4203D3244D42
:10102000054E358046E09342F9D09D004659013384
:101030004E51EEE708160000004000414402002037
:101040003C020020380200208802002034020020E8
:101050008C020020480200208A0000202C02002080
:1010600030020020400200208800002068160000A6
:101070009402002098020020280200208C0000200A
:101080009002002094000020441600006D1600001D
:101090004616000090160000481600005416000086
:1010A00002A5FFFF5D1600009000002044A5FFFF91
:1010B00004A5FFFF3F4E357DEE07FBD59D00491986
:1010C0004019D21A9BE73C4B3C491B68D8682EE07C
:1010D0005A2B2FD13A4B17681D680026EF19BD42D5
:1010E00006D02878311C00F013F90135061CF6E70C
:1010F000314B34491B680122D868FFF779FD07237B
:101100000F223240111C36093031092A00DD073127
:101110001820C0186A468154013BF1D2236806A901
:10112000D8680822FFF764FD23682749D86803229E
:10113000FFF75EFD254B7A221A70254B00221A60BC
:10114000244B1B7893422DD01B4B23491B68012253
:10115000D868FFF74DFD25E0111C3039C8B21C4B93
:10116000092804D81D682A01114319601AE0111CCE
:101170004139052903D81E68373A310106E0111CB0
:101180006139052904D81868573A01010A4308E073
:101190002C2A03D10A4A1968116001E00B490A7030
:1011A00000221A600D4B1A6801321A600C4B1A6843
:1011B0000132D5E5004000418C020020611600009C
:1011C0008802002065160000671600003402002027
:1011D00094020020880000206B16000040020020CE
:1011E0003002002010B51C4B01201A780324024362
:1011F0001A701A4B0F2219789143197019782143EC
:10120000197017490C782043087019780A401A7031
:101210001A7830210A431A70124B80211A6A0A4345
:101220001A62114B114A5A805A7852B2002AFBDBDB
:10123000C4220F480F499203FEF766FF0E4A0023AF
:1012400013700E4A13700E4A13700E4A13700E4A32
:1012500013700E4A137010BDD6440041BB440041C8
:10126000D744004100040040000C00401940000039
:10127000001C00422AF600009C02002023030020EC
:101280009D020020A0020020240300202103002052
:1012900008B5C1B20248FEF765FF012008BDC0468F
:1012A000001C0042024B187E4007C00F7047C0462A
:1012B000001C004208B5FFF7F5FF0028FBD00248EC
:1012C000FEF756FF08BDC046001C004208B5FFF7F8
:1012D000E9FF0023984205D0FFF7ECFF031C233BF6
:1012E0005A425341181C08BD70B5041C0D1C461809
:1012F000B44204D02078FFF7CBFF0134F8E7281C74
:1013000070BD10B5041CFFF7D5FF2070012010BD83
:101310000B0A5840034B4000C05A0902484080B2B3
:101320007047C0469E160000F7B50024051C0F1C30
:10133000261CBC4220D0FFF7BDFF114BC0B21B786A
:101340000190002B1AD1311CFFF7E2FF0D4B061C58
:101350001A88002A04D10C4A11782A1C002907D0C7
:1013600001996A1C2970802F02D1198801391980CE
:101370000134A4B2151CDCE7301C00E00120FEBDE6
:10138000210300209E02002022030020F0B53E4EE3
:1013900085B0002203900C1C32703C4B914201D16D
:1013A000012201E03A490C801A707F231C4201D0CF
:1013B00080349C43FFF77EFF3378C0B2002B07D008
:1013C00000253570FFF776FF3378C0B2AB4236D1D7
:1013D000432803D0712853D01528EBD10123009363
:1013E0000120FFF755FF0098FFF752FF0099802575
:1013F000C843C0B2FFF74CFF039B00270293244A67
:101400001388002B1DD1214901930978002918D197
:101410000198FFF73DFF391C0198FFF779FF013D67
:10142000071C002DEBD1000AC0B2FFF731FFF8B264
:10143000FFF72EFFFFF73EFF3378002B0AD0357001
:101440001FE00299013B09781380029B019101334F
:101450000293DDE7C0B2062807D1009B0399013350
:10146000DBB280310093803C0391002CB8D1042082
:10147000FFF70EFFFFF71EFF044B01251C7000E075
:101480000025281C05B0F0BD210300202203002008
:101490009E020020F0B5384C87B0002301902370E5
:1014A000994201D1012301E0344A1180344A642673
:1014B00013704320FFF7ECFE324FFFF7F3FE0028D6
:1014C00003D1002F03D0013FF7E7002F03D1013EE6
:1014D000002EEED14DE00125FFF7ECFE2378002B26
:1014E00038D1C0B20290012805D004283DD1062091
:1014F000FFF7CEFE39E005AE0221301CFFF714FFE6
:1015000001988021FFF710FF23780390002B18D15A
:10151000FFF7D0FE0702FFF7CDFEBFB223783F18DA
:10152000BFB2012B0DD0039B9F4207D13378AB4252
:1015300004D1EB437278DBB29A4204D01820FFF753
:10154000A7FE002303E00620FFF7A2FE029B2278FD
:10155000002A02D0002626700BE0012B05D1019A4B
:101560006B1C8032DDB20192B6E7054A002313708E
:101570000126301C07B0F0BD210300209E02002090
:101580002203002000350C0010B50023934203D045
:10159000CC5CC4540133F9E710BD031C821893429C
:1015A00002D019700133FAE770470023C25C01339F
:1015B000002AFBD1581E7047F8B5C046F8BC08BCDD
:1015C0009E467047F8B5C046F8BC08BC9E467047BA
:1015D0000403090441726475696E6F204C4C43002A
:1015E00041726475696E6F204E4F4E4120574C41D9
:1015F0004E0000001201000202000040412357008B
:1016000000020102000100000800000010000000BC
:1016100020000000400000008000000000010000E9
:10162000000200000004000091120000B51200004A
:10163000A5120000E9120000031300008D13000042
:10164000951400007600200041707220313920325C
:101650003031390031343A33383A343800580A0DD1
:1016600000590A0D005A00230A0D003E00322E30A8
:1016700000000000190B0000350B0000510B0000AA
:10168000750B0000910B0000750B0000B90B0000FA
:101690005B41726475696E6F3A58595A5D0000007B
:1016A0002110422063308440A550C660E770088155
:1016B00029914AA16BB18CC1ADD1CEE1EFF13112CC
:1016C000100273325222B5529442F772D6623993A5
:1016D00018837BB35AA3BDD39CC3FFF3DEE362241C
:1016E000433420040114E664C774A44485546AA5F5
:1016F0004BB528850995EEE5CFF5ACC58DD55336AC
:10170000722611163006D776F6669556B4465BB744
:101710007AA719973887DFF7FEE79DD7BCC7C4487B
:10172000E5588668A7784008611802282338CCC994
:10173000EDD98EE9AFF9488969990AA92BB9F55A0B
:10174000D44AB77A966A711A500A333A122AFDDBE4
:10175000DCCBBFFB9EEB799B588B3BBB1AABA66CDB
:10176000877CE44CC55C222C033C600C411CAEED34
:101770008FFDECCDCDDD2AAD0BBD688D499D977EEB
:10178000B66ED55EF44E133E322E511E700E9FFF84
:10179000BEEFDDDFFCCF1BBF3AAF599F788F88913A
:1017A000A981CAB1EBA10CD12DC14EF16FE180101E
:1017B000A100C230E3200450254046706760B98321
:1017C0009893FBA3DAB33DC31CD37FE35EF3B1026E
:1017D0009012F322D2323542145277625672EAB531
:1017E000CBA5A89589856EF54FE52CD50DC5E234BE
:1017F000C324A01481046674476424540544DBA701
:10180000FAB79987B8975FE77EF71DC73CD7D3260D
:10181000F2369106B01657667676154634564CD990
:101820006DC90EF92FE9C899E9898AB9ABA944585D
:10183000654806782768C018E1088238A3287DCB60
:101840005CDB3FEB1EFBF98BD89BBBAB9ABB754AAD
:10185000545A376A167AF10AD01AB32A923A2EFDF0
:101860000FED6CDD4DCDAABD8BADE89DC98D267CFD
:10187000076C645C454CA23C832CE01CC10C1FEF40
:101880003EFF5DCF7CDF9BAFBABFD98FF89F176E4D
:10189000367E554E745E932EB23ED10EF01E000081
:0418A0000000000044
:1018A400011400000902430002010080320904000F
:1018B40000010202000005240010010424020005B6
:1018C400240600010524010001070583030800FF25
:1018D40009040100020A000000070581024000001B
:1018E400070502024000000000C2010000000800D9
:0C18F4006900000041000000000000003E
:0400000300000601F2
:00000001FF

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,11 +218,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,11 +222,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,11 +226,7 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define LITTLE_ENDIAN 1
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -18,44 +18,34 @@
# -----------------------------------------------------------------------------
# Paths
ifeq ($(OS),Windows_NT)
# Are we using mingw/msys/msys2/cygwin?
ifeq ($(TERM),xterm)
# this is the path coming with night build
# T=$(shell cygpath -u $(LOCALAPPDATA))
# this is the path till 1.6.5 r5
T=$(shell cygpath -u $(APPDATA))
T=$(shell cygpath -u $(LOCALAPPDATA))
MODULE_PATH?=$(T)/Arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
else
# this is the path coming with night build
# MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
# this is the path till 1.6.5 r5
MODULE_PATH?=$(APPDATA)/Arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
RM=rm
SEP=\\
endif
else
UNAME_S := $(shell uname -s)
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
MODULE_PATH?=$(HOME)/.arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Linux)
MODULE_PATH?=$(HOME)/.arduino15/packages/arduino
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Darwin)
MODULE_PATH?=$(HOME)/Library/Arduino15/packages/arduino/
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Darwin)
MODULE_PATH?=$(HOME)/Library/Arduino15/packages/arduino/
RM=rm
SEP=/
endif
endif
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-
BUILD_PATH=build
# -----------------------------------------------------------------------------
@ -65,21 +55,28 @@ OBJCOPY=$(ARM_GCC_PATH)objcopy
NM=$(ARM_GCC_PATH)nm
SIZE=$(ARM_GCC_PATH)size
# -----------------------------------------------------------------------------
# Boards definitions
BOARD_ID?=arduino_zero
NAME?=samd21_sam_ba
# -----------------------------------------------------------------------------
# Compiler options
SAM_BA_INTERFACES?=SAM_BA_BOTH_INTERFACES
CFLAGS_EXTRA=-D__SAMD21G18A__ -DBOARD_ID_$(BOARD_ID) -D$(SAM_BA_INTERFACES)
CFLAGS=-mthumb -mcpu=cortex-m0plus -Wall -c -std=gnu99 -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500
ifdef DEBUG
CFLAGS+=-g3 -O1 -DDEBUG=1
CFLAGS+=-g3 -O1 -DDEBUG=1
else
CFLAGS+=-Os -DDEBUG=0
CFLAGS+=-Os -DDEBUG=0 -flto
endif
# Arduino Zero (PID == 0x004D)
CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x4D
# Genuino Zero (PID == 0x024D)
# CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x02 -DUSB_PID_LOW=0x4D
ELF=$(NAME).elf
BIN=$(NAME).bin
HEX=$(NAME).hex
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/Device/ATMEL/"
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.5.0/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS-Atmel/1.2.0/CMSIS/Device/ATMEL/"
# -----------------------------------------------------------------------------
# Linker options
@ -89,40 +86,39 @@ LDFLAGS+=-Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbol
# -----------------------------------------------------------------------------
# Source files and objects
SOURCES= \
board_driver_led.c \
board_driver_serial.c \
board_driver_usb.c \
board_init.c \
board_startup.c \
main.c \
sam_ba_usb.c \
sam_ba_cdc.c \
sam_ba_monitor.c \
sam_ba_serial.c
board_driver_i2c.c \
board_driver_led.c \
board_driver_pmic.c \
board_driver_jtag.c \
board_driver_serial.c \
board_driver_usb.c \
board_init.c \
board_startup.c \
main.c \
sam_ba_usb.c \
sam_ba_cdc.c \
sam_ba_monitor.c \
sam_ba_serial.c
OBJECTS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.o))
DEPS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.d))
NAME=samd21_sam_ba
ELF=$(NAME).elf
BIN=$(NAME).bin
HEX=$(NAME).hex
ifneq "test$(AVRSTUDIO_EXE_PATH)" "test"
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
else
AS_BUILD=
AS_CLEAN=
AS_BUILD=
AS_CLEAN=
endif
LD_SCRIPT=bootloader_samd21x18.ld
all: print_info $(SOURCES) $(BIN) $(HEX) $(AS_BUILD)
$(ELF): Makefile $(BUILD_PATH) $(OBJECTS)
@echo ----------------------------------------------------------
@echo Creating ELF binary
"$(CC)" -L. -L$(BUILD_PATH) $(LDFLAGS) -Os -Wl,--gc-sections -save-temps -Tbootloader_samd21x18.ld -Wl,-Map,"$(BUILD_PATH)/$(NAME).map" -o "$(BUILD_PATH)/$(ELF)" -Wl,--start-group $(OBJECTS) -lm -Wl,--end-group
"$(CC)" -L. -L$(BUILD_PATH) $(LDFLAGS) -Os -Wl,--gc-sections -save-temps -T$(LD_SCRIPT) -Wl,-Map,"$(BUILD_PATH)/$(NAME).map" -o "$(BUILD_PATH)/$(ELF)" -Wl,--start-group $(OBJECTS) -lm -Wl,--end-group
"$(NM)" "$(BUILD_PATH)/$(ELF)" >"$(BUILD_PATH)/$(NAME)_symbols.txt"
"$(SIZE)" --format=sysv -t -x $(BUILD_PATH)/$(ELF)

View file

@ -22,12 +22,8 @@
#if defined(BOARD_ID_arduino_zero)
#include "board_definitions_arduino_zero.h"
#elif defined(BOARD_ID_genuino_zero)
#include "board_definitions_genuino_zero.h"
#elif defined(BOARD_ID_arduino_mkr1000)
#include "board_definitions_arduino_mkr1000.h"
#elif defined(BOARD_ID_genuino_mkr1000)
#include "board_definitions_genuino_mkr1000.h"
#elif defined(BOARD_ID_arduino_mkrzero)
#include "board_definitions_arduino_mkrzero.h"
#elif defined(BOARD_ID_arduino_mkrfox1200)
@ -36,10 +32,16 @@
#include "board_definitions_arduino_mkrgsm1400.h"
#elif defined(BOARD_ID_arduino_mkrwan1300)
#include "board_definitions_arduino_mkrwan1300.h"
#elif defined(BOARD_ID_arduino_mkrwan1310)
#include "board_definitions_arduino_mkrwan1310.h"
#elif defined(BOARD_ID_arduino_mkrwifi1010)
#include "board_definitions_arduino_mkrwifi1010.h"
#elif defined(BOARD_ID_arduino_mkrvidor4000)
#include "board_definitions_arduino_mkrvidor4000.h"
#elif defined(BOARD_ID_arduino_mkrnb1500)
#include "board_definitions_arduino_mkrnb1500.h"
#elif defined(BOARD_ID_arduino_nano_33_iot)
#include "board_definitions_arduino_nano_33_iot.h"
#else
#error You must define a BOARD_ID and add the corresponding definitions in board_definitions.h
#endif

View file

@ -0,0 +1,98 @@
/*
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DEFINITIONS_H_
#define _BOARD_DEFINITIONS_H_
/*
* USB device definitions
*/
#define STRING_PRODUCT "Arduino MKR Vidor 4000"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x56
#define USB_CURRENT_MA 500
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
* quickly tapping two times on the reset button.
* BOOT_DOUBLE_TAP_ADDRESS must point to a free SRAM cell that must not
* be touched from the loaded application.
*/
#define BOOT_DOUBLE_TAP_ADDRESS (0x20007FFCul)
#define BOOT_DOUBLE_TAP_DATA (*((volatile uint32_t *) BOOT_DOUBLE_TAP_ADDRESS))
/*
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
/*
* LEDs definitions
*/
// PB08 (digital pin 32)
#define BOARD_LED_PORT (1)
#define BOARD_LED_PIN (8)
#define CONFIGURE_PMIC 1
#define PMIC_PIN_SCL 12
#define PMIC_PIN_SDA 11
#define PMIC_SERCOM SERCOM0
#define HAS_EZ6301QI 1
#define ENABLE_JTAG_LOAD 1
#define TDI 12
#define TDO 15
#define TCK 13
#define TMS 14
#define MB_INT 28
#define LAST_FLASH_PAGE (0x200000 - 0x1000)
#define SCRATCHPAD_FLASH_PAGE (0x200000 - 0x2000)
typedef struct __attribute__((packed)) {
uint32_t offset;
uint32_t length;
uint32_t sha256sum[8];
uint32_t type;
uint32_t force;
} externalFlashSignatures;
// No RX/TX led
//#define BOARD_LEDRX_PORT
//#define BOARD_LEDRX_PIN
//#define BOARD_LEDTX_PORT
//#define BOARD_LEDTX_PIN
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,6 +1,5 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -23,11 +22,11 @@
/*
* USB device definitions
*/
#define STRING_PRODUCT "Genuino Zero"
#define STRING_PRODUCT "Arduino MKR WAN 1310"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x02
#define USB_PID_LOW 0x4D
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x59
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -42,19 +41,18 @@
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM0
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
#define BOOT_USART_MODULE SERCOM5
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM5
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM5_CORE_Val
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3
#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3
#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2
#define BOOT_USART_PAD1 PINMUX_UNUSED
#define BOOT_USART_PAD0 PINMUX_UNUSED
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
@ -66,16 +64,23 @@
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
#define CONFIGURE_PMIC 1
#define PMIC_PIN_SCL 12
#define PMIC_PIN_SDA 11
#define PMIC_SERCOM SERCOM0
/*
* LEDs definitions
*/
// PA20 (digital pin 6)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LED_PIN (20)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
// No RX/TX led
//#define BOARD_LEDRX_PORT
//#define BOARD_LEDRX_PIN
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
//#define BOARD_LEDTX_PORT
//#define BOARD_LEDTX_PIN
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,6 +1,5 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -23,11 +22,11 @@
/*
* USB device definitions
*/
#define STRING_PRODUCT "Genuino MKR1000"
#define STRING_PRODUCT "Arduino NONA WLAN"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x02
#define USB_PID_LOW 0x4E
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x57
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -42,25 +41,25 @@
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM0
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
#define BOOT_USART_MODULE SERCOM5
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM5
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM5_CORE_Val
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3
#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3
#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2
#define BOOT_USART_PAD1 PINMUX_UNUSED
#define BOOT_USART_PAD0 PINMUX_UNUSED
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
#define CRYSTALLESS (1)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
@ -71,7 +70,7 @@
*/
// PA20 (digital pin 6)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (20)
#define BOARD_LED_PIN (17)
// No RX/TX led
//#define BOARD_LEDRX_PORT

View file

@ -246,14 +246,19 @@ static inline void prepareAckBitWIRE( void )
I2C_SERCOM->I2CM.CTRLB.bit.ACKACT = 0;
}
static inline void prepareCommandBitsWire(uint8_t cmd)
static inline int prepareCommandBitsWire(uint8_t cmd)
{
I2C_SERCOM->I2CM.CTRLB.bit.CMD = cmd;
int timeout = 50000;
while(I2C_SERCOM->I2CM.SYNCBUSY.bit.SYSOP)
{
if (timeout -- < 0) {
return -1;
}
// Waiting for synchronization
}
return 0;
}
static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFlag flag)
@ -261,9 +266,14 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
// 7-bits address + 1-bits R/W
address = (address << 0x1ul) | flag;
int timeout = 50000;
// Wait idle or owner bus mode
while ( !isBusIdleWIRE() && !isBusOwnerWIRE() );
while ( !isBusIdleWIRE() && !isBusOwnerWIRE() ) {
if (timeout -- < 0) {
return false;
}
}
// Send start and address
I2C_SERCOM->I2CM.ADDR.bit.ADDR = address;
@ -273,6 +283,9 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
{
while( !I2C_SERCOM->I2CM.INTFLAG.bit.MB )
{
if (timeout -- < 0) {
return false;
}
// Wait transmission complete
}
}
@ -280,6 +293,9 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
{
while( !I2C_SERCOM->I2CM.INTFLAG.bit.SB )
{
if (timeout -- < 0) {
return false;
}
// If the slave NACKS the address, the MB bit will be set.
// In that case, send a stop condition and return false.
if (I2C_SERCOM->I2CM.INTFLAG.bit.MB) {
@ -310,9 +326,14 @@ static inline bool sendDataMasterWIRE(uint8_t data)
//Send data
I2C_SERCOM->I2CM.DATA.bit.DATA = data;
int timeout = 50000;
//Wait transmission successful
while(!I2C_SERCOM->I2CM.INTFLAG.bit.MB) {
if (timeout -- < 0) {
return false;
}
// If a bus error occurs, the MB bit may never be set.
// Check the bus error bit and bail if it's set.
if (I2C_SERCOM->I2CM.STATUS.bit.BUSERR) {
@ -410,7 +431,7 @@ uint8_t i2c_endTransmission(bool stopBit)
txBufferLen--;
}
}
if (stopBit)
{
prepareCommandBitsWire(WIRE_MASTER_ACT_STOP);

View file

@ -0,0 +1,769 @@
#include "board_driver_jtag.h"
#include <string.h>
#ifdef ENABLE_JTAG_LOAD
/* JTAG State Machine */
const int JSM[16][2] = {
/*-State- -mode= '0'- -mode= '1'- */
/*RESET */ {JS_RUNIDLE, JS_RESET },
/*RUNIDLE */ {JS_RUNIDLE, JS_SELECT_DR},
/*SELECTIR */ {JS_CAPTURE_IR, JS_RESET },
/*CAPTURE_IR*/ {JS_SHIFT_IR, JS_EXIT1_IR },
/*SHIFT_IR */ {JS_SHIFT_IR, JS_EXIT1_IR },
/*EXIT1_IR */ {JS_PAUSE_IR, JS_UPDATE_IR},
/*PAUSE_IR */ {JS_PAUSE_IR, JS_EXIT2_IR },
/*EXIT2_IR */ {JS_SHIFT_IR, JS_UPDATE_IR},
/*UPDATE_IR */ {JS_RUNIDLE, JS_SELECT_DR},
/*SELECT_DR */ {JS_CAPTURE_DR, JS_SELECT_IR},
/*CAPTURE_DR*/ {JS_SHIFT_DR, JS_EXIT1_DR },
/*SHIFT_DR */ {JS_SHIFT_DR, JS_EXIT1_DR },
/*EXIT1_DR */ {JS_PAUSE_DR, JS_UPDATE_DR},
/*PAUSE_DR */ {JS_PAUSE_DR, JS_EXIT2_DR },
/*EXIT2_DR */ {JS_SHIFT_DR, JS_UPDATE_DR},
/*UPDATE_DR */ {JS_RUNIDLE, JS_SELECT_DR}
};
static struct states {
unsigned char state;
unsigned char nSlaves;
unsigned char slaveBits;
unsigned char virSize;
unsigned char id;
unsigned char lastVir;
} jtag;
void port_pin_set_output_level(int pin, int level) {
if (level) {
outpin_on(pin);
} else {
outpin_off(pin);
}
}
int port_pin_get_input_level(int pin) {
return inpin_get(pin);
}
/******************************************************************/
/* Name: DriveSignal */
/* */
/* Parameters: signal,data,clk,buffer_enable */
/* -the name of the signal (SIG_*). */
/* -the value to be dumped to the signal,'1' or '0' */
/* -driving a LOW to HIGH transition to SIG_TCK */
/* together with signal. */
/* -buffer_enable is used by WritePort function. */
/* -If "buffer_enable"=1, */
/* -processes in "port_io_buffer" are flushed when */
/* -"PORT_IO_BUFFER_SIZE" is reached. */
/* -If "buffer_enable"=0, */
/* -"data" is dumped to port 0 at once */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Dump data to signal. If clk is '1', a clock pulse*/
/* is driven after the data is dumped to signal. */
/* */
/******************************************************************/
static void DriveSignal(int signal, int data, int clk)
{
port_pin_set_output_level (signal, data);
if (clk)
{
port_pin_set_output_level (TCK, 1);
port_pin_set_output_level (TCK, 0);
}
}
/******************************************************************/
/* Name: ReadTDO */
/* */
/* Parameters: bit_count,data,inst */
/* -bit_count is the number of bits to shift out. */
/* -data is the value to shift in from lsb to msb. */
/* -inst determines if the data is an instruction. */
/* if inst=1,the number of bits shifted in/out */
/* equals to bit_count-1;if not,the number of bits */
/* does not change. */
/* */
/* Return Value: The data shifted out from TDO. The first bit */
/* shifted out is placed at the lsb of the returned */
/* integer. */
/* */
/* Descriptions: Shift out bit_count bits from TDO while shift in */
/* data to TDI. During instruction loading, the */
/* number of shifting equals to the instruction */
/* length minus 1 */
/* */
/******************************************************************/
static int ReadTDO(int bit_count, int data, int inst)
{
unsigned int record = 0;
unsigned int i;
for (i = 0; i < bit_count; i++)
{
record = record | (port_pin_get_input_level(TDO) << i);
DriveSignal(
TDI,
data & 1,
!(i == (bit_count - 1) && inst)
);
data >>= 1;
}
return record;
} /*
int ReadTDO(int bit_count,int data,int inst)
{
unsigned int tdi=0,tdo=0,record=0;
unsigned int i;
for(i=0;i<bit_count;i++)
{
unsigned int mask=1;
tdo=port_pin_get_input_level (PIN_TDO);
tdo = tdo? (1<<i):0;
record = record | tdo;
mask = mask << i;
tdi = data & mask;
tdi = tdi >> i;
if (i==(bit_count-1) && inst)
DriveSignal(PIN_TDI,tdi,0);
else
DriveSignal(PIN_TDI,tdi,1);
}
return record;
}
*/
/******************************************************************/
/* Name: ReadTDO */
/* */
/* Parameters: bit_count,data,inst */
/* -bit_count is the number of bits to shift out. */
/* -data is the value to shift in from lsb to msb. */
/* -inst determines if the data is an instruction. */
/* if inst=1,the number of bits shifted in/out */
/* equals to bit_count-1;if not,the number of bits */
/* does not change. */
/* */
/* Return Value: The data shifted out from TDO. The first bit */
/* shifted out is placed at the lsb of the returned */
/* integer. */
/* */
/* Descriptions: Shift out bit_count bits from TDO while shift in */
/* data to TDI. During instruction loading, the */
/* number of shifting equals to the instruction */
/* length minus 1 */
/* */
/******************************************************************/
static void ReadTDOBuf(int bit_count, char *txbuf, char *rxbuf, int inst)
{
unsigned int tdi = 0, tdo = 0, record = 0;
unsigned int i;
unsigned int charbit = 0;
unsigned char indata, outdata;
indata = 0;
for (i = 0; i < bit_count; i++)
{
unsigned int mask = 1;
if (charbit == 0)
if (txbuf)
outdata = *txbuf++;
else
outdata = -1;
indata = (indata >> 1) | (port_pin_get_input_level (TDO) << 7);
DriveSignal( TDI,
outdata & 1,
!(i == (bit_count - 1) && inst)
);
outdata = outdata >> 1;
charbit = (charbit + 1) & 7;
if (charbit == 0 && rxbuf)
{
*rxbuf++ = indata;
indata = 0;
}
}
}
/******************************************************************/
/* Name: AdvanceJSM */
/* */
/* Parameters: mode */
/* -the input mode to JSM. */
/* */
/* Return Value: The current JSM state. */
/* */
/* Descriptions: Function that keep track of the JSM state. It */
/* drives out signals to TMS associated with a */
/* clock pulse at TCK and updates the current state */
/* variable. */
/* */
/******************************************************************/
static int AdvanceJSM(int mode)
{
DriveSignal(TMS, mode, 1);
jtag.state = JSM[jtag.state][mode];
return (jtag.state);
}
/******************************************************************/
/* Name: Js_Updatedr */
/* */
/* Parameters: None. */
/* */
/* Return Value: 1 if the current state is not SHIFT_DR;0 if the */
/* operation is successful. */
/* */
/* Descriptions: Move the JSM to UPDATE_DR. The current state is */
/* expected to be SHIFT_DR */
/* */
/******************************************************************/
static int Js_Updatedr()
{
/* The current JSM state must be in UPDATE_IR or UPDATE_DR */
if (jtag.state != JS_SHIFT_DR)
return (1);
AdvanceJSM(1);
AdvanceJSM(1);
return (0);
}
/******************************************************************/
/* Name: Js_Shiftdr */
/* */
/* Parameters: None. */
/* */
/* Return Value: 1 if the current state is not UPDATE_DR or */
/* UPDATE_IR. 0 if the opeation is successful. */
/* */
/* Descriptions: Move the JSM to SHIFT_DR. The current state is */
/* expected to be UPDATE_DR or UPDATE_IR. */
/* */
/******************************************************************/
static int Js_Shiftdr()
{
/* The current JSM state must be in UPDATE_IR or UPDATE_DR */
if (jtag.state != JS_UPDATE_DR && jtag.state != JS_UPDATE_IR)
{
if (jtag.state != JS_RESET && jtag.state != JS_RUNIDLE)
return (1);
else
{
AdvanceJSM(0);
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
return (0);
}
}
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
return (0);
}
/******************************************************************/
/* Name: Js_Reset */
/* */
/* Parameters: None. */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Reset the JSM by issuing JSM_RESET_COUNT of clock*/
/* with the TMS at HIGH. */
/* */
/******************************************************************/
static void Js_Reset()
{
int i;
for (i = 0; i < JSM_RESET_COUNT; i++)
AdvanceJSM(1);
}
/******************************************************************/
/* Name: Runidle */
/* */
/* Parameters: None. */
/* */
/* Return Value: None. */
/* */
/* Descriptions: If the current JSM is not at UPDATE_DR or */
/* UPDATE_IR state, RESET JSM and move to RUNIDLE, */
/* if it is, clock once with TMS LOW and move to */
/* RUNIDLE. */
/* */
/******************************************************************/
static void Js_Runidle()
{
int i = 0;
/* If the current state is not UPDATE_DR or UPDATE_IR, reset the JSM and move to RUN/IDLE */
if (jtag.state != JS_UPDATE_IR && jtag.state != JS_UPDATE_DR)
{
for (i = 0; i < JSM_RESET_COUNT; i++)
AdvanceJSM(1);
}
AdvanceJSM(0);
}
/******************************************************************/
/* Name: LoadJI */
/* */
/* Parameters: action,dev_count,ji_info */
/* -action is the JTAG instruction to load */
/* -dev_count is the maximum number of devices in */
/* chain. */
/* -ji_info is the pointer to an integer array that */
/* contains the JTAG instruction length for the */
/* devices in chain. */
/* */
/* Return Value: 1 if contains error;0 if not. */
/* */
/* Descriptions: Move the JSM to SHIFT_IR. Load in the JTAG */
/* instruction to all devices in chain. Then */
/* advance the JSM to UPDATE_IR. Irrespective of */
/* */
/******************************************************************/
static int LoadJI(int action)
{
int i, record = 0, error = 0;
/* Move Jtag State Machine (JSM) to RUN/IDLE */
if (jtag.state != JS_RUNIDLE && jtag.state != JS_RESET)
Js_Runidle();
/* Move JSM to SHIFT_IR */
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
record = ReadTDO(INST_LEN, action, 1);
if (record != 0x155)
{
error = -1;
// fprintf(stderr,"Error: JTAG chain broken!\nError: Bits unloaded: 0x%X\n", record);
return error;
}
/* Move JSM to UPDATE_IR */
AdvanceJSM(1);
AdvanceJSM(1);
return error;
}
/******************************************************************/
/* Name: SetupChain */
/* */
/* Parameters: dev_count,dev_seq,ji_info,action */
/* -device_count is the total device in chain */
/* -dev_seq is the device sequence in chain */
/* -ji_info is the pointer to an integer array that */
/* contains the JTAG instruction length for the */
/* devices in chain. */
/* -action is the JTAG instruction to load */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Move the JSM to SHIFT_IR. Issue the JTAG */
/* instruction, "action" to the target device and */
/* BYPASS to the rest of the devices. Then, move */
/* the JSM to UPDATE_IR. */
/* */
/******************************************************************/
static void SetupChain(int action)
{
int i, record = 0;
/* Move Jtag State Machine (JSM) to RUN/IDLE */
if (jtag.state != JS_RUNIDLE && jtag.state != JS_RESET)
Js_Runidle();
/* Move JSM to SHIFT_IR */
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
record = ReadTDO(INST_LEN, action, 1);
/* Move JSM to UPDATE_IR */
AdvanceJSM(1);
AdvanceJSM(1);
}
/******************************************************************/
/* Name: CheckStatus */
/* */
/* Parameters: dev_seq */
/* -dev_seq is the device sequence in chains. */
/* */
/* Return Value: '0' if CONF_DONE is HIGH;'1' if it is LOW. */
/* */
/* Descriptions: Issue CHECK_STATUS instruction to the device to */
/* be configured and BYPASS for the rest of the */
/* devices. */
/* */
/* <conf_done_bit> = */
/* ((<Maximum JTAG sequence> - */
/* <JTAG sequence for CONF_DONE pin>)*3) + 1 */
/* */
/* The formula calculates the number of bits */
/* to be shifted out from the device, excluding the */
/* 1-bit register for each device in BYPASS mode. */
/* */
/******************************************************************/
int CheckStatus()
{
int bit,data=0,error=0;
int jseq_max=0,jseq_conf_done=0,conf_done_bit=0;
// fprintf( stdout, "Info: Checking Status\n" );
/* Load CHECK_STATUS instruction */
SetupChain(JI_CHECK_STATUS);
Js_Shiftdr();
/* Maximum JTAG sequence of the device in chain */
jseq_max= JSEQ_MAX;
jseq_conf_done= JSEQ_CONF_DONE;
conf_done_bit = ((jseq_max-jseq_conf_done)*3)+1;
/* Compensate for 1 bit unloaded from every Bypass register */
conf_done_bit+= 0;
for(bit=0;bit<conf_done_bit;bit++)
{
DriveSignal(TDI,0,1);
}
data = ReadTDO(1,0,0);
if(!data)
{
error++;
}
/* Move JSM to RUNIDLE */
Js_Updatedr();
Js_Runidle();
return (error);
}
static int jtagVIR(int instruction)
{
int ret = 0;
if (jtag.lastVir != instruction) {
int code = ((jtag.id + 1) << jtag.virSize) | instruction;
ret = LoadJI(JI_USER1_VIR); // Ji_Active_Disengage(device_count,ji_info);
if (ret < 0) {
return ret;
}
Js_Shiftdr();
ReadTDO(jtag.virSize + jtag.slaveBits, code, 1);
Js_Updatedr();
jtag.lastVir = instruction;
}
return ret;
}
int jtagInit(void)
{
int i, j;
unsigned int record;
inpin_init(TDO);
outpin_init(TMS);
outpin_init(TDI);
outpin_init(TCK);
mbPinSet();
port_pin_set_output_level (TMS, 1);
port_pin_set_output_level (TDI, 1);
port_pin_set_output_level (TCK, 0);
Js_Runidle();
if (CheckStatus()==0)
{
LoadJI(JI_USER1_VIR);
Js_Shiftdr();
ReadTDO(64, 0, 0);
Js_Updatedr();
LoadJI(JI_USER0_VDR); // Ji_Active_Disengage(device_count,ji_info);
record = 0;
for (i = 0; i < 8; i++)
{
Js_Shiftdr();
record = (record >> 4) | (ReadTDO(4, 0x0, 0) << 28);
Js_Updatedr();
Js_Runidle();
}
jtag.id = -1;
jtag.lastVir = -1;
if (((record >> 8) & 0x7ff) == JTAG_VENDOR_ID)
{
jtag.nSlaves = (record >> 19) & 0xff; // number of jtag slaves
for (jtag.slaveBits = 0; (1 << jtag.slaveBits) < (jtag.nSlaves + 1); jtag.slaveBits++);
jtag.virSize = record & 0xff;
for (j = 0; j < jtag.nSlaves; j++)
{
record = 0;
for (i = 0; i < 8; i++)
{
Js_Shiftdr();
record = (record >> 4) | (ReadTDO(4, 0x0, 0) << 28);
Js_Updatedr();
Js_Runidle();
}
if (((record >> 19) & 0xff) == JTAG_ID_VJTAG && ((record >> 8) & 0x7ff) == JTAG_VENDOR_ID)
{
jtag.id = j;
return 0;
}
}
}
}
return -1;
}
void jtagDeinit(void)
{
jtag.id = -1;
}
int jtagReload() {
int ret = LoadJI(JI_PULSE_NCONFIG);
Js_Shiftdr();
return ret;
}
int jtagWriteBuffer(unsigned int address, const uint8_t *data, size_t len)
{
int ret = 0;
ret = jtagVIR(JBC_WRITE);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
address = (address << 2) | 0x00000003;
ReadTDOBuf(32, &address, 0, 0);
ReadTDOBuf(32 * len+2, data, 0, 0);
return len;
}
int jtagReadBuffer(unsigned int address, uint8_t *data, size_t len)
{
int ret = 0;
ret = jtagVIR(JBC_WRITE);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
address = (address << 2) | 0x00000003;
ReadTDOBuf(32, &address, 0, 0);
if (len > 1)
{
address = len - 1;
ReadTDOBuf(4, &address, 0, 1);
}
ret = jtagVIR(JBC_READ);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
for (; len > 0; len--)
{
//*data++=ReadTDO(32,*data,0);
ReadTDOBuf(32, 0, data, 0);
data += 4;
}
return len;
}
#define MB_BASE 0x00000000
#define MB_TIMEOUT 5000
/**
*/
int mbPinSet(void)
{
#ifdef MB_INT
uint32_t rpc[1];
rpc[0] = 0;
jtagWriteBuffer(MB_BASE, (const uint8_t *)rpc, 1);
outpin_init(MB_INT);
outpin_off(MB_INT);
#endif
}
/**
* Sends len words (32 bit) via messagebox
*/
int mbCmdSend(uint32_t* data, int len)
{
int ret;
#ifdef MB_INT
ret = jtagWriteBuffer(MB_BASE, (const uint8_t *)data, len);
if (ret!=len) {
return -10;
}
outpin_on(MB_INT);
outpin_off(MB_INT);
#else
jtagWriteBuffer(MB_BASE + 1, (const uint8_t *)(&data[1]), len-1);
jtagWriteBuffer(MB_BASE, (const uint8_t *)data, 1);
#endif
int retries = 1000;
do {
if (retries-- < 0) {
return -1;
}
jtagReadBuffer(MB_BASE, (uint8_t*)&ret, 1);
} while (ret);
jtagReadBuffer(MB_BASE + 1, (uint8_t*)&ret, 1);
return ret;
}
/**
* Writes len words (32 bit) via messagebox at a specified address
*/
int mbWrite(uint32_t address, void* data, int len)
{
jtagWriteBuffer(MB_BASE + address, (const uint8_t *)data, len);
return 0;
}
/**
* Reads len words (32 bit) using messagebox from a specified address
*/
int mbRead(uint32_t address, void* data, int len)
{
uint32_t *p = (uint32_t*)data;
int i;
for (i=0; i<len; i++) {
jtagReadBuffer(MB_BASE + address + i, (uint8_t*)&p[i], 1);
}
return 0;
}
#define MB_DEV_FLASH 0x01000000
uint32_t jtagBitstreamVersion()
{
uint32_t ptr[1];
uint32_t ver;
ptr[0] = 0 | 1;
ver = mbCmdSend(ptr, 1);
return ver;
}
void jtagFlashEraseBlock(uint32_t offset)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x03;
rpc[1] = 2;
rpc[2] = offset;
mbCmdSend(rpc, 3);
}
void jtagFlashWriteBlock(uint32_t offset, size_t len, uint32_t* data)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x04;
rpc[1] = offset;
rpc[2] = len;
memcpy(&rpc[3], data, len);
mbCmdSend(rpc, 3+((len + 3)/4));
}
void jtagFlashReadBlock(uint32_t offset, size_t len, uint8_t* buf)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x05;
rpc[1] = offset;
rpc[2] = len;
mbCmdSend(rpc, 3);
mbRead(2, &rpc[2], (len + 3) / 4 + 1);
uint8_t* newbuf = (uint8_t*)&rpc[3];
for (int i = 0; i < len; i++) {
//buf[i] = reverse(newbuf[i]);
buf[i] = newbuf[i];
}
}
void clockout(uint32_t gclk, int32_t divisor)
{
GCLK_GENDIV_Type gendiv =
{
.bit.DIV = divisor, // divider, linear or 2^(.DIV+1)
.bit.ID = gclk, // GCLK_GENERATOR_X
};
GCLK->GENDIV.reg = gendiv.reg;
// setup Clock Generator
GCLK_GENCTRL_Type genctrl =
{
.bit.RUNSTDBY = 0, // Run in Standby
.bit.DIVSEL = 0, // .DIV (above) Selection: 0=linear 1=powers of 2
.bit.OE = 1, // Output Enable to observe on a port pin
.bit.OOV = 0, // Output Off Value
.bit.IDC = 1, // Improve Duty Cycle
.bit.GENEN = 1, // enable this GCLK
// select GCLK source
//.bit.SRC = GCLK_SOURCE_OSC8M,
.bit.SRC = GCLK_SOURCE_DFLL48M,
// select GCLK2 to output on
.bit.ID = gclk, // GCLK_GENERATOR_X
};
GCLK->GENCTRL.reg = genctrl.reg;
}
#endif

View file

@ -0,0 +1,92 @@
#include <sam.h>
#include "board_definitions.h"
#include <stddef.h>
#ifndef __JTAG_H__
#define __JTAG_H__
/* States of JTAG State Machine */
#define JS_RESET 0
#define JS_RUNIDLE 1
#define JS_SELECT_IR 2
#define JS_CAPTURE_IR 3
#define JS_SHIFT_IR 4
#define JS_EXIT1_IR 5
#define JS_PAUSE_IR 6
#define JS_EXIT2_IR 7
#define JS_UPDATE_IR 8
#define JS_SELECT_DR 9
#define JS_CAPTURE_DR 10
#define JS_SHIFT_DR 11
#define JS_EXIT1_DR 12
#define JS_PAUSE_DR 13
#define JS_EXIT2_DR 14
#define JS_UPDATE_DR 15
#define JS_UNDEFINE 16
#define JSM_RESET_COUNT 5
#define JTAG_VENDOR_ID 0x6E
#define JTAG_ID_VJTAG 0x84
/* JTAG Instructions */
#define JI_EXTEST 0x000
#define JI_PROGRAM 0x002
#define JI_STARTUP 0x003
#define JI_CHECK_STATUS 0x004
#define JI_SAMPLE 0x005
#define JI_IDCODE 0x006
#define JI_USERCODE 0x007
#define JI_BYPASS 0x3FF
#define JI_PULSE_NCONFIG 0x001
#define JI_CONFIG_IO 0x00D
#define JI_HIGHZ 0x00B
#define JI_CLAMP 0x00A
#define JI_ACTIVE_DISENGAGE 0x2D0
#define JI_FACTORY 0x281
#define JI_USER0_VDR 0x00C
#define JI_USER1_VIR 0x00E
#define JBC_WRITE 0
#define JBC_READ 1
#define MAX_JTAG_INIT_CLOCK 3192
#define CDF_IDCODE_LEN 32
#define IDCODE 0x20F20DD
#define JSEQ_MAX 360
#define JSEQ_CONF_DONE 224
#define INST_LEN 10
#define INIT_COUNT 200
inline void outpin_init(int pin) { PORT->Group[0].DIRSET.reg = (1<<pin); }
inline void outpin_on(int pin) { PORT->Group[0].OUTSET.reg = (1<<pin); }
inline void outpin_off(int pin) { PORT->Group[0].OUTCLR.reg = (1<<pin); }
inline void outpin_toggle(int pin) { PORT->Group[0].OUTTGL.reg = (1<<pin); }
inline void inpin_init(int pin) {
PORT->Group[0].PINCFG[pin].reg=(uint8_t)(PORT_PINCFG_INEN);
PORT->Group[0].DIRCLR.reg = (1<<pin);
}
inline int inpin_get(int pin) { return ((PORT->Group[0].IN.reg & (1<<pin)) != 0); }
#ifdef __cplusplus
extern "C" {
#endif
int jtagInit(void);
int jtagReload(void);
int jtagWriteBuffer(unsigned int address, const uint8_t* data, size_t len);
int jtagReadBuffer(unsigned int address, uint8_t* data, size_t len);
void jtagDeinit(void);
uint32_t jtagBitstreamVersion();
void jtagFlashEraseBlock(uint32_t offset);
void jtagFlashWriteBlock(uint32_t offset, size_t len, uint32_t* data);
void jtagFlashReadBlock(uint32_t offset, size_t len, uint8_t* buf);
void clockout(uint32_t gclk, int32_t divisor);
#ifdef __cplusplus
}
#endif
#endif //__JTAG_H__

View file

@ -27,7 +27,10 @@ extern uint8_t rxBuffer[1];
uint8_t readRegister(uint8_t reg) {
i2c_beginTransmission(PMIC_ADDRESS);
i2c_write(reg);
i2c_endTransmission(true);
int ret = i2c_endTransmission(true);
if (ret != 0) {
return 0;
}
i2c_requestFrom(PMIC_ADDRESS, 1, true);
return rxBuffer[0];
@ -44,8 +47,11 @@ uint8_t writeRegister(uint8_t reg, uint8_t data) {
bool disableWatchdog(void) {
uint8_t DATA = readRegister(CHARGE_TIMER_CONTROL_REGISTER);
if (DATA == 0) {
return false;
}
writeRegister(CHARGE_TIMER_CONTROL_REGISTER, (DATA & 0b11001110));
return 1;
return true;
}
bool setInputVoltageLimit(uint16_t voltage) {
@ -217,22 +223,26 @@ bool disableCharge()
return 1;
}
void apply_pmic_newdefaults()
int apply_pmic_newdefaults()
{
disableWatchdog();
if (!disableWatchdog()) {
return -1;
}
//disableDPDM();
disableCharge();
setInputVoltageLimit(4360); // default
setInputCurrentLimit(2000); // 2A
setInputCurrentLimit(3000); // 2A
setChargeCurrent(0,0,0,0,0,0); // 512mA
setChargeVoltage(4112); // 4.112V termination voltage
i2c_end();
return 0;
}
void configure_pmic()
int configure_pmic()
{
i2c_init(100000);
apply_pmic_newdefaults();
return apply_pmic_newdefaults();
}
#endif

View file

@ -40,6 +40,6 @@
#define FAULT_REGISTER 0x09
#define PMIC_VERSION_REGISTER 0x0A
void configure_pmic();
int configure_pmic();
#endif // _BOARD_DRIVER_PMIC_

View file

@ -18,6 +18,9 @@
*/
#include "board_driver_serial.h"
#include "board_definitions.h"
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
bool uart_drv_error_flag = false;
@ -102,3 +105,5 @@ void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
*ptr++ = (uint8_t)sercom->USART.DATA.reg;
} while (length--);
}
#endif

View file

@ -22,6 +22,8 @@
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
#define NVM_USB_PAD_TRANSN_POS (45)
#define NVM_USB_PAD_TRANSN_SIZE (5)
#define NVM_USB_PAD_TRANSP_POS (50)
@ -365,3 +367,5 @@ void USB_Configure(Usb *pUsb)
usb_endpoint_table[USB_EP_COMM].DeviceDescBank[1].PCKSIZE.bit.SIZE = 0;
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
}
#endif

View file

@ -18,193 +18,130 @@
*/
#include <sam.h>
#include <stdbool.h>
#include "board_definitions.h"
/**
* \brief system_init() configures the needed clocks and according Flash Read Wait States.
* At reset:
* - OSC8M clock source is enabled with a divider by 8 (1MHz).
* - Generic Clock Generator 0 (GCLKMAIN) is using OSC8M as source.
* We need to:
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator), will be used as DFLL48M reference.
* 2) Put XOSC32K as source of Generic Clock Generator 1
* 3) Put Generic Clock Generator 1 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
* 4) Enable DFLL48M clock
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
* 6) Modify PRESCaler value of OSCM to have 8MHz
* 7) Put OSC8M as source for Generic Clock Generator 3
*/
// Constants for Clock generators
#define GENERIC_CLOCK_GENERATOR_MAIN (0u)
#define GENERIC_CLOCK_GENERATOR_XOSC32K (1u)
#define GENERIC_CLOCK_GENERATOR_OSCULP32K (2u) /* Initialized at reset for WDT */
#define GENERIC_CLOCK_GENERATOR_OSC8M (3u)
// Constants for Clock multiplexers
#define GENERIC_CLOCK_MULTIPLEXER_DFLL48M (0u)
#define SYSCTRL_FUSES_OSC32K_CAL_ADDR (NVMCTRL_OTP4 + 4)
#define SYSCTRL_FUSES_OSC32K_CAL_Pos 6
#define SYSCTRL_FUSES_OSC32K_ADDR SYSCTRL_FUSES_OSC32K_CAL_ADDR
#define SYSCTRL_FUSES_OSC32K_Pos SYSCTRL_FUSES_OSC32K_CAL_Pos
#define SYSCTRL_FUSES_OSC32K_Msk (0x7Fu << SYSCTRL_FUSES_OSC32K_Pos)
void board_init(void)
{
/* Set 1 Flash Wait State for 48MHz, cf tables 20.9 and 35.27 in SAMD21 Datasheet */
NVMCTRL->CTRLB.bit.RWS = NVMCTRL_CTRLB_RWS_HALF_Val;
volatile bool g_interrupt_enabled = true;
/* Turn on the digital interface clock */
PM->APBAMASK.reg |= PM_APBAMASK_GCLK;
/* ----------------------------------------------------------------------------------------------
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator)
*/
SYSCTRL->XOSC32K.reg = SYSCTRL_XOSC32K_STARTUP( 0x6u ) | /* cf table 15.10 of product datasheet in chapter 15.8.6 */
SYSCTRL_XOSC32K_XTALEN | SYSCTRL_XOSC32K_EN32K;
SYSCTRL->XOSC32K.bit.ENABLE = 1; /* separate call, as described in chapter 15.6.3 */
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSC32KRDY) == 0 )
{
/* Wait for oscillator stabilization */
}
/* Software reset the module to ensure it is re-initialized correctly */
/* Note: Due to synchronization, there is a delay from writing CTRL.SWRST until the reset is complete.
* CTRL.SWRST and STATUS.SYNCBUSY will both be cleared when the reset is complete, as described in chapter 13.8.1
*/
GCLK->CTRL.reg = GCLK_CTRL_SWRST;
while ( (GCLK->CTRL.reg & GCLK_CTRL_SWRST) && (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) )
{
/* Wait for reset to complete */
}
/* ----------------------------------------------------------------------------------------------
* 2) Put XOSC32K as source of Generic Clock Generator 1
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_XOSC32K ); // Generic Clock Generator 1
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* Write Generic Clock Generator 1 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_XOSC32K ) | // Generic Clock Generator 1
GCLK_GENCTRL_SRC_XOSC32K | // Selected source is External 32KHz Oscillator
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 3) Put Generic Clock Generator 1 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
*/
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID( GENERIC_CLOCK_MULTIPLEXER_DFLL48M ) | // Generic Clock Multiplexer 0
GCLK_CLKCTRL_GEN_GCLK1 | // Generic Clock Generator 1 is source
GCLK_CLKCTRL_CLKEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 4) Enable DFLL48M clock
*/
/* DFLL Configuration in Closed Loop mode, cf product datasheet chapter 15.6.7.1 - Closed-Loop Operation */
/* Remove the OnDemand mode, Bug http://avr32.icgroup.norway.atmel.com/bugzilla/show_bug.cgi?id=9905 */
SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0;
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 31 ) | // Coarse step is 31, half of the max value
SYSCTRL_DFLLMUL_FSTEP( 511 ) | // Fine step is 511, half of the max value
SYSCTRL_DFLLMUL_MUL( (VARIANT_MCK/VARIANT_MAINOSC) ); // External 32KHz is the reference
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* Write full configuration to DFLL control register */
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_MODE | /* Enable the closed loop mode */
SYSCTRL_DFLLCTRL_WAITLOCK |
SYSCTRL_DFLLCTRL_QLDIS; /* Disable Quick lock */
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* Enable the DFLL */
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE;
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKC) == 0 ||
(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKF) == 0 )
{
/* Wait for locks flags */
}
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_MAIN ); // Generic Clock Generator 0
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* Write Generic Clock Generator 0 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_MAIN ) | // Generic Clock Generator 0
GCLK_GENCTRL_SRC_DFLL48M | // Selected source is DFLL 48MHz
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_IDC | // Set 50/50 duty cycle
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
#if 0
/* ----------------------------------------------------------------------------------------------
* 6) Modify PRESCaler value of OSC8M to have 8MHz
*/
SYSCTRL->OSC8M.bit.PRESC = SYSCTRL_OSC8M_PRESC_1_Val;
SYSCTRL->OSC8M.bit.ONDEMAND = 0;
/* ----------------------------------------------------------------------------------------------
* 7) Put OSC8M as source for Generic Clock Generator 3
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_OSC8M ); // Generic Clock Generator 3
/* Write Generic Clock Generator 3 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_OSC8M ) | // Generic Clock Generator 3
GCLK_GENCTRL_SRC_OSC8M | // Selected source is RC OSC 8MHz (already enabled at reset)
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
#endif //0
/*
* Now that all system clocks are configured, we can set CPU and APBx BUS clocks.
* These values are normally the ones present after Reset.
*/
PM->CPUSEL.reg = PM_CPUSEL_CPUDIV_DIV1;
PM->APBASEL.reg = PM_APBASEL_APBADIV_DIV1_Val;
PM->APBBSEL.reg = PM_APBBSEL_APBBDIV_DIV1_Val;
PM->APBCSEL.reg = PM_APBCSEL_APBCDIV_DIV1_Val;
static void gclk_sync(void) {
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY)
;
}
static void dfll_sync(void) {
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0)
;
}
void board_init(void) {
NVMCTRL->CTRLB.bit.RWS = 1;
#if defined(CRYSTALLESS)
/* Configure OSC8M as source for GCLK_GEN 2 */
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2); // Read GENERATOR_ID - GCLK_GEN_2
gclk_sync();
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(2) | GCLK_GENCTRL_SRC_OSC8M_Val | GCLK_GENCTRL_GENEN;
gclk_sync();
// Turn on DFLL with USB correction and sync to internal 8 mhz oscillator
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE;
dfll_sync();
SYSCTRL_DFLLVAL_Type dfllval_conf = {0};
uint32_t coarse =( *((uint32_t *)(NVMCTRL_OTP4)
+ (NVM_SW_CALIB_DFLL48M_COARSE_VAL / 32))
>> (NVM_SW_CALIB_DFLL48M_COARSE_VAL % 32))
& ((1 << 6) - 1);
if (coarse == 0x3f) {
coarse = 0x1f;
}
dfllval_conf.bit.COARSE = coarse;
// TODO(tannewt): Load this from a well known flash location so that it can be
// calibrated during testing.
dfllval_conf.bit.FINE = 0x1ff;
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 0x1f / 4 ) | // Coarse step is 31, half of the max value
SYSCTRL_DFLLMUL_FSTEP( 10 ) |
48000;
SYSCTRL->DFLLVAL.reg = dfllval_conf.reg;
SYSCTRL->DFLLCTRL.reg = 0;
dfll_sync();
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_MODE |
SYSCTRL_DFLLCTRL_CCDIS |
SYSCTRL_DFLLCTRL_USBCRM | /* USB correction */
SYSCTRL_DFLLCTRL_BPLCKC;
dfll_sync();
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE ;
dfll_sync();
GCLK_CLKCTRL_Type clkctrl={0};
uint16_t temp;
GCLK->CLKCTRL.bit.ID = 2; // GCLK_ID - DFLL48M Reference
temp = GCLK->CLKCTRL.reg;
clkctrl.bit.CLKEN = 1;
clkctrl.bit.WRTLOCK = 0;
clkctrl.bit.GEN = GCLK_CLKCTRL_GEN_GCLK0_Val;
GCLK->CLKCTRL.reg = (clkctrl.reg | temp);
#else
SYSCTRL->XOSC32K.reg =
SYSCTRL_XOSC32K_STARTUP(6) | SYSCTRL_XOSC32K_XTALEN | SYSCTRL_XOSC32K_EN32K;
SYSCTRL->XOSC32K.bit.ENABLE = 1;
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSC32KRDY) == 0)
;
GCLK->GENDIV.reg = GCLK_GENDIV_ID(1);
gclk_sync();
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(1) | GCLK_GENCTRL_SRC_XOSC32K | GCLK_GENCTRL_GENEN;
gclk_sync();
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(0) | GCLK_CLKCTRL_GEN_GCLK1 | GCLK_CLKCTRL_CLKEN;
gclk_sync();
SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0;
dfll_sync();
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP(31) | SYSCTRL_DFLLMUL_FSTEP(511) |
SYSCTRL_DFLLMUL_MUL((CPU_FREQUENCY / (32 * 1024)));
dfll_sync();
SYSCTRL->DFLLCTRL.reg |=
SYSCTRL_DFLLCTRL_MODE | SYSCTRL_DFLLCTRL_WAITLOCK | SYSCTRL_DFLLCTRL_QLDIS;
dfll_sync();
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE;
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKC) == 0 ||
(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKF) == 0)
;
dfll_sync();
#endif
// Configure DFLL48M as source for GCLK_GEN 0
GCLK->GENDIV.reg = GCLK_GENDIV_ID(0);
gclk_sync();
// Add GCLK_GENCTRL_OE below to output GCLK0 on the SWCLK pin.
GCLK->GENCTRL.reg =
GCLK_GENCTRL_ID(0) | GCLK_GENCTRL_SRC_DFLL48M | GCLK_GENCTRL_IDC | GCLK_GENCTRL_GENEN;
gclk_sync();
SysTick_Config(1000);
// Uncomment these two lines to output GCLK0 on the SWCLK pin.
// PORT->Group[0].PINCFG[30].bit.PMUXEN = 1;
// Set the port mux mask for odd processor pin numbers, PA30 = 30 is even number, PMUXE = PMUX Even
// PORT->Group[0].PMUX[30 / 2].reg |= PORT_PMUX_PMUXE_H;
}

View file

@ -54,7 +54,7 @@ extern int main(void);
extern void __libc_init_array(void);
/* Exception Table */
__attribute__ ((section(".isr_vector")))
__attribute__ ((used, section(".isr_vector")))
const struct ConstVectors exception_table =
{
/* Configure Initial Stack Pointer, using linker-generated symbols */

View file

@ -2,14 +2,9 @@
BOARD_ID=arduino_zero NAME=samd21_sam_ba make clean all
BOARD_ID=genuino_zero NAME=samd21_sam_ba_genuino make clean all
BOARD_ID=arduino_mkr1000 NAME=samd21_sam_ba_arduino_mkr1000 make clean all
mv -v samd21_sam_ba_arduino_mkr1000.* ../mkr1000/
BOARD_ID=genuino_mkr1000 NAME=samd21_sam_ba_genuino_mkr1000 make clean all
mv -v samd21_sam_ba_genuino_mkr1000.* ../mkr1000/
BOARD_ID=arduino_mkrzero NAME=samd21_sam_ba_arduino_mkrzero make clean all
mv -v samd21_sam_ba_arduino_mkrzero.* ../mkrzero/
@ -22,11 +17,20 @@ mv -v samd21_sam_ba_arduino_mkrgsm1400.* ../mkrgsm1400/
BOARD_ID=arduino_mkrwan1300 NAME=samd21_sam_ba_arduino_mkrwan1300 make clean all
mv -v samd21_sam_ba_arduino_mkrwan1300.* ../mkrwan1300/
BOARD_ID=arduino_mkrwan1310 NAME=samd21_sam_ba_arduino_mkrwan1310 make clean all
mv -v samd21_sam_ba_arduino_mkrwan1310.* ../mkrwan1300/
BOARD_ID=arduino_mkrwifi1010 NAME=samd21_sam_ba_arduino_mkrwifi1010 make clean all
mv -v samd21_sam_ba_arduino_mkrwifi1010.* ../mkrwifi1010/
BOARD_ID=arduino_mkrvidor4000 SAM_BA_INTERFACES=SAM_BA_USBCDC_ONLY NAME=samd21_sam_ba_arduino_mkrvidor4000 make clean all
mv -v samd21_sam_ba_arduino_mkrvidor4000.* ../mkrvidor4000/
BOARD_ID=arduino_mkrnb1500 NAME=samd21_sam_ba_arduino_mkrnb1500 make clean all
mv -v samd21_sam_ba_arduino_mkrnb1500.* ../mkrnb1500/
BOARD_ID=arduino_nano_33_iot NAME=samd21_sam_ba_arduino_nano_33_iot make clean all
mv -v samd21_sam_ba_arduino_nano_33_iot.* ../nano_33_iot/
echo Done building bootloaders!

View file

@ -23,18 +23,35 @@
#include "sam_ba_serial.h"
#include "board_definitions.h"
#include "board_driver_led.h"
#include "board_driver_i2c.h"
#include "board_driver_pmic.h"
#include "board_driver_jtag.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
extern uint32_t __sketch_vectors_ptr; // Exported value from linker script
extern void board_init(void);
#if (defined DEBUG) && (DEBUG == 1)
volatile uint32_t* pulSketch_Start_Address;
#endif
static void jump_to_application(void) {
/* Rebase the Stack Pointer */
__set_MSP( (uint32_t)(__sketch_vectors_ptr) );
/* Rebase the vector table base address */
SCB->VTOR = ((uint32_t)(&__sketch_vectors_ptr) & SCB_VTOR_TBLOFF_Msk);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(*pulSketch_Start_Address));
}
static volatile bool main_b_cdc_enable = false;
#ifdef CONFIGURE_PMIC
static volatile bool jump_to_app = false;
#endif
/**
* \brief Check the application startup condition
*
@ -44,41 +61,6 @@ static void check_start_application(void)
// LED_init();
// LED_off();
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0x07738135
if (PM->RCAUSE.bit.POR)
{
/* On power-on initialize double-tap */
BOOT_DOUBLE_TAP_DATA = 0;
}
else
{
if (BOOT_DOUBLE_TAP_DATA == DOUBLE_TAP_MAGIC)
{
/* Second tap, stay in bootloader */
BOOT_DOUBLE_TAP_DATA = 0;
return;
}
/* First tap */
BOOT_DOUBLE_TAP_DATA = DOUBLE_TAP_MAGIC;
/* Wait 0.5sec to see if the user tap reset again.
* The loop value is based on SAMD21 default 1MHz clock @ reset.
*/
for (uint32_t i=0; i<125000; i++) /* 500ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
/* Timeout happened, continue boot... */
BOOT_DOUBLE_TAP_DATA = 0;
}
#endif
#if (!defined DEBUG) || ((defined DEBUG) && (DEBUG == 0))
uint32_t* pulSketch_Start_Address;
#endif
/*
* Test sketch stack pointer @ &__sketch_vectors_ptr
* Stay in SAM-BA if value @ (&__sketch_vectors_ptr) == 0xFFFFFFFF (Erased flash cell value)
@ -108,6 +90,47 @@ uint32_t* pulSketch_Start_Address;
return;
}
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0x07738135
if (PM->RCAUSE.bit.POR)
{
/* On power-on initialize double-tap */
BOOT_DOUBLE_TAP_DATA = 0;
}
else
{
if (BOOT_DOUBLE_TAP_DATA == DOUBLE_TAP_MAGIC)
{
/* Second tap, stay in bootloader */
BOOT_DOUBLE_TAP_DATA = 0;
return;
}
#ifdef HAS_EZ6301QI
// wait a tiny bit for the EZ6301QI to settle,
// as it's connected to RESETN and might reset
// the chip when the cable is plugged in fresh
for (uint32_t i=0; i<2500; i++) /* 10ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
#endif
/* First tap */
BOOT_DOUBLE_TAP_DATA = DOUBLE_TAP_MAGIC;
/* Wait 0.5sec to see if the user tap reset again.
* The loop value is based on SAMD21 default 1MHz clock @ reset.
*/
for (uint32_t i=0; i<125000; i++) /* 500ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
/* Timeout happened, continue boot... */
BOOT_DOUBLE_TAP_DATA = 0;
}
#endif
/*
#if defined(BOOT_LOAD_PIN)
volatile PortGroup *boot_port = (volatile PortGroup *)(&(PORT->Group[BOOT_LOAD_PIN / 32]));
@ -130,15 +153,12 @@ uint32_t* pulSketch_Start_Address;
*/
// LED_on();
#ifdef CONFIGURE_PMIC
jump_to_app = true;
#else
jump_to_application();
#endif
/* Rebase the Stack Pointer */
__set_MSP( (uint32_t)(__sketch_vectors_ptr) );
/* Rebase the vector table base address */
SCB->VTOR = ((uint32_t)(&__sketch_vectors_ptr) & SCB_VTOR_TBLOFF_Msk);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(*pulSketch_Start_Address));
}
#if DEBUG_ENABLE
@ -155,7 +175,7 @@ uint32_t* pulSketch_Start_Address;
*/
int main(void)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
P_USB_CDC pCdc;
#endif
DEBUG_PIN_HIGH;
@ -168,21 +188,58 @@ int main(void)
board_init();
__enable_irq();
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#ifdef CONFIGURE_PMIC
configure_pmic();
#endif
#ifdef ENABLE_JTAG_LOAD
uint32_t temp ;
// Get whole current setup for both odd and even pins and remove odd one
temp = (PORT->Group[0].PMUX[27 >> 1].reg) & PORT_PMUX_PMUXE( 0xF ) ;
// Set new muxing
PORT->Group[0].PMUX[27 >> 1].reg = temp|PORT_PMUX_PMUXO( 7 ) ;
// Enable port mux
PORT->Group[0].PINCFG[27].reg |= PORT_PINCFG_PMUXEN ;
clockout(0, 1);
jtagInit();
if ((jtagBitstreamVersion() & 0xFF000000) != 0xB0000000) {
// FPGA is not in the bootloader, restart it
jtagReload();
}
#endif
#ifdef CONFIGURE_PMIC
if (jump_to_app == true) {
jump_to_application();
}
#endif
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* UART is enabled in all cases */
serial_open();
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
pCdc = usb_init();
#endif
DEBUG_PIN_LOW;
/* Initialize LEDs */
LED_init();
LEDRX_init();
LEDRX_off();
LEDTX_init();
LEDTX_off();
/* Start the sys tick (1 ms) */
SysTick_Config(1000);
/* Wait for a complete enum on usb or a '#' char on serial line */
while (1)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
if (pCdc->IsConfigured(pCdc) != 0)
{
main_b_cdc_enable = true;
@ -200,7 +257,7 @@ int main(void)
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Check if a '#' has been received */
if (!main_b_cdc_enable && serial_sharp_received())
{
@ -214,3 +271,10 @@ int main(void)
#endif
}
}
void SysTick_Handler(void)
{
LED_pulse();
sam_ba_monitor_sys_tick();
}

View file

@ -23,8 +23,11 @@
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#include "board_driver_usb.h"
#include "board_driver_jtag.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#include "board_driver_led.h"
#include <stdlib.h>
const char RomBOOT_Version[] = SAM_BA_VERSION;
const char RomBOOT_ExtendedCapabilities[] = "[Arduino:XYZ]";
@ -48,7 +51,7 @@ typedef struct
uint32_t (*getdata_xmd)(void* data, uint32_t length);
} t_monitor_if;
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Initialize structures with function pointers from supported interfaces */
const t_monitor_if uart_if =
{
@ -62,7 +65,7 @@ const t_monitor_if uart_if =
};
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
//Please note that USB doesn't use Xmodem protocol, since USB already includes flow control and data verification
//Data are simply forwarded without further coding.
const t_monitor_if usbcdc_if =
@ -84,9 +87,14 @@ t_monitor_if * ptr_monitor_if;
volatile bool b_terminal_mode = false;
volatile bool b_sam_ba_interface_usart = false;
/* Pulse generation counters to keep track of the time remaining for each pulse type */
#define TX_RX_LED_PULSE_PERIOD 100
volatile uint16_t txLEDPulse = 0; // time remaining for Tx LED pulse
volatile uint16_t rxLEDPulse = 0; // time remaining for Rx LED pulse
void sam_ba_monitor_init(uint8_t com_interface)
{
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
//Selects the requested interface for future actions
if (com_interface == SAM_BA_INTERFACE_USART)
{
@ -94,7 +102,7 @@ void sam_ba_monitor_init(uint8_t com_interface)
b_sam_ba_interface_usart = true;
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
if (com_interface == SAM_BA_INTERFACE_USBCDC)
{
ptr_monitor_if = (t_monitor_if*) &usbcdc_if;
@ -102,8 +110,74 @@ void sam_ba_monitor_init(uint8_t com_interface)
#endif
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata_xmd(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata_xmd(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata_xmd(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata_xmd(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/**
* \brief This function allows data rx by USART
* \brief This function allows data emission by USART
*
* \param *data Data pointer
* \param length Length of the data
@ -141,10 +215,10 @@ void sam_ba_putdata_term(uint8_t* data, uint32_t length)
buf[1] = 'x';
buf[length * 2 + 2] = '\n';
buf[length * 2 + 3] = '\r';
ptr_monitor_if->putdata(buf, length * 2 + 4);
sam_ba_putdata(ptr_monitor_if, buf, length * 2 + 4);
}
else
ptr_monitor_if->putdata(data, length);
sam_ba_putdata(ptr_monitor_if, data, length);
return;
}
@ -187,12 +261,17 @@ static void put_uint32(uint32_t n)
buff[7-i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
ptr_monitor_if->putdata(buff, 8);
sam_ba_putdata( ptr_monitor_if, buff, 8);
}
#ifdef ENABLE_JTAG_LOAD
static uint32_t offset = __UINT32_MAX__;
static bool flashNeeded = false;
#endif
static void sam_ba_monitor_loop(void)
{
length = ptr_monitor_if->getdata(data, SIZEBUFMAX);
length = sam_ba_getdata(ptr_monitor_if, data, SIZEBUFMAX);
ptr = data;
for (i = 0; i < length; i++, ptr++)
@ -203,7 +282,7 @@ static void sam_ba_monitor_loop(void)
{
if (b_terminal_mode)
{
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
if (command == 'S')
{
@ -235,13 +314,13 @@ static void sam_ba_monitor_loop(void)
ptr--;
//Do we expect more data ?
if(j<current_number)
ptr_monitor_if->getdata_xmd(ptr_data, current_number-j);
sam_ba_getdata_xmd(ptr_monitor_if, ptr_data, current_number-j);
__asm("nop");
}
else if (command == 'R')
{
ptr_monitor_if->putdata_xmd(ptr_data, current_number);
sam_ba_putdata_xmd(ptr_monitor_if, ptr_data, current_number);
}
else if (command == 'O')
{
@ -282,35 +361,35 @@ static void sam_ba_monitor_loop(void)
else if (command == 'T')
{
b_terminal_mode = 1;
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
else if (command == 'N')
{
if (b_terminal_mode == 0)
{
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
b_terminal_mode = 0;
}
else if (command == 'V')
{
ptr_monitor_if->putdata("v", 1);
ptr_monitor_if->putdata((uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version));
ptr_monitor_if->putdata(" ", 1);
ptr_monitor_if->putdata((uint8_t *) RomBOOT_ExtendedCapabilities, strlen(RomBOOT_ExtendedCapabilities));
ptr_monitor_if->putdata(" ", 1);
sam_ba_putdata( ptr_monitor_if, "v", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version));
sam_ba_putdata( ptr_monitor_if, " ", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_ExtendedCapabilities, strlen(RomBOOT_ExtendedCapabilities));
sam_ba_putdata( ptr_monitor_if, " ", 1);
ptr = (uint8_t*) &(__DATE__);
i = 0;
while (*ptr++ != '\0')
i++;
ptr_monitor_if->putdata((uint8_t *) &(__DATE__), i);
ptr_monitor_if->putdata(" ", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__DATE__), i);
sam_ba_putdata( ptr_monitor_if, " ", 1);
i = 0;
ptr = (uint8_t*) &(__TIME__);
while (*ptr++ != '\0')
i++;
ptr_monitor_if->putdata((uint8_t *) &(__TIME__), i);
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__TIME__), i);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
else if (command == 'X')
{
@ -334,7 +413,7 @@ static void sam_ba_monitor_loop(void)
}
// Notify command completed
ptr_monitor_if->putdata("X\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "X\n\r", 3);
}
else if (command == 'Y')
{
@ -361,6 +440,76 @@ static void sam_ba_monitor_loop(void)
uint32_t *src_addr = src_buff_addr;
uint32_t *dst_addr = (uint32_t*)ptr_data;
#ifdef ENABLE_JTAG_LOAD
if ((uint32_t)dst_addr == 0x40000) {
if (jtagInit() != 0) {
// fail!
sam_ba_putdata( ptr_monitor_if, "y\n\r", 3);
return;
}
// content of the first flash page:
// offset (32) : length(32) : sha256sum(256) : type (32) : force (32) = 48 bytes
// for every section; check last sector of the flash to understand if reflash is needed
externalFlashSignatures data[3];
jtagFlashReadBlock(LAST_FLASH_PAGE, sizeof(data), (uint8_t*)data);
externalFlashSignatures* newData = (externalFlashSignatures*)src_addr;
for (int k=0; k<3; k++) {
if (newData[k].force != 0) {
offset = newData[k].offset;
flashNeeded = true;
break;
}
if ((data[k].type == newData[k].type) || (data[k].type == 0xFFFFFFFF)) {
if (newData[k].offset < offset) {
offset = newData[k].offset;
}
if (memcmp(data[k].sha256sum, newData[k].sha256sum, 32) != 0) {
flashNeeded = true;
break;
}
}
}
// merge old page and new page
for (int k=0; k<3; k++) {
if (newData[k].type != 0xFFFFFFFF) {
memcpy(&data[k], &newData[k], sizeof(newData[k]));
}
}
jtagFlashEraseBlock(SCRATCHPAD_FLASH_PAGE);
// write first page to SCRATCHPAD_FLASH_PAGE (to allow correct verification)
for (int j =0; j<size; ) {
jtagFlashWriteBlock(SCRATCHPAD_FLASH_PAGE + j*4, 512, (uint32_t*)&src_addr[j]);
j += 128;
}
// write real structure with checksums to LAST_FLASH_PAGE
jtagFlashWriteBlock(LAST_FLASH_PAGE, sizeof(data), (uint32_t*)data);
goto end;
}
if ((uint32_t)dst_addr >= 0x41000) {
if (flashNeeded == false) {
goto end;
}
uint32_t rebasedAddress = (uint32_t)dst_addr - 0x41000 + offset;
if (rebasedAddress % 0x10000 == 0) {
jtagFlashEraseBlock(rebasedAddress);
}
for (int j =0; j<size; ) {
jtagFlashWriteBlock(rebasedAddress + j*4, 512, (uint32_t*)&src_addr[j]);
j += 128;
}
goto end;
}
#endif
// Set automatic page write
NVMCTRL->CTRLB.bit.MANW = 0;
@ -392,8 +541,10 @@ static void sam_ba_monitor_loop(void)
}
}
end:
// Notify command completed
ptr_monitor_if->putdata("Y\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "Y\n\r", 3);
}
else if (command == 'Z')
{
@ -404,17 +555,42 @@ static void sam_ba_monitor_loop(void)
// Syntax: Z[START_ADDR],[SIZE]#
// Returns: Z[CRC]#
uint8_t *data = (uint8_t *)ptr_data;
uint8_t *data;
uint32_t size = current_number;
uint16_t crc = 0;
uint32_t i = 0;
#ifdef ENABLE_JTAG_LOAD
uint8_t buf[4096];
#endif
#ifdef ENABLE_JTAG_LOAD
if ((uint32_t)ptr_data == 0x40000) {
data = (uint8_t*)buf;
for (int j =0; j<size; ) {
jtagFlashReadBlock(SCRATCHPAD_FLASH_PAGE + j, 256, &data[j]);
j += 256;
}
} else if ((uint32_t)ptr_data >= 0x41000) {
data = (uint8_t*)buf;
for (int j =0; j<size; ) {
jtagFlashReadBlock((uint32_t)ptr_data + offset - 0x41000 + j, 256, &data[j]);
j += 256;
}
} else {
data = (uint8_t *)ptr_data;
}
#else
data = (uint8_t *)ptr_data;
#endif
for (i=0; i<size; i++)
crc = serial_add_crc(*data++, crc);
// Send response
ptr_monitor_if->putdata("Z", 1);
sam_ba_putdata( ptr_monitor_if, "Z", 1);
put_uint32(crc);
ptr_monitor_if->putdata("#\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "#\n\r", 3);
}
command = 'z';
@ -422,7 +598,7 @@ static void sam_ba_monitor_loop(void)
if (b_terminal_mode)
{
ptr_monitor_if->putdata(">", 1);
sam_ba_putdata( ptr_monitor_if, ">", 1);
}
}
else
@ -453,6 +629,15 @@ static void sam_ba_monitor_loop(void)
}
}
void sam_ba_monitor_sys_tick(void)
{
/* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */
if (txLEDPulse && !(--txLEDPulse))
LEDTX_off();
if (rxLEDPulse && !(--rxLEDPulse))
LEDRX_off();
}
/**
* \brief This function starts the SAM-BA monitor.
*/

View file

@ -20,15 +20,12 @@
#ifndef _MONITOR_SAM_BA_H_
#define _MONITOR_SAM_BA_H_
#include "board_definitions.h"
#define SAM_BA_VERSION "2.0"
/* Enable the interfaces to save code size */
#define SAM_BA_BOTH_INTERFACES 0
#define SAM_BA_UART_ONLY 1
#define SAM_BA_USBCDC_ONLY 2
#ifndef SAM_BA_INTERFACE
#define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES
#if !defined(SAM_BA_BOTH_INTERFACES) && !defined(SAM_BA_UART_ONLY) && !defined(SAM_BA_USBCDC_ONLY)
#define SAM_BA_BOTH_INTERFACES
#endif
/* Selects USB as the communication interface of the monitor */

View file

@ -22,6 +22,8 @@
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Local reference to current Usart instance in use with this driver */
//struct usart_module usart_sam_ba;
@ -200,49 +202,6 @@ uint32_t serial_getdata(void* data, uint32_t length)
return (1);
}
static const uint16_t crc16Table[256]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
//*----------------------------------------------------------------------------
//* \brief Compute the CRC
//*----------------------------------------------------------------------------
unsigned short serial_add_crc(char ptr, unsigned short crc)
{
return (crc << 8) ^ crc16Table[((crc >> 8) ^ ptr) & 0xff];
}
//*----------------------------------------------------------------------------
//* \brief
@ -532,3 +491,48 @@ uint32_t serial_getdata_xmd(void* data, uint32_t length)
// return(b_run);
}
#endif
static const uint16_t crc16Table[256]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
//*----------------------------------------------------------------------------
//* \brief Compute the CRC
//*----------------------------------------------------------------------------
unsigned short serial_add_crc(char ptr, unsigned short crc)
{
return (crc << 8) ^ crc16Table[((crc >> 8) ^ ptr) & 0xff];
}

View file

@ -23,6 +23,11 @@
#include "board_driver_usb.h"
#include "sam_ba_cdc.h"
#ifndef USB_CURRENT_MA
// default USB current, report using 100mA, enough for a bootloader
#define USB_CURRENT_MA 100
#endif
/* This data array will be copied into SRAM as its length is inferior to 64 bytes,
* and so can stay in flash.
*/
@ -71,7 +76,7 @@ char cfgDescriptor[] =
0x01, // CbConfigurationValue
0x00, // CiConfiguration
0x80, // CbmAttributes Bus powered without remote wakeup: 0x80, Self powered without remote wakeup: 0xc0
0x32, // CMaxPower, report using 100mA, enough for a bootloader
(USB_CURRENT_MA / 2), // CMaxPower
/* Communication Class Interface Descriptor Requirement */
0x09, // bLength

Binary file not shown.

View file

@ -1,376 +1,409 @@
:10000000FC7F0020E9050000D5050000D9050000AF
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600006507000045
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
:10005000044800E000BF0123237010BD5C000020B5
:10006000000000000819000008B5084B002B03D061
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000F81600005C000020540000200000000062
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
:1000D0001C42F7D1084B1A430260C3695A07FCD48B
:1000E000C0239B0243608181C3699C07FCD40368E1
:1000F00002221343036010BD04000040037EDA07B0
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0467400002070B50368041C988B9B
:100140001A1C0821FF32084228D0988B174D014312
:10015000802099839872112353704021144B917120
:1001600050715E68C0202E40800506435E605E6967
:100170003540284358610F4818600F4818615D6882
:100180000E4828408025AD02284358605868800BEF
:100190008003586000235171237105E0137ADA0659
:1001A00002D5201C00F0A0FA207970BDFFFFFF8F60
:1001B0008C0100208C0000200C010020FF3F00F08B
:1001C000002303714371044B016083600B780222AA
:1001D00013430B707047C0463901000038B5364BE9
:1001E0002021DA6901200A43DA61344B06241A78A7
:1001F00002431A70324B0F22197891431970197803
:10020000214319702F490C782043087019780A404F
:100210001A701A7860210A431A702B4B2B4A5A80A5
:100220005A7852B2002AFBDB294B01211A780A4383
:100230001A709A78D107FCD426480268510B1F2205
:100240001140914200D1052111408C011D8D2249A0
:100250002940214319850468A10C0A401F2A00D1B6
:100260001D221C8D1F210A408C4322431A850268DF
:100270000721D20D0A408A4200D103220A40188D7C
:100280001103164A02400A431A8519787F220A4050
:100290001A701A78042112480A431A7058621A898F
:1002A0000C218A431A811A8901218A431A8100216B
:1002B000802201F0B6F838BD0004004058440041E7
:1002C0003C44004159440041000C004006400000FD
:1002D00000500041246080003FF8FFFFFF8FFFFFC8
:1002E0008C010020F7B5141C234A5F0101971D1CE7
:1002F000D319061C5869271C4000400F03301033E7
:10030000C74006D00F1C8022596812060A435A6063
:1003100009E02F1C7B1E9F41184BBF01FF18381CA2
:10032000221C01F075F8019913480835421817612D
:10033000131C5269A104920B890C92030A435A615F
:1003400059690F4A02200A405A616B01F318D979A2
:10035000032211400143D8799043021C0A43DA7109
:100360005979802252420A435A716B01F318DB79A2
:100370009A07FAD5201CFEBD8C0100200C0100203C
:10038000FF3F00F0F8B51E4E041C3378151C002BFF
:1003900012D11C4B1C4A1A645A6C920B92035A6479
:1003A000586C1A4A02405A64A2235B00E25C402067
:1003B0000243E254012333704827FF37E25D0123F3
:1003C00013401AD00F4B5A6C9204920CAA4202D2DC
:1003D0005D6CAD04AD0C081C2A1C0B4901F018F82B
:1003E000E25D03231A4001210A43E15D99430B1C9E
:1003F0001343E3550023337000E01D1C281CF8BD97
:10040000750000208C010020CC000020FF3F00F090
:10041000FF30827930239A43131C2022002900D117
:1004200010221343837170470C4BFF305A6902212D
:10043000920B92035A61027A03231A400A43017A0B
:1004400099430B1C13430372827980235B4213434D
:100450008371037A9A07FCD57047C0468C0100204F
:1004600080235B421943C9B28172704770B5A023E3
:1004700003225B00C254134B134A5C6CC02114402E
:1004800089050C4346255C64FF35402444550F4DD7
:1004900030261D6490256D0046555D6B154029433F
:1004A000922559636D0080214155094D1D63B0258A
:1004B0006D0044555C6F22405A67B2235B00C15403
:1004C00070BDC0468C010020FFFFFF8FCC000020D4
:1004D0004C01002030B5364A1E235168082099434C
:1004E00002231943516033498A6902438A613248C1
:1004F000324A9082908A03439382D3689807FCD54E
:100500002F4B012018701878C40704D52C48407868
:1005100040B20028F7DB01209860587840B20028EC
:10052000FBDB284C26484460587840B20028FBDBAF
:1005300082242348E4014480587840B20028FBDB41
:10054000908C8024A0439084D068C506FCD51E4CB6
:100550001A48C462D4681948E506FBD5848C1B4D43
:100560002C438484D4681548E506FBD5848C022589
:100570002C438484D0680406FCD51048C068450626
:10058000F8D5D068C406FCD500229A605A7852B2D9
:10059000002AFBDB0E480A4A50605A7852B2002A01
:1005A000FBDB00230B724B728B72CB7230BDC046EB
:1005B00000400041000400400C060000000800401C
:1005C000000C004001050100B805FF7D040A000091
:1005D000000703000EBEFEE70DBEFEE705BEFEE708
:1005E00002BEFEE701BEFEE70E4A0F4838B5824262
:1005F00004D10E4A0E4B93420ED10AE00D4C9442A8
:10060000F7D00023D1188842F3D9E55804330D60A0
:10061000F8E700F011F804E09342FAD2002102C397
:10062000FAE7FEE7000000205800002098030020B1
:1006300058000020FC16000010B5244B0022197849
:1006400001231940224B0AD11868224A904201D155
:10065000196014E01A60204A013A002AFCD11A609D
:100660001E4B1968181C4A1C09D0FF22134206D1E0
:1006700081F3088893431A4A936043681847FFF749
:1006800029FF62B600F0F2FC00F0C8F9041CA36870
:10069000201C9847134B002801D001221A701A78A9
:1006A000002A05D0002000F035FA00F091FAFCE7AE
:1006B0001B78002BEBD100F04DFD0028E7D0012086
:1006C00000F028FA00F084FAFCE7C0463804004045
:1006D000FC7F00203581730748E8010000200000FE
:1006E00000ED00E076000020F8B50468051C201C31
:1006F000FF30037AB64A10210B430372B54F1378CB
:10070000B5493B705378B54E0B7093783380D178F0
:10071000338809020B4333801179B14B1980517929
:100720001F8809020F431F809779AE490F80D27945
:100730000F8812023A430A8040224271A648A54F10
:1007400002783878A84F12020243181CBA4200D12E
:1007500099E01EDC802149008A4200D158E107DC83
:10076000812A6AD0822A6ED0802A00D050E164E0CB
:1007700081235B009A4200D1AFE000DA23E1C0237D
:100780009B009A4200D143E1984B9A4200D11AE172
:100790003EE190231B019A4242D015DCD023DB00BE
:1007A0009A4222D088231B019A4242D0A023DB0028
:1007B0009A4200D02CE1201CFFF736FE31882868D1
:1007C00089B2FFF74DFE27E1894B9A4200D1FAE04A
:1007D00000DC1DE1874B9A4200D1E8E0864B9A424B
:1007E00000D015E133886B71EDE033881B0A012BD3
:1007F00008D10B8812222868934201D80A8892B245
:100800007E49DCE033881B0A022B00D000E10B8814
:1008100043222868934201D80A8892B27849CEE0F0
:100820003388201C2B71FFF7FFFD201CFFF71EFEF5
:10083000F2E0291C01C90122C1E0724900230B80AA
:1008400028680222BCE06F4900220A8018885022E2
:1008500010406D4A10701E880F2030401880188894
:10086000032800D9D4E012781B8808335B01E41810
:10087000A379002A01D09B0600E0DB06DB0F0B808A
:10088000286802229BE019887F2291435E4AC9B200
:10089000117018880F21014019803188002900D07B
:1008A000B6E01988002900D1B2E01988032900D9DF
:1008B000AEE012781B8808335B01E318002A05D0EC
:1008C0005A7930218A4320210A4304E05A793021A1
:1008D0008A43102002435A7175E002887F239A43AD
:1008E000494BD2B21A7001880F220A400280328826
:1008F000002A00D08CE00288002A00D188E002881B
:10090000032A00D984E01B78002B27D00388083302
:100910005B01E3189B79990655D50388302108338C
:100920005B01E3181A798A4320210A431A7103886C
:1009300008335B01E318DB795A0644D5038860214C
:1009400008335B01E318DA798A4340210A43DA71FC
:100950000388022208335B01E31826E0038808338A
:100960005B01E3189B79DF062DD50388302108331E
:100970005B01E3181A798A4310210A431A7103882C
:1009800008335B01E318DB7999061CD503886021E5
:1009900008335B01E318DA798A4320210A43DA71CC
:1009A0000388012208335B01E3181A710BE00B88FE
:1009B00008222868934201D80A8892B2134900237A
:1009C000FFF790FC28E0201CFFF72EFD24E0C04636
:1009D0008C0000208100002077000020780000209B
:1009E0007C0000207E0000200203000001030000C4
:1009F00021200000A1210000212200004C14000051
:100A0000000000207A000020800000204400002028
:100A1000201C0121FFF7FCFCF8BDC04610B5054BBA
:100A2000054C2360FFF7DAFB201C2168FFF7C8FBA9
:100A3000201C10BD005000410C02002007B5054BE2
:100A40000122019001A91868131CFFF74BFC01203B
:100A50000EBDC0460C02002013B5054B6C46073492
:100A60001868211C0122FFF78DFC207816BDC046B6
:100A70000C02002010B5074C201CFFF75DFB031C87
:100A80000020834205D022684823FF33D05C012335
:100A9000184010BD0C02002010B5054A0C1C031CA8
:100AA000191C10680123221CFFF71CFC201C10BD20
:100AB0000C02002070B5084C061C201C0D1CFFF712
:100AC0003BFB0023984205D02068311C2A1CFFF70D
:100AD00059FC031C181C70BD0C020020F8B50C4C0E
:100AE000051C201C0E1CFFF727FB0023271C341CB1
:100AF00098420AD0002C07D0291C221C3868FFF726
:100B000041FC241A2D18F5E7331C181CF8BDC0460B
:100B10000C020020012805D1054B064A1A60064B3D
:100B2000187004E0002802D1044A014B1A60704793
:100B30007C0200208014000089000020CC140000FA
:100B400030B51A4B85B01B78002B29D0042901D170
:100B5000026804E0022901D1028800E0027849001D
:100B600004A843180B3B5C1AA3420BD00F20104083
:100B7000092802D83025284300E0373018701209C0
:100B8000013BF1E701A830230370782343700A2268
:100B900043189A700D22DA70054B04311B6801E08E
:100BA000034B1B68DB68984705B030BD8800002008
:100BB0007C02002072B6EFF30883044A13600368D6
:100BC00083F30888436818477047C04680020020B6
:100BD000F0B58FB006A9CD4A0B1C31CA31C351CA3A
:100BE00051C360CA60C3CA4CCA48A3687A255B0374
:100BF0005B0F9B005B58C8490360A26892B25343E5
:100C00000A60C649C64A0B6000231360C54B1D70BD
:100C1000C54BC64D1B68281C1B6940219847C44B17
:100C200000221860C34B1D60C34BC34DC04F1A60F8
:100C3000286839688842EBD2BE4B1B681A78FF2AB5
:100C400000D1F7E1232A00D0CEE1BC4E3378002B4F
:100C500005D0B54BBA481B680221DB689847B14BF9
:100C60001B78532B38D13B682A6893421ED9B14870
:100C700001322A609A1AB34B01681B680131016086
:100C8000B14E9A4201D2326000E03360A44832682B
:100C90000068029000F0BCFB336829685A182A608B
:100CA000A44A1668F1181160A84A13702B68013B1A
:100CB0002B60A04B1A68013A1A60A44BA14A1B781A
:100CC00011688B4206D2984A954812680068C91A82
:100CD00092699047C04676E1522B07D1904A924BD9
:100CE00010681B68974A5B6911686BE14F2B05D14F
:100CF0008B4B944A1B6812681A7064E1482B05D12B
:100D0000874B904A1B6812681A805CE1572B05D10B
:100D1000834B8C4A1B6812681A6054E16F2B03D115
:100D20007F4B0121186807E0682B08D17C4B854870
:100D30001B6802211B880360FFF702FF43E1772B4A
:100D400006D1774B7F481B6804211B680360F3E7DB
:100D5000472B13D17B4B1868FFF72CFF7C4B1B688C
:100D600083F3088862B67B4B1B78002B00D12AE105
:100D70006D4B06201B681B68984724E1542B04D157
:100D800001233370684B1B685CE04E2B0BD133782A
:100D9000002B05D1644B6A481B680221DB68984729
:100DA000002333700FE1562B50D15F4D01212B688A
:100DB0006948DB6898472B680321DB6867489847D8
:100DC000674E2B68301CDB68012198472B680D218A
:100DD000DB68644898472B68301CDB680121984722
:100DE000544F614B544E3B60002333603A1C311C1E
:100DF0001368581C10601B780393002B03D00B68FA
:100E000001330B60F4E72B683168DB68564898477C
:100E10002B685348DB68012198470398306053489A
:100E20003860444A1368591C11601A78424B002AF2
:100E300003D01A6801321A60F3E72A681968D36888
:100E400098472B68DB683E480221BBE03D4A582B9F
:100E500015D1304E314D366813682A68B10093427F
:100E600008D25808E06142482080207DC507FCD5A3
:100E70005B18F4E72C4B3F481B68DB68A1E0592B5B
:100E800033D11268264B3C49002A02D11B680B6003
:100E900026E00868196863688025AB4392086360A0
:100EA000002A1DD0354B2380237DDE07FCD500238F
:100EB000184D2D680095AD08AB4202D3304D25800A
:100EC00006E09342FAD09D00465901334E51EFE7B8
:100ED000257DEE07FCD59D0049194019D21ADFE7A0
:100EE000114B28481B68DB686BE05A2B6BD10C4B0D
:100EF00017681D680026EF19BD4245D02878311CBF
:100F000000F04AF90135061CF6E7C04660140000FF
:100F100000400041340200202C0200202802002062
:100F200078020020240200207C02002038020020E9
:100F30001C02002020020020300200208800002037
:100F4000C014000084020020880200201802002043
:100F500080020020890000209C140000C5140000BD
:100F60009E140000E8140000A0140000AC1400005F
:100F700002A5FFFFB51400008400002044A5FFFF78
:100F800004A5FFFFB91400002E4D2F482B68012146
:100F9000DB68984707230F223240111C3609303195
:100FA000092A00DD07311020C0186A468154013B30
:100FB000F1D22B6804A8DB68082198472B682348E6
:100FC000DB6803219847224D7A232B70214B0022A6
:100FD0001A60214B1B7893422CD01A4B01211B68BD
:100FE0001E48DB68984725E0111C3039C8B2194B00
:100FF000092804D81E683201114319601AE0111C37
:101000004139052903D81868373A010106E0111C57
:101010006139052904D81D68573A29010A4308E0B7
:101020002C2A03D10E4A1E68166001E008490A7096
:1010300000221A600B4B1A6801321A600A4B1A68B8
:101040000132F2E57C020020BD140000BF14000054
:10105000240200208402002088000020C314000025
:1010600078020020300200202002002010B51C4B26
:1010700001201A78022402431A701A4B0F221978A1
:101080009143197019782143197017490C7820433E
:10109000087019780A401A701A7820210A431A70C9
:1010A000124B04211A6A0A431A62114B114A5A80E0
:1010B0005A7852B2002AFBDBC4220F480F49920330
:1010C000FEF7EEFF0E4A002313700E4A13700E4A0D
:1010D00013700E4A13700E4A13700E4A137010BD2F
:1010E0004A440041354400414B4400410004004063
:1010F000000C0040144000000008004204C500003D
:101100008C020020130300208D020020900200209A
:10111000140300201103002008B5C1B20248FEF7F5
:10112000EDFF012008BDC04600080042024B187EBA
:101130004007C00F7047C0460008004208B5FFF7DF
:10114000F5FF0028FBD00248FEF7DEFF08BDC046D1
:101150000008004208B5FFF7E9FF0023984205D0D8
:10116000FFF7ECFF031C233B5A425341181C08BDF8
:1011700070B5041C0D1C4618B44204D02078FFF74B
:10118000CBFF0134F8E7281C70BD10B5041CFFF735
:10119000D5FF2070012010BD0B0A5840034B4000C2
:1011A000C05A0902484080B27047C046F614000099
:1011B000F7B50024051C0F1C261CBC4220D0FFF7ED
:1011C000BDFF114BC0B21B780190002B1AD1311C0E
:1011D000FFF7E2FF0D4B061C1A88002A04D10C4AC7
:1011E00011782A1C002907D001996A1C2970802FC8
:1011F00002D11988013919800134A4B2151CDCE729
:10120000301C00E00120FEBD110300208E020020F2
:1012100012030020F0B53E4E85B0002203900C1C56
:1012200032703C4B914201D1012201E03A490C80DD
:101230001A707F231C4201D080349C43FFF77EFF4D
:101240003378C0B2002B07D000253570FFF776FF4A
:101250003378C0B2AB4236D1432803D0712853D083
:101260001528EBD1012300930120FFF755FF0098CB
:10127000FFF752FF00998025C843C0B2FFF74CFF2B
:10128000039B00270293244A1388002B1DD1214978
:1012900001930978002918D10198FFF73DFF391C07
:1012A0000198FFF779FF013D071C002DEBD1000AE3
:1012B000C0B2FFF731FFF8B2FFF72EFFFFF73EFF96
:1012C0003378002B0AD035701FE00299013B097872
:1012D0001380029B019101330293DDE7C0B206281F
:1012E00007D1009B03990133DBB280310093803C2E
:1012F0000391002CB8D10420FFF70EFFFFF71EFF6B
:10130000044B01251C7000E00025281C05B0F0BD31
:1013100011030020120300208E020020F0B5384C8B
:1013200087B0002301902370994201D1012301E08D
:10133000344A1180344A642613704320FFF7ECFED0
:10134000324FFFF7F3FE002803D1002F03D0013FF7
:10135000F7E7002F03D1013E002EEED14DE001252D
:10136000FFF7ECFE2378002B38D1C0B202900128A1
:1013700005D004283DD10620FFF7CEFE39E005AEAA
:101380000221301CFFF714FF01988021FFF710FFA6
:1013900023780390002B18D1FFF7D0FE0702FFF748
:1013A000CDFEBFB223783F18BFB2012B0DD0039BF7
:1013B0009F4207D13378AB4204D1EB437278DBB262
:1013C0009A4204D01820FFF7A7FE002303E006206E
:1013D000FFF7A2FE029B2278002A02D00026267088
:1013E0000BE0012B05D1019A6B1C8032DDB201921A
:1013F000B6E7054A002313700126301C07B0F0BD84
:10140000110300208E0200201203002000350C0082
:1014100010B50023934203D0CC5CC4540133F9E7E8
:1014200010BD031C8218934202D019700133FAE7F1
:1014300070470000F8B5C046F8BC08BC9E4670472F
:10144000F8B5C046F8BC08BC9E46704712010002C1
:101450000200004041234D00000200000001000096
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004F637420313020323031350031353A35D8
:1014B000373A343500580A0D00590A0D005A0023F6
:1014C0000A0D003E00322E30000000003D0A0000F0
:1014D000590A0000750A0000990A0000B50A0000C8
:1014E000990A0000DD0A00005B41726475696E6F45
:1014F0003A58595A5D000000211042206330844060
:10150000A550C660E770088129914AA16BB18CC1D2
:10151000ADD1CEE1EFF13112100273325222B55249
:101520009442F772D662399318837BB35AA3BDD322
:101530009CC3FFF3DEE36224433420040114E66419
:10154000C774A44485546AA54BB528850995EEE572
:10155000CFF5ACC58DD55336722611163006D77629
:10156000F6669556B4465BB77AA719973887DFF7C2
:10157000FEE79DD7BCC7C448E5588668A7784008F1
:10158000611802282338CCC9EDD98EE9AFF9488912
:1015900069990AA92BB9F55AD44AB77A966A711A89
:1015A000500A333A122AFDDBDCCBBFFB9EEB799B62
:1015B000588B3BBB1AABA66C877CE44CC55C222CD9
:1015C000033C600C411CAEED8FFDECCDCDDD2AADB2
:1015D0000BBD688D499D977EB66ED55EF44E133E69
:1015E000322E511E700E9FFFBEEFDDDFFCCF1BBF02
:1015F0003AAF599F788F8891A981CAB1EBA10CD1DC
:101600002DC14EF16FE18010A100C230E3200450E3
:10161000254046706760B9839893FBA3DAB33DC356
:101620001CD37FE35EF3B1029012F322D232354233
:10163000145277625672EAB5CBA5A89589856EF5E6
:101640004FE52CD50DC5E234C324A0148104667483
:10165000476424540544DBA7FAB79987B8975FE736
:101660007EF71DC73CD7D326F2369106B0165766D3
:101670007676154634564CD96DC90EF92FE9C899BE
:10168000E9898AB9ABA94458654806782768C01823
:10169000E1088238A3287DCB5CDB3FEB1EFBF98B96
:1016A000D89BBBAB9ABB754A545A376A167AF10A73
:1016B000D01AB32A923A2EFD0FED6CDD4DCDAABDA6
:1016C0008BADE89DC98D267C076C645C454CA23CC3
:1016D000832CE01CC10C1FEF3EFF5DCF7CDF9BAF76
:1016E000BABFD98FF89F176E367E554E745E932E13
:0C16F000B23ED10EF01E00000000000011
:1016FC0009024300020100803209040000010202C9
:10170C000000052400100104240200052406000139
:10171C000524010001070583030800FF09040100EB
:10172C00020A0000000705810240000007050202C2
:10173C004000000000C20100000008006900000029
:08174C00410000000000000054
:04000003000005E90B
:100090000819000060000020580000200000000047
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012498002C8611178B4
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B9202DA617047780000200100002072
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0E6FA207970BDD8
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F076F938BD00040040E6
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F035F901990F48083577
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0E0F80123EB550023337000E01C1CB1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C0000200C19000038B5344BC2
:100660001A681C1C013221D0324A191D1160D9B2FE
:1006700000291BD1304A1078012210402F4A0AD19C
:1006800015682F498D4201D110600FE011602D498E
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343294A9360224B5B681847FFF73AFF50
:1006B00062B600F0CDFD00F05BF8244B8022920280
:1006C00023499A6008220A602249041C0A60802299
:1006D00012059A609A61204B204AC0215A601A4A3A
:1006E0000906106A0002000A0143116200229A60A2
:1006F00007221A60A368201C9847194B002801D0D4
:1007000001221A701A78002A05D0002000F094FA0D
:1007100000F01AFBFCE71B78002BEBD100F00CFE7D
:100720000028E7D0012000F087FA00F00DFBFCE77D
:10073000002000001802002038040040FC7F002048
:100740003581730748E8010000ED00E000440041F6
:10075000884400419844004110E000E0E7030000B5
:100760007B00002008B5FFF79BFC00F0C9FA08BD2C
:1007700010B5054B054C2360FFF762FD201C216876
:10078000FFF750FD201C10BD005000411C0200204E
:1007900070B5051CC0B0081C161C0C1C00F03BFFFB
:1007A00040006A460323023053701070760801231C
:1007B000E218013A11785A00002906D1281C69462E
:1007C0000023FFF7C1FD40B070BDB342F6DA6846C2
:1007D00081520133ECE70000F7B5BA4A0468137898
:1007E000B949271CFF37051C102038720B7053784D
:1007F000B648B74E037093783380D17833880902B6
:100800000B4333801179B34B198051791888090251
:10081000084318809079B0490880D279088812027C
:1008200002430A8040227A71A84F3A78A64F1202FA
:1008300038780F1C0243A9488446181C624500D131
:10084000C2E020DC802149008A4200D16EE109DC4F
:10085000812A00D192E0822A00D195E0802A00D03E
:1008600064E18BE081235B009A4200D1CFE000DAA3
:1008700058E1C0239B009A4200D157E1984B9A421D
:1008800000D14FE152E190231B019A4269D015DC5F
:10089000D023DB009A4222D088231B019A4269D0E0
:1008A000A023DB009A4200D040E1201CFFF7DCFDD2
:1008B0003188286889B2FFF7EBFD3BE1894B9A420A
:1008C00000D12FE100DC31E1874B9A4200D11DE1DC
:1008D000864B9A4200D029E133886B7122E133883C
:1008E0001B0A012B08D10B8812222868934201D8D9
:1008F0000A8892B27E4911E133881B0A022B08D183
:100900000B8843222868934201D80A8892B2794919
:1009100004E133881B0A032B00D007E13388DBB2E4
:10092000012B17D0002B07D0022B00D0FEE00A8845
:100930002868D2B2704911E0042201A86F4900F082
:1009400059FE3B8804222868934201D83A8892B223
:1009500001A9E3E00A8828686949D2B2FFF718FFC5
:10096000E8E03388201C2B71FFF77EFD201CFFF789
:1009700095FDDFE0291C01C90122CFE06149002378
:100980000B8028680222CAE05E4900220A8018888B
:10099000502210405C4A10701E880F203040188092
:1009A0001888032800D9C1E012781B8808335B013E
:1009B000E418A379002A01D09B0600E0DB06DB0FD8
:1009C0000B8028680222A9E019887F2291434E4AB1
:1009D000C9B2117018880F2101401980318800298F
:1009E00000D0A3E01988002900D19FE019880329CD
:1009F00000D99BE012781B8808335B01E318002ABA
:100A000002D020225A718DE0102159718AE00288AB
:100A10007F239A433C4BD2B21A7001880F220A40BE
:100A200002803288002A00D080E00288002A00D1AB
:100A30007CE00288032A00D978E01B78002B1FD0C5
:100A4000038808335B01E3189B799A066AD503880B
:100A5000202208335B01E3181A71038808335B0115
:100A6000E318DB795F065DD50388402208335B011C
:100A7000E318DA710388022208335B01E3181EE0F1
:100A8000038808335B01E3189B79D9064AD50388AC
:100A9000102208335B01E3181A71038808335B01E5
:100AA000E318DB799A063DD50388202208335B01E1
:100AB000E318DA710388012208335B01E3181A7125
:100AC00030E0C046980000207D0000208200002019
:100AD0008400002086000020800000200203000027
:100AE0000103000021200000A121000021220000BC
:100AF0005C160000040000204C1600003C160000AC
:100B0000401600007E0000207C0000200B88082298
:100B10002868934201D80A8892B207490023FFF758
:100B200013FC07E0201CFFF79FFC03E0201C0121C1
:100B3000FFF790FCF7BDC0464800002007B5054B05
:100B40000122019001A91868131CFFF7FDFB012089
:100B50000EBDC0461C02002013B5054B6C46073481
:100B60001868211C0122FFF737FC207816BDC0460B
:100B70001C02002010B5074C201CFFF711FB031CC2
:100B80000020834205D022684823FF33D05C012334
:100B9000184010BD1C02002010B5054A0C1C031C97
:100BA000191C10680123221CFFF7CEFB201C10BD6E
:100BB0001C02002070B5084C061C201C0D1CFFF701
:100BC000EFFA0023984205D02068311C2A1CFFF759
:100BD00003FC031C181C70BD1C020020F8B50C4C53
:100BE000051C201C0E1CFFF7DBFA0023271C341CFD
:100BF00098420AD0002C07D0291C221C3868FFF725
:100C0000EBFB241A2D18F5E7331C181CF8BDC04661
:100C10001C02002008B5031C081C111C9847044B3B
:100C2000802212055A61034B64221A8008BDC04617
:100C3000004400418C000020012805D1054B064AE4
:100C40001A60064B187004E0002802D1044A014BD8
:100C50001A6070478C02002090160000940000205B
:100C6000DC16000030B50A1C1C4985B00978031C4D
:100C700000292AD0042A01D1006804E0022A01D107
:100C8000008800E00078520004A98B180B3B9C1AE6
:100C9000A3420BD00F210140092902D83025294356
:100CA00000E0373119700009013BF1E701A9302359
:100CB0000B7078234B700A208B1898700D20D87019
:100CC000074B04321B68D86803E005490968C86807
:100CD000191CFFF79FFF05B030BDC04688000020FB
:100CE0008C02002072B6EFF30883044A1360036895
:100CF00083F30888436818477047C0469002002075
:100D00000D4B1A88002A09D01A88013A92B21A802B
:100D1000002A03D18022094B12059A61084B1A88D8
:100D2000002A08D01A88013A92B21A80002A02D109
:100D3000044B08221A6070478C00002000440041D8
:100D40008A00002098440041F0B591B008A9CE4A2D
:100D50000B1C31CA31C351CA51C360CA60C3CB4BEB
:100D6000CB489A687A255203520F92005258C949CB
:100D700002609C68A4B262430C60C74900240A6008
:100D8000C64A1460C64C2570C64CC74D2368281C43
:100D90001B6940219847002805D0C44B08221A60DF
:100DA000C34B64221A80C34B00221860C24B1D60E3
:100DB000C24BC24DBF4F1A602A683B689A42E3D2C9
:100DC000BD4B1B681A78FF2A00D120E2232A00D0ED
:100DD000F7E1BB4E3378002B06D0B24BB9491B6804
:100DE0000222D868FFF716FFAD4B1B78532B3FD17B
:100DF0003B682A6893421ED9AF4801322A609A1A8A
:100E0000B14B01681B6801310160B04E9A4201D2BA
:100E1000326000E03360A14832680068049000F05E
:100E2000E9FB336829685A182A60A34A1668F11842
:100E30001160A74A13702B68013B2B609E4B1A6808
:100E4000013A1A60A24BA04A1B7811688B420DD25E
:100E500022689248C91A006892699047002805D014
:100E6000924B08221A60924B64221A80C04696E187
:100E7000522B0ED18948944A2368006811685B6937
:100E800003909847934B802212055A616422924B3B
:100E90000DE04F2B05D1814B8B4A1B6812681A70ED
:100EA0007DE1482B05D17D4B874A1B6812681A806B
:100EB00075E1572B05D1794B834A1B6812681A607C
:100EC0006DE16F2B03D1754B0121186807E0682B8A
:100ED00008D1724B7C481B6802211B880360FFF716
:100EE000C1FE5CE1772B06D16C4B77481B6804216F
:100EF0001B680360F3E7472B13D1734B1868FFF7A8
:100F0000F1FE764B1B6883F3088862B6744B1B783E
:100F1000002B00D143E1634B06201B681B689847F8
:100F20003DE1542B04D1012333705E4B1B6864E018
:100F30004E2B0CD13378002B06D15A4B61491B68DC
:100F40000222D868FFF766FE0023337027E1562B94
:100F500057D123686349D8680122FFF75BFE2368F5
:100F60006149D8680322FFF755FE604D2368291CAC
:100F7000D8680122FFF74EFE23685D49D8680D222C
:100F8000FFF748FE2368291CD8680122FFF742FEBC
:100F9000494F4A4D5749002339602B603A1C281CA1
:100FA00013685E1C16601B780593002B03D0036842
:100FB00001330360F4E73B4E2A683368D868FFF7D3
:100FC00029FE33684949D8680122FFF723FE0599B5
:100FD000296049493960384A1368581C10601B78E9
:100FE000002B04D0354B1A6801321A60F3E73368DE
:100FF0002A68D868FFF70EFE3368D86831490222A4
:10100000CBE0314A582B17D1214E234D3668136857
:101010002A68B10093420AD21C4D5808E86137484B
:1010200028801A4D287DC607FBD55B18F2E71D4BBB
:1010300033491B68D868AFE0592B00D07DE01268B7
:10104000164B3049002A02D11B680B6070E00F4D2F
:10105000086819686B680D4E8025AB439208736071
:10106000002A65D0284B094D2B80084E337DDD07C3
:10107000FBD50023064D2D680195AD08AB4247D343
:10108000224D024E35804AE07016000000400041BB
:10109000440200203C020020380200208802002088
:1010A000340200208C0200204802002094440041B9
:1010B0008A0000202C020020300200204002002084
:1010C00088000020D0160000940200209802002022
:1010D00028020020004400418C00002090020020E3
:1010E00094000020AC160000D5160000AE160000DB
:1010F000F8160000B0160000BC16000002A5FFFFA5
:10110000C51600009000002044A5FFFF04A5FFFFC6
:101110009342B5D09D00465901334E51AAE7404E47
:10112000357DEE07FBD59D0049194019D21A97E786
:101130003C4B3D491B68D8682EE05A2B2FD13B4BC6
:1011400017681D680026EF19BD4206D02878311CAB
:1011500000F014F90135061CF6E7324B34491B68E0
:101160000122D868FFF756FD07230F223240111CD9
:1011700036093031092A00DD07311820C0186A46C7
:101180008154013BF1D2236806A9D8680822FFF7F1
:1011900041FD23682749D8680322FFF73BFD264B12
:1011A0007A221A70254B00221A60254B1B78934235
:1011B0002DD01C4B23491B680122D868FFF72AFD5C
:1011C00025E0111C3039C8B21C4B092804D81D6811
:1011D0002A01114319601AE0111C4139052903D86D
:1011E0001E68373A310106E0111C6139052904D81F
:1011F0001868573A01010A4308E02C2A03D10B4A28
:101200001968116001E00C490A7000221A600E4B47
:101210001A6801321A600D4B1A680132C9E5C046DE
:10122000004000418C020020C91600008802002006
:10123000CD160000CF1600003402002094020020DA
:1012400088000020D3160000400200203002002059
:1012500010B51C4B01201A78022402431A701A4B55
:101260000F22197891431970197821431970174981
:101270000C782043087019780A401A701A782021D7
:101280000A431A70124B04211A6A0A431A62114B5C
:10129000114A5A805A7852B2002AFBDBC4220F4806
:1012A0000F499203FEF730FF0E4A002313700E4AD7
:1012B00013700E4A13700E4A13700E4A13700E4AC2
:1012C000137010BD4A440041354400414B44004175
:1012D00000040040000C00401440000000080042E0
:1012E0002AF600009C020020230300209D0200201B
:1012F000A0020020240300202103002008B5C1B271
:101300000248FEF72FFF012008BDC046000800423A
:10131000024B187E4007C00F7047C04600080042CD
:1013200008B5FFF7F5FF0028FBD00248FEF720FFC5
:1013300008BDC0460008004208B5FFF7E9FF0023DA
:10134000984205D0FFF7ECFF031C233B5A42534160
:10135000181C08BD70B5041C0D1C4618B44204D0FE
:101360002078FFF7CBFF0134F8E7281C70BD10B5DB
:10137000041CFFF7D5FF2070012010BD0B0A584058
:10138000034B4000C05A0902484080B27047C04633
:1013900006170000F7B50024051C0F1C261CBC42D4
:1013A00020D0FFF7BDFF114BC0B21B780190002B7E
:1013B0001AD1311CFFF7E2FF0D4B061C1A88002AD8
:1013C00004D10C4A11782A1C002907D001996A1C03
:1013D0002970802F02D11988013919800134A4B2F3
:1013E000151CDCE7301C00E00120FEBD21030020BD
:1013F0009E02002022030020F0B53E4E85B0002260
:1014000003900C1C32703C4B914201D1012201E04F
:101410003A490C801A707F231C4201D080349C43CF
:10142000FFF77EFF3378C0B2002B07D00025357060
:10143000FFF776FF3378C0B2AB4236D1432803D0F2
:10144000712853D01528EBD1012300930120FFF719
:1014500055FF0098FFF752FF00998025C843C0B29E
:10146000FFF74CFF039B00270293244A1388002BAD
:101470001DD1214901930978002918D10198FFF75E
:101480003DFF391C0198FFF779FF013D071C002D36
:10149000EBD1000AC0B2FFF731FFF8B2FFF72EFF21
:1014A000FFF73EFF3378002B0AD035701FE002991A
:1014B000013B09781380029B019101330293DDE720
:1014C000C0B2062807D1009B03990133DBB28031FB
:1014D0000093803C0391002CB8D10420FFF70EFF4D
:1014E000FFF71EFF044B01251C7000E00025281C9F
:1014F00005B0F0BD21030020220300209E02002041
:10150000F0B5384C87B0002301902370994201D187
:10151000012301E0344A1180344A642613704320C9
:10152000FFF7ECFE324FFFF7F3FE002803D1002F48
:1015300003D0013FF7E7002F03D1013E002EEED18B
:101540004DE00125FFF7ECFE2378002B38D1C0B227
:101550000290012805D004283DD10620FFF7CEFED9
:1015600039E005AE0221301CFFF714FF01988021FD
:10157000FFF710FF23780390002B18D1FFF7D0FE60
:101580000702FFF7CDFEBFB223783F18BFB2012B91
:101590000DD0039B9F4207D13378AB4204D1EB437C
:1015A0007278DBB29A4204D01820FFF7A7FE00231E
:1015B00003E00620FFF7A2FE029B2278002A02D059
:1015C000002626700BE0012B05D1019A6B1C80329E
:1015D000DDB20192B6E7054A002313700126301CE4
:1015E00007B0F0BD210300209E020020220300204E
:1015F00000350C0010B50023934203D0CC5CC454DA
:101600000133F9E710BD031C8218934202D0197010
:101610000133FAE770470023C25C0133002AFBD193
:10162000581E7047F8B5C046F8BC08BC9E467047C7
:10163000F8B5C046F8BC08BC9E46704704030904D0
:1016400041726475696E6F204C4C43004172647541
:10165000696E6F205A65726F00000000120100026F
:101660000200004041234D00000201020001000081
:1016700008000000100000002000000040000000F2
:1016800080000000000100000002000000040000D3
:10169000FD1200002113000011130000551300007B
:1016A0006F130000F9130000011500007600200000
:1016B00041707220313120323031390031333A30CB
:1016C000393A343900580A0D00590A0D005A0023DE
:1016D0000A0D003E00322E30000000003D0B0000DD
:1016E000590B0000750B0000990B0000B50B0000B2
:1016F000990B0000DD0B00005B41726475696E6F31
:101700003A58595A5D00000021104220633084404D
:10171000A550C660E770088129914AA16BB18CC1C0
:10172000ADD1CEE1EFF13112100273325222B55237
:101730009442F772D662399318837BB35AA3BDD310
:101740009CC3FFF3DEE36224433420040114E66407
:10175000C774A44485546AA54BB528850995EEE560
:10176000CFF5ACC58DD55336722611163006D77617
:10177000F6669556B4465BB77AA719973887DFF7B0
:10178000FEE79DD7BCC7C448E5588668A7784008DF
:10179000611802282338CCC9EDD98EE9AFF9488900
:1017A00069990AA92BB9F55AD44AB77A966A711A77
:1017B000500A333A122AFDDBDCCBBFFB9EEB799B50
:1017C000588B3BBB1AABA66C877CE44CC55C222CC7
:1017D000033C600C411CAEED8FFDECCDCDDD2AADA0
:1017E0000BBD688D499D977EB66ED55EF44E133E57
:1017F000322E511E700E9FFFBEEFDDDFFCCF1BBFF0
:101800003AAF599F788F8891A981CAB1EBA10CD1C9
:101810002DC14EF16FE18010A100C230E3200450D1
:10182000254046706760B9839893FBA3DAB33DC344
:101830001CD37FE35EF3B1029012F322D232354221
:10184000145277625672EAB5CBA5A89589856EF5D4
:101850004FE52CD50DC5E234C324A0148104667471
:10186000476424540544DBA7FAB79987B8975FE724
:101870007EF71DC73CD7D326F2369106B0165766C1
:101880007676154634564CD96DC90EF92FE9C899AC
:10189000E9898AB9ABA94458654806782768C01811
:1018A000E1088238A3287DCB5CDB3FEB1EFBF98B84
:1018B000D89BBBAB9ABB754A545A376A167AF10A61
:1018C000D01AB32A923A2EFD0FED6CDD4DCDAABD94
:1018D0008BADE89DC98D267C076C645C454CA23CB1
:1018E000832CE01CC10C1FEF3EFF5DCF7CDF9BAF64
:1018F000BABFD98FF89F176E367E554E745E932E01
:0C190000B23ED10EF01E000000000000FE
:10190C0001140000090243000201008032090400A6
:10191C00000102020000052400100104240200054D
:10192C00240600010524010001070583030800FFBC
:10193C0009040100020A00000007058102400000B2
:10194C00070502024000000000C201000000080070
:0C195C00690000004100000000000000D5
:040000030000060DE6
:00000001FF

View file

@ -1,376 +0,0 @@
:10000000FC7F0020E9050000D5050000D9050000AF
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000F81600005C000020540000200000000062
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
:1000D0001C42F7D1084B1A430260C3695A07FCD48B
:1000E000C0239B0243608181C3699C07FCD40368E1
:1000F00002221343036010BD04000040037EDA07B0
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0467400002070B50368041C988B9B
:100140001A1C0821FF32084228D0988B174D014312
:10015000802099839872112353704021144B917120
:1001600050715E68C0202E40800506435E605E6967
:100170003540284358610F4818600F4818615D6882
:100180000E4828408025AD02284358605868800BEF
:100190008003586000235171237105E0137ADA0659
:1001A00002D5201C00F0A0FA207970BDFFFFFF8F60
:1001B0008C0100208C0000200C010020FF3F00F08B
:1001C000002303714371044B016083600B780222AA
:1001D00013430B707047C0463901000038B5364BE9
:1001E0002021DA6901200A43DA61344B06241A78A7
:1001F00002431A70324B0F22197891431970197803
:10020000214319702F490C782043087019780A404F
:100210001A701A7860210A431A702B4B2B4A5A80A5
:100220005A7852B2002AFBDB294B01211A780A4383
:100230001A709A78D107FCD426480268510B1F2205
:100240001140914200D1052111408C011D8D2249A0
:100250002940214319850468A10C0A401F2A00D1B6
:100260001D221C8D1F210A408C4322431A850268DF
:100270000721D20D0A408A4200D103220A40188D7C
:100280001103164A02400A431A8519787F220A4050
:100290001A701A78042112480A431A7058621A898F
:1002A0000C218A431A811A8901218A431A8100216B
:1002B000802201F0B6F838BD0004004058440041E7
:1002C0003C44004159440041000C004006400000FD
:1002D00000500041246080003FF8FFFFFF8FFFFFC8
:1002E0008C010020F7B5141C234A5F0101971D1CE7
:1002F000D319061C5869271C4000400F03301033E7
:10030000C74006D00F1C8022596812060A435A6063
:1003100009E02F1C7B1E9F41184BBF01FF18381CA2
:10032000221C01F075F8019913480835421817612D
:10033000131C5269A104920B890C92030A435A615F
:1003400059690F4A02200A405A616B01F318D979A2
:10035000032211400143D8799043021C0A43DA7109
:100360005979802252420A435A716B01F318DB79A2
:100370009A07FAD5201CFEBD8C0100200C0100203C
:10038000FF3F00F0F8B51E4E041C3378151C002BFF
:1003900012D11C4B1C4A1A645A6C920B92035A6479
:1003A000586C1A4A02405A64A2235B00E25C402067
:1003B0000243E254012333704827FF37E25D0123F3
:1003C00013401AD00F4B5A6C9204920CAA4202D2DC
:1003D0005D6CAD04AD0C081C2A1C0B4901F018F82B
:1003E000E25D03231A4001210A43E15D99430B1C9E
:1003F0001343E3550023337000E01D1C281CF8BD97
:10040000750000208C010020CC000020FF3F00F090
:10041000FF30827930239A43131C2022002900D117
:1004200010221343837170470C4BFF305A6902212D
:10043000920B92035A61027A03231A400A43017A0B
:1004400099430B1C13430372827980235B4213434D
:100450008371037A9A07FCD57047C0468C0100204F
:1004600080235B421943C9B28172704770B5A023E3
:1004700003225B00C254134B134A5C6CC02114402E
:1004800089050C4346255C64FF35402444550F4DD7
:1004900030261D6490256D0046555D6B154029433F
:1004A000922559636D0080214155094D1D63B0258A
:1004B0006D0044555C6F22405A67B2235B00C15403
:1004C00070BDC0468C010020FFFFFF8FCC000020D4
:1004D0004C01002030B5364A1E235168082099434C
:1004E00002231943516033498A6902438A613248C1
:1004F000324A9082908A03439382D3689807FCD54E
:100500002F4B012018701878C40704D52C48407868
:1005100040B20028F7DB01209860587840B20028EC
:10052000FBDB284C26484460587840B20028FBDBAF
:1005300082242348E4014480587840B20028FBDB41
:10054000908C8024A0439084D068C506FCD51E4CB6
:100550001A48C462D4681948E506FBD5848C1B4D43
:100560002C438484D4681548E506FBD5848C022589
:100570002C438484D0680406FCD51048C068450626
:10058000F8D5D068C406FCD500229A605A7852B2D9
:10059000002AFBDB0E480A4A50605A7852B2002A01
:1005A000FBDB00230B724B728B72CB7230BDC046EB
:1005B00000400041000400400C060000000800401C
:1005C000000C004001050100B805FF7D040A000091
:1005D000000703000EBEFEE70DBEFEE705BEFEE708
:1005E00002BEFEE701BEFEE70E4A0F4838B5824262
:1005F00004D10E4A0E4B93420ED10AE00D4C9442A8
:10060000F7D00023D1188842F3D9E55804330D60A0
:10061000F8E700F011F804E09342FAD2002102C397
:10062000FAE7FEE7000000205800002098030020B1
:1006300058000020FC16000010B5244B0022197849
:1006400001231940224B0AD11868224A904201D155
:10065000196014E01A60204A013A002AFCD11A609D
:100660001E4B1968181C4A1C09D0FF22134206D1E0
:1006700081F3088893431A4A936043681847FFF749
:1006800029FF62B600F0F2FC00F0C8F9041CA36870
:10069000201C9847134B002801D001221A701A78A9
:1006A000002A05D0002000F035FA00F091FAFCE7AE
:1006B0001B78002BEBD100F04DFD0028E7D0012086
:1006C00000F028FA00F084FAFCE7C0463804004045
:1006D000FC7F00203581730748E8010000200000FE
:1006E00000ED00E076000020F8B50468051C201C31
:1006F000FF30037AB64A10210B430372B54F1378CB
:10070000B5493B705378B54E0B7093783380D178F0
:10071000338809020B4333801179B14B1980517929
:100720001F8809020F431F809779AE490F80D27945
:100730000F8812023A430A8040224271A648A54F10
:1007400002783878A84F12020243181CBA4200D12E
:1007500099E01EDC802149008A4200D158E107DC83
:10076000812A6AD0822A6ED0802A00D050E164E0CB
:1007700081235B009A4200D1AFE000DA23E1C0237D
:100780009B009A4200D143E1984B9A4200D11AE172
:100790003EE190231B019A4242D015DCD023DB00BE
:1007A0009A4222D088231B019A4242D0A023DB0028
:1007B0009A4200D02CE1201CFFF736FE31882868D1
:1007C00089B2FFF74DFE27E1894B9A4200D1FAE04A
:1007D00000DC1DE1874B9A4200D1E8E0864B9A424B
:1007E00000D015E133886B71EDE033881B0A012BD3
:1007F00008D10B8812222868934201D80A8892B245
:100800007E49DCE033881B0A022B00D000E10B8814
:1008100043222868934201D80A8892B27849CEE0F0
:100820003388201C2B71FFF7FFFD201CFFF71EFEF5
:10083000F2E0291C01C90122C1E0724900230B80AA
:1008400028680222BCE06F4900220A8018885022E2
:1008500010406D4A10701E880F2030401880188894
:10086000032800D9D4E012781B8808335B01E41810
:10087000A379002A01D09B0600E0DB06DB0F0B808A
:10088000286802229BE019887F2291435E4AC9B200
:10089000117018880F21014019803188002900D07B
:1008A000B6E01988002900D1B2E01988032900D9DF
:1008B000AEE012781B8808335B01E318002A05D0EC
:1008C0005A7930218A4320210A4304E05A793021A1
:1008D0008A43102002435A7175E002887F239A43AD
:1008E000494BD2B21A7001880F220A400280328826
:1008F000002A00D08CE00288002A00D188E002881B
:10090000032A00D984E01B78002B27D00388083302
:100910005B01E3189B79990655D50388302108338C
:100920005B01E3181A798A4320210A431A7103886C
:1009300008335B01E318DB795A0644D5038860214C
:1009400008335B01E318DA798A4340210A43DA71FC
:100950000388022208335B01E31826E0038808338A
:100960005B01E3189B79DF062DD50388302108331E
:100970005B01E3181A798A4310210A431A7103882C
:1009800008335B01E318DB7999061CD503886021E5
:1009900008335B01E318DA798A4320210A43DA71CC
:1009A0000388012208335B01E3181A710BE00B88FE
:1009B00008222868934201D80A8892B2134900237A
:1009C000FFF790FC28E0201CFFF72EFD24E0C04636
:1009D0008C0000208100002077000020780000209B
:1009E0007C0000207E0000200203000001030000C4
:1009F00021200000A1210000212200004C14000051
:100A0000000000207A000020800000204400002028
:100A1000201C0121FFF7FCFCF8BDC04610B5054BBA
:100A2000054C2360FFF7DAFB201C2168FFF7C8FBA9
:100A3000201C10BD005000410C02002007B5054BE2
:100A40000122019001A91868131CFFF74BFC01203B
:100A50000EBDC0460C02002013B5054B6C46073492
:100A60001868211C0122FFF78DFC207816BDC046B6
:100A70000C02002010B5074C201CFFF75DFB031C87
:100A80000020834205D022684823FF33D05C012335
:100A9000184010BD0C02002010B5054A0C1C031CA8
:100AA000191C10680123221CFFF71CFC201C10BD20
:100AB0000C02002070B5084C061C201C0D1CFFF712
:100AC0003BFB0023984205D02068311C2A1CFFF70D
:100AD00059FC031C181C70BD0C020020F8B50C4C0E
:100AE000051C201C0E1CFFF727FB0023271C341CB1
:100AF00098420AD0002C07D0291C221C3868FFF726
:100B000041FC241A2D18F5E7331C181CF8BDC0460B
:100B10000C020020012805D1054B064A1A60064B3D
:100B2000187004E0002802D1044A014B1A60704793
:100B30007C0200208014000089000020CC140000FA
:100B400030B51A4B85B01B78002B29D0042901D170
:100B5000026804E0022901D1028800E0027849001D
:100B600004A843180B3B5C1AA3420BD00F20104083
:100B7000092802D83025284300E0373018701209C0
:100B8000013BF1E701A830230370782343700A2268
:100B900043189A700D22DA70054B04311B6801E08E
:100BA000034B1B68DB68984705B030BD8800002008
:100BB0007C02002072B6EFF30883044A13600368D6
:100BC00083F30888436818477047C04680020020B6
:100BD000F0B58FB006A9CD4A0B1C31CA31C351CA3A
:100BE00051C360CA60C3CA4CCA48A3687A255B0374
:100BF0005B0F9B005B58C8490360A26892B25343E5
:100C00000A60C649C64A0B6000231360C54B1D70BD
:100C1000C54BC64D1B68281C1B6940219847C44B17
:100C200000221860C34B1D60C34BC34DC04F1A60F8
:100C3000286839688842EBD2BE4B1B681A78FF2AB5
:100C400000D1F7E1232A00D0CEE1BC4E3378002B4F
:100C500005D0B54BBA481B680221DB689847B14BF9
:100C60001B78532B38D13B682A6893421ED9B14870
:100C700001322A609A1AB34B01681B680131016086
:100C8000B14E9A4201D2326000E03360A44832682B
:100C90000068029000F0BCFB336829685A182A608B
:100CA000A44A1668F1181160A84A13702B68013B1A
:100CB0002B60A04B1A68013A1A60A44BA14A1B781A
:100CC00011688B4206D2984A954812680068C91A82
:100CD00092699047C04676E1522B07D1904A924BD9
:100CE00010681B68974A5B6911686BE14F2B05D14F
:100CF0008B4B944A1B6812681A7064E1482B05D12B
:100D0000874B904A1B6812681A805CE1572B05D10B
:100D1000834B8C4A1B6812681A6054E16F2B03D115
:100D20007F4B0121186807E0682B08D17C4B854870
:100D30001B6802211B880360FFF702FF43E1772B4A
:100D400006D1774B7F481B6804211B680360F3E7DB
:100D5000472B13D17B4B1868FFF72CFF7C4B1B688C
:100D600083F3088862B67B4B1B78002B00D12AE105
:100D70006D4B06201B681B68984724E1542B04D157
:100D800001233370684B1B685CE04E2B0BD133782A
:100D9000002B05D1644B6A481B680221DB68984729
:100DA000002333700FE1562B50D15F4D01212B688A
:100DB0006948DB6898472B680321DB6867489847D8
:100DC000674E2B68301CDB68012198472B680D218A
:100DD000DB68644898472B68301CDB680121984722
:100DE000544F614B544E3B60002333603A1C311C1E
:100DF0001368581C10601B780393002B03D00B68FA
:100E000001330B60F4E72B683168DB68564898477C
:100E10002B685348DB68012198470398306053489A
:100E20003860444A1368591C11601A78424B002AF2
:100E300003D01A6801321A60F3E72A681968D36888
:100E400098472B68DB683E480221BBE03D4A582B9F
:100E500015D1304E314D366813682A68B10093427F
:100E600008D25808E06142482080207DC507FCD5A3
:100E70005B18F4E72C4B3F481B68DB68A1E0592B5B
:100E800033D11268264B3C49002A02D11B680B6003
:100E900026E00868196863688025AB4392086360A0
:100EA000002A1DD0354B2380237DDE07FCD500238F
:100EB000184D2D680095AD08AB4202D3304D25800A
:100EC00006E09342FAD09D00465901334E51EFE7B8
:100ED000257DEE07FCD59D0049194019D21ADFE7A0
:100EE000114B28481B68DB686BE05A2B6BD10C4B0D
:100EF00017681D680026EF19BD4245D02878311CBF
:100F000000F04AF90135061CF6E7C04660140000FF
:100F100000400041340200202C0200202802002062
:100F200078020020240200207C02002038020020E9
:100F30001C02002020020020300200208800002037
:100F4000C014000084020020880200201802002043
:100F500080020020890000209C140000C5140000BD
:100F60009E140000E8140000A0140000AC1400005F
:100F700002A5FFFFB51400008400002044A5FFFF78
:100F800004A5FFFFB91400002E4D2F482B68012146
:100F9000DB68984707230F223240111C3609303195
:100FA000092A00DD07311020C0186A468154013B30
:100FB000F1D22B6804A8DB68082198472B682348E6
:100FC000DB6803219847224D7A232B70214B0022A6
:100FD0001A60214B1B7893422CD01A4B01211B68BD
:100FE0001E48DB68984725E0111C3039C8B2194B00
:100FF000092804D81E683201114319601AE0111C37
:101000004139052903D81868373A010106E0111C57
:101010006139052904D81D68573A29010A4308E0B7
:101020002C2A03D10E4A1E68166001E008490A7096
:1010300000221A600B4B1A6801321A600A4B1A68B8
:101040000132F2E57C020020BD140000BF14000054
:10105000240200208402002088000020C314000025
:1010600078020020300200202002002010B51C4B26
:1010700001201A78022402431A701A4B0F221978A1
:101080009143197019782143197017490C7820433E
:10109000087019780A401A701A7820210A431A70C9
:1010A000124B04211A6A0A431A62114B114A5A80E0
:1010B0005A7852B2002AFBDBC4220F480F49920330
:1010C000FEF7EEFF0E4A002313700E4A13700E4A0D
:1010D00013700E4A13700E4A13700E4A137010BD2F
:1010E0004A440041354400414B4400410004004063
:1010F000000C0040144000000008004204C500003D
:101100008C020020130300208D020020900200209A
:10111000140300201103002008B5C1B20248FEF7F5
:10112000EDFF012008BDC04600080042024B187EBA
:101130004007C00F7047C0460008004208B5FFF7DF
:10114000F5FF0028FBD00248FEF7DEFF08BDC046D1
:101150000008004208B5FFF7E9FF0023984205D0D8
:10116000FFF7ECFF031C233B5A425341181C08BDF8
:1011700070B5041C0D1C4618B44204D02078FFF74B
:10118000CBFF0134F8E7281C70BD10B5041CFFF735
:10119000D5FF2070012010BD0B0A5840034B4000C2
:1011A000C05A0902484080B27047C046F614000099
:1011B000F7B50024051C0F1C261CBC4220D0FFF7ED
:1011C000BDFF114BC0B21B780190002B1AD1311C0E
:1011D000FFF7E2FF0D4B061C1A88002A04D10C4AC7
:1011E00011782A1C002907D001996A1C2970802FC8
:1011F00002D11988013919800134A4B2151CDCE729
:10120000301C00E00120FEBD110300208E020020F2
:1012100012030020F0B53E4E85B0002203900C1C56
:1012200032703C4B914201D1012201E03A490C80DD
:101230001A707F231C4201D080349C43FFF77EFF4D
:101240003378C0B2002B07D000253570FFF776FF4A
:101250003378C0B2AB4236D1432803D0712853D083
:101260001528EBD1012300930120FFF755FF0098CB
:10127000FFF752FF00998025C843C0B2FFF74CFF2B
:10128000039B00270293244A1388002B1DD1214978
:1012900001930978002918D10198FFF73DFF391C07
:1012A0000198FFF779FF013D071C002DEBD1000AE3
:1012B000C0B2FFF731FFF8B2FFF72EFFFFF73EFF96
:1012C0003378002B0AD035701FE00299013B097872
:1012D0001380029B019101330293DDE7C0B206281F
:1012E00007D1009B03990133DBB280310093803C2E
:1012F0000391002CB8D10420FFF70EFFFFF71EFF6B
:10130000044B01251C7000E00025281C05B0F0BD31
:1013100011030020120300208E020020F0B5384C8B
:1013200087B0002301902370994201D1012301E08D
:10133000344A1180344A642613704320FFF7ECFED0
:10134000324FFFF7F3FE002803D1002F03D0013FF7
:10135000F7E7002F03D1013E002EEED14DE001252D
:10136000FFF7ECFE2378002B38D1C0B202900128A1
:1013700005D004283DD10620FFF7CEFE39E005AEAA
:101380000221301CFFF714FF01988021FFF710FFA6
:1013900023780390002B18D1FFF7D0FE0702FFF748
:1013A000CDFEBFB223783F18BFB2012B0DD0039BF7
:1013B0009F4207D13378AB4204D1EB437278DBB262
:1013C0009A4204D01820FFF7A7FE002303E006206E
:1013D000FFF7A2FE029B2278002A02D00026267088
:1013E0000BE0012B05D1019A6B1C8032DDB201921A
:1013F000B6E7054A002313700126301C07B0F0BD84
:10140000110300208E0200201203002000350C0082
:1014100010B50023934203D0CC5CC4540133F9E7E8
:1014200010BD031C8218934202D019700133FAE7F1
:1014300070470000F8B5C046F8BC08BC9E4670472F
:10144000F8B5C046F8BC08BC9E46704712010002C1
:101450000200004041234D02000200000001000094
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004E6F7620313220323031350031373A32CA
:1014B000323A323800580A0D00590A0D005A0023FA
:1014C0000A0D003E00322E30000000003D0A0000F0
:1014D000590A0000750A0000990A0000B50A0000C8
:1014E000990A0000DD0A00005B41726475696E6F45
:1014F0003A58595A5D000000211042206330844060
:10150000A550C660E770088129914AA16BB18CC1D2
:10151000ADD1CEE1EFF13112100273325222B55249
:101520009442F772D662399318837BB35AA3BDD322
:101530009CC3FFF3DEE36224433420040114E66419
:10154000C774A44485546AA54BB528850995EEE572
:10155000CFF5ACC58DD55336722611163006D77629
:10156000F6669556B4465BB77AA719973887DFF7C2
:10157000FEE79DD7BCC7C448E5588668A7784008F1
:10158000611802282338CCC9EDD98EE9AFF9488912
:1015900069990AA92BB9F55AD44AB77A966A711A89
:1015A000500A333A122AFDDBDCCBBFFB9EEB799B62
:1015B000588B3BBB1AABA66C877CE44CC55C222CD9
:1015C000033C600C411CAEED8FFDECCDCDDD2AADB2
:1015D0000BBD688D499D977EB66ED55EF44E133E69
:1015E000322E511E700E9FFFBEEFDDDFFCCF1BBF02
:1015F0003AAF599F788F8891A981CAB1EBA10CD1DC
:101600002DC14EF16FE18010A100C230E3200450E3
:10161000254046706760B9839893FBA3DAB33DC356
:101620001CD37FE35EF3B1029012F322D232354233
:10163000145277625672EAB5CBA5A89589856EF5E6
:101640004FE52CD50DC5E234C324A0148104667483
:10165000476424540544DBA7FAB79987B8975FE736
:101660007EF71DC73CD7D326F2369106B0165766D3
:101670007676154634564CD96DC90EF92FE9C899BE
:10168000E9898AB9ABA94458654806782768C01823
:10169000E1088238A3287DCB5CDB3FEB1EFBF98B96
:1016A000D89BBBAB9ABB754A545A376A167AF10A73
:1016B000D01AB32A923A2EFD0FED6CDD4DCDAABDA6
:1016C0008BADE89DC98D267C076C645C454CA23CC3
:1016D000832CE01CC10C1FEF3EFF5DCF7CDF9BAF76
:1016E000BABFD98FF89F176E367E554E745E932E13
:0C16F000B23ED10EF01E00000000000011
:1016FC0009024300020100803209040000010202C9
:10170C000000052400100104240200052406000139
:10171C000524010001070583030800FF09040100EB
:10172C00020A0000000705810240000007050202C2
:10173C004000000000C20100000008006900000029
:08174C00410000000000000054
:04000003000005E90B
:00000001FF

View file

@ -0,0 +1,148 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2018, hathach for Adafruit
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifdef USE_TINYUSB
#include "Arduino.h"
#include "Adafruit_TinyUSB_Core.h"
#include <Reset.h> // Needed for auto-reset with 1200bps port touch
//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
// Init usb hardware when starting up. Softdevice is not enabled yet
static void usb_hardware_init(void)
{
#ifdef PIN_LED_TXL
// txLEDPulse = 0;
pinMode(PIN_LED_TXL, OUTPUT);
digitalWrite(PIN_LED_TXL, HIGH);
#endif
#ifdef PIN_LED_RXL
// rxLEDPulse = 0;
pinMode(PIN_LED_RXL, OUTPUT);
digitalWrite(PIN_LED_RXL, HIGH);
#endif
/* Enable USB clock */
#if defined(__SAMD51__)
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB;
// Set up the USB DP/DN pins
PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u)));
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u));
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
#else
PM->APBBMASK.reg |= PM_APBBMASK_USB;
// Set up the USB DP/DN pins
PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u)));
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u));
PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u)));
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u));
// Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6
GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source
GCLK_CLKCTRL_CLKEN;
while (GCLK->STATUS.bit.SYNCBUSY)
;
#endif
}
uint8_t load_serial_number(uint16_t* serial_str)
{
enum { SERIAL_BYTE_LEN = 16 };
#ifdef __SAMD51__
uint32_t* id_addresses[4] = {(uint32_t *) 0x008061FC, (uint32_t *) 0x00806010,
(uint32_t *) 0x00806014, (uint32_t *) 0x00806018};
#else // samd21
uint32_t* id_addresses[4] = {(uint32_t *) 0x0080A00C, (uint32_t *) 0x0080A040,
(uint32_t *) 0x0080A044, (uint32_t *) 0x0080A048};
#endif
uint8_t raw_id[SERIAL_BYTE_LEN];
for (int i=0; i<4; i++) {
for (int k=0; k<4; k++) {
raw_id[4 * i + (3 - k)] = (*(id_addresses[i]) >> k * 8) & 0xff;
}
}
static const char nibble_to_hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
for (unsigned int i = 0; i < sizeof(raw_id); i++) {
for (int j = 0; j < 2; j++) {
uint8_t nibble = (raw_id[i] >> (j * 4)) & 0xf;
// Strings are UTF-16-LE encoded.
serial_str[i * 2 + (1 - j)] = nibble_to_hex[nibble];
}
}
return sizeof(raw_id)*2;
}
void Adafruit_TinyUSB_Core_init(void)
{
USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial);
USBDevice.setID(USB_VID, USB_PID);
USBDevice.begin();
usb_hardware_init();
// Init tinyusb stack
tusb_init();
}
void Adafruit_TinyUSB_Core_touch1200(void)
{
initiateReset(250);
}
extern "C"
{
void yield(void)
{
tud_task();
tud_cdc_write_flush();
}
}
#endif // USE_TINYUSB

View file

@ -0,0 +1,45 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef ADAFRUIT_TINYUSB_CORE_H_
#define ADAFRUIT_TINYUSB_CORE_H_
#ifndef USE_TINYUSB
#error TinyUSB is not selected, please select it in Tools->Menu->USB Stack
#endif
#include "tusb.h"
#ifdef __cplusplus
#include "Adafruit_USBD_Device.h"
#include "Adafruit_USBD_CDC.h"
#endif
// Called by main.cpp to initialize usb device typically with CDC device for Serial
void Adafruit_TinyUSB_Core_init(void);
// Invoked when host disconnects cdc at baud 1200, usually touch feature to go into DFU mode
void Adafruit_TinyUSB_Core_touch1200(void);
#endif /* ADAFRUIT_TINYUSB_CORE_H_ */

View file

@ -0,0 +1,156 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifdef USE_TINYUSB
#include "Arduino.h"
#include "Adafruit_USBD_CDC.h"
#define EPOUT 0x00
#define EPIN 0x80
Adafruit_USBD_CDC Serial;
Adafruit_USBD_CDC::Adafruit_USBD_CDC(void)
{
}
uint16_t Adafruit_USBD_CDC::getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize)
{
// CDC is mostly always existed for DFU
// usb core will automatically update endpoint number
uint8_t desc[] = { TUD_CDC_DESCRIPTOR(itfnum, 0, EPIN, 8, EPOUT, EPIN, 64) };
uint16_t const len = sizeof(desc);
if ( bufsize < len ) return 0;
memcpy(buf, desc, len);
return len;
}
// Baud and config is ignore in CDC
void Adafruit_USBD_CDC::begin (uint32_t baud)
{
(void) baud;
}
void Adafruit_USBD_CDC::begin (uint32_t baud, uint8_t config)
{
(void) baud;
(void) config;
}
void Adafruit_USBD_CDC::end(void)
{
// nothing to do
}
Adafruit_USBD_CDC::operator bool()
{
bool ret = tud_cdc_connected();
// Add an yield to run usb background in case sketch block wait as follows
// while( !Serial ) {}
if ( !ret ) yield();
return ret;
}
int Adafruit_USBD_CDC::available(void)
{
uint32_t count = tud_cdc_available();
// Add an yield to run usb background in case sketch block wait as follows
// while( !Serial.available() ) {}
if (!count) yield();
return count;
}
int Adafruit_USBD_CDC::peek(void)
{
uint8_t ch;
return tud_cdc_peek(0, &ch) ? (int) ch : -1;
}
int Adafruit_USBD_CDC::read(void)
{
return (int) tud_cdc_read_char();
}
void Adafruit_USBD_CDC::flush(void)
{
tud_cdc_write_flush();
}
size_t Adafruit_USBD_CDC::write(uint8_t ch)
{
return write(&ch, 1);
}
size_t Adafruit_USBD_CDC::write(const uint8_t *buffer, size_t size)
{
size_t remain = size;
while ( remain && tud_cdc_connected() )
{
size_t wrcount = tud_cdc_write(buffer, remain);
remain -= wrcount;
buffer += wrcount;
// Write FIFO is full, run usb background to flush
if ( remain ) yield();
}
return size - remain;
}
int Adafruit_USBD_CDC::availableForWrite(void)
{
return tud_cdc_write_available();
}
extern "C"
{
// Invoked when cdc when line state changed e.g connected/disconnected
// Use to reset to DFU when disconnect with 1200 bps
void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
{
(void) itf; // interface ID, not used
(void) rts;
// DTR = false is counted as disconnected
if ( !dtr )
{
cdc_line_coding_t coding;
tud_cdc_get_line_coding(&coding);
if ( coding.bit_rate == 1200 ) Adafruit_TinyUSB_Core_touch1200();
}
}
}
#endif // USE_TINYUSB

View file

@ -0,0 +1,60 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef ADAFRUIT_USBD_CDC_H_
#define ADAFRUIT_USBD_CDC_H_
#include "Adafruit_USBD_Device.h"
#include "Stream.h"
class Adafruit_USBD_CDC : public Stream, Adafruit_USBD_Interface
{
public:
Adafruit_USBD_CDC(void);
// fron Adafruit_USBD_Interface
virtual uint16_t getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize);
void setPins(uint8_t pin_rx, uint8_t pin_tx) { (void) pin_rx; (void) pin_tx; }
void begin(uint32_t baud_count);
void begin(uint32_t baud, uint8_t config);
void end(void);
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
virtual size_t write(const uint8_t *buffer, size_t size);
size_t write(const char *buffer, size_t size) {
return write((const uint8_t *)buffer, size);
}
virtual int availableForWrite(void);
operator bool();
};
extern Adafruit_USBD_CDC Serial;
#endif /* ADAFRUIT_USBD_CDC_H_ */

View file

@ -0,0 +1,318 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifdef USE_TINYUSB
#include "Adafruit_USBD_Device.h"
#ifndef USB_MANUFACTURER
#define USB_MANUFACTURER "Unknown"
#endif
#ifndef USB_PRODUCT
#define USB_PRODUCT "Unknown"
#endif
#ifndef USB_LANGUAGE
#define USB_LANGUAGE 0x0409 // default is English
#endif
#ifndef USB_CONFIG_POWER
#define USB_CONFIG_POWER 100
#endif
extern uint8_t load_serial_number(uint16_t* serial_str);
Adafruit_USBD_Device USBDevice;
Adafruit_USBD_Device::Adafruit_USBD_Device(void)
{
tusb_desc_device_t const desc_dev =
{
.bLength = sizeof(tusb_desc_device_t),
.bDescriptorType = TUSB_DESC_DEVICE,
.bcdUSB = 0x0200,
// Use Interface Association Descriptor (IAD) for CDC
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
.bDeviceClass = TUSB_CLASS_MISC,
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
.bDeviceProtocol = MISC_PROTOCOL_IAD,
.bMaxPacketSize0 = CFG_TUD_ENDOINT0_SIZE,
.idVendor = 0,
.idProduct = 0,
.bcdDevice = 0x0100,
.iManufacturer = 0x01,
.iProduct = 0x02,
.iSerialNumber = 0x03,
.bNumConfigurations = 0x01
};
_desc_device = desc_dev;
tusb_desc_configuration_t const dev_cfg =
{
.bLength = sizeof(tusb_desc_configuration_t),
.bDescriptorType = TUSB_DESC_CONFIGURATION,
// Total Length & Interface Number will be updated later
.wTotalLength = 0,
.bNumInterfaces = 0,
.bConfigurationValue = 1,
.iConfiguration = 0x00,
.bmAttributes = TU_BIT(7) | TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP,
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA(USB_CONFIG_POWER)
};
memcpy(_desc_cfg_buffer, &dev_cfg, sizeof(tusb_desc_configuration_t));
_desc_cfg = _desc_cfg_buffer;
_desc_cfg_size = sizeof(_desc_cfg_buffer);
_desc_cfglen = sizeof(tusb_desc_configuration_t);
_itf_count = 0;
_epin_count = _epout_count = 1;
_language_id = USB_LANGUAGE;
_manufacturer = USB_MANUFACTURER;
_product = USB_PRODUCT;
}
// Add interface descriptor
// - Interface number will be updated to match current count
// - Endpoint number is updated to be unique
bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
{
uint8_t* desc = _desc_cfg+_desc_cfglen;
uint16_t const len = itf.getDescriptor(_itf_count, desc, _desc_cfg_size-_desc_cfglen);
uint8_t* desc_end = desc+len;
if ( !len ) return false;
while (desc < desc_end)
{
if (desc[1] == TUSB_DESC_INTERFACE)
{
tusb_desc_interface_t* desc_itf = (tusb_desc_interface_t*) desc;
if (desc_itf->bAlternateSetting == 0) _itf_count++;
}else if (desc[1] == TUSB_DESC_ENDPOINT)
{
tusb_desc_endpoint_t* desc_ep = (tusb_desc_endpoint_t*) desc;
desc_ep->bEndpointAddress |= (desc_ep->bEndpointAddress & 0x80) ? _epin_count++ : _epout_count++;
}
if (desc[0] == 0) return false;
desc += desc[0]; // next
}
_desc_cfglen += len;
// Update configuration descriptor
tusb_desc_configuration_t* config = (tusb_desc_configuration_t*)_desc_cfg;
config->wTotalLength = _desc_cfglen;
config->bNumInterfaces = _itf_count;
return true;
}
void Adafruit_USBD_Device::setDescriptorBuffer(uint8_t* buf, uint32_t buflen)
{
if (buflen < _desc_cfg_size)
return;
memcpy(buf, _desc_cfg, _desc_cfglen);
_desc_cfg = buf;
_desc_cfg_size = buflen;
}
void Adafruit_USBD_Device::setID(uint16_t vid, uint16_t pid)
{
_desc_device.idVendor = vid;
_desc_device.idProduct = pid;
}
void Adafruit_USBD_Device::setVersion(uint16_t bcd)
{
_desc_device.bcdUSB = bcd;
}
void Adafruit_USBD_Device::setLanguageDescriptor (uint16_t language_id)
{
_language_id = language_id;
}
void Adafruit_USBD_Device::setManufacturerDescriptor(const char *s)
{
_manufacturer = s;
}
void Adafruit_USBD_Device::setProductDescriptor(const char *s)
{
_product = s;
}
bool Adafruit_USBD_Device::begin(void)
{
return true;
}
extern "C"
{
// Invoked when received GET DEVICE DESCRIPTOR
// Application return pointer to descriptor
uint8_t const * tud_descriptor_device_cb(void)
{
return (uint8_t const *) &USBDevice._desc_device;
}
// Invoked when received GET CONFIGURATION DESCRIPTOR
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
{
(void) index; // for multiple configurations
return USBDevice._desc_cfg;
}
static int utf8_to_unichar(const char *str8, int *unicharp)
{
int unichar;
int len;
if (str8[0] < 0x80)
len = 1;
else if ((str8[0] & 0xe0) == 0xc0)
len = 2;
else if ((str8[0] & 0xf0) == 0xe0)
len = 3;
else if ((str8[0] & 0xf8) == 0xf0)
len = 4;
else if ((str8[0] & 0xfc) == 0xf8)
len = 5;
else if ((str8[0] & 0xfe) == 0xfc)
len = 6;
else
return -1;
switch (len) {
case 1:
unichar = str8[0];
break;
case 2:
unichar = str8[0] & 0x1f;
break;
case 3:
unichar = str8[0] & 0x0f;
break;
case 4:
unichar = str8[0] & 0x07;
break;
case 5:
unichar = str8[0] & 0x03;
break;
case 6:
unichar = str8[0] & 0x01;
break;
}
for (int i = 1; i < len; i++) {
if ((str8[i] & 0xc0) != 0x80)
return -1;
unichar <<= 6;
unichar |= str8[i] & 0x3f;
}
*unicharp = unichar;
return len;
}
// Simple UCS-2/16-bit coversion, which handles the Basic Multilingual Plane
static int strcpy_uni16(const char *s, uint16_t *buf, int bufsize) {
int i = 0;
int buflen = 0;
while (i < bufsize) {
int unichar;
int utf8len = utf8_to_unichar(s + i, &unichar);
if (utf8len < 0) {
// Invalid utf8 sequence, skip it
i++;
continue;
}
i += utf8len;
// If the codepoint is larger than 16 bit, skip it
if (unichar <= 0xffff)
buf[buflen++] = unichar;
}
buf[buflen] = '\0';
return buflen;
}
// up to 32 unicode characters (header make it 33)
static uint16_t _desc_str[33];
// Invoked when received GET STRING DESCRIPTOR request
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
uint16_t const* tud_descriptor_string_cb(uint8_t index)
{
uint8_t chr_count;
switch (index)
{
case 0:
_desc_str[1] = USBDevice.getLanguageDescriptor();
chr_count = 1;
break;
case 1:
chr_count = strcpy_uni16(USBDevice.getManufacturerDescriptor(), _desc_str + 1, 32);
break;
case 2:
chr_count = strcpy_uni16(USBDevice.getProductDescriptor(), _desc_str + 1, 32);
break;
case 3:
// serial Number
chr_count = load_serial_number(_desc_str+1);
break;
default: return NULL;
}
// first byte is length (including header), second byte is string type
_desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2);
return _desc_str;
}
} // extern C
#endif // USE_TINYUSB

View file

@ -0,0 +1,85 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef ADAFRUIT_USBD_DEVICE_H_
#define ADAFRUIT_USBD_DEVICE_H_
#include "tusb.h"
class Adafruit_USBD_Interface
{
public:
virtual uint16_t getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize) = 0;
};
class Adafruit_USBD_Device
{
private:
tusb_desc_device_t _desc_device;
uint8_t *_desc_cfg;
uint16_t _desc_cfg_size;
uint16_t _desc_cfglen;
uint8_t _desc_cfg_buffer[256];
uint8_t _itf_count;
uint8_t _epin_count;
uint8_t _epout_count;
uint16_t _language_id;
const char *_manufacturer;
const char *_product;
public:
Adafruit_USBD_Device(void);
bool addInterface(Adafruit_USBD_Interface& itf);
void setDescriptorBuffer(uint8_t* buf, uint32_t buflen);
void setID(uint16_t vid, uint16_t pid);
void setVersion(uint16_t bcd);
void setLanguageDescriptor(uint16_t language_id);
void setManufacturerDescriptor(const char *s);
void setProductDescriptor(const char *s);
uint16_t getLanguageDescriptor (void) { return _language_id; }
const char *getManufacturerDescriptor (void) { return _manufacturer; }
const char *getProductDescriptor (void) { return _product; }
bool begin(void);
bool mounted (void) { return tud_mounted(); }
bool suspended (void) { return tud_suspended(); }
bool ready (void) { return tud_ready(); }
bool remoteWakeup (void) { return tud_remote_wakeup(); }
friend uint8_t const * tud_descriptor_device_cb(void);
friend uint8_t const * tud_descriptor_configuration_cb(uint8_t index);
};
extern Adafruit_USBD_Device USBDevice;
#endif /* ADAFRUIT_USBD_DEVICE_H_ */

View file

@ -0,0 +1,100 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This file is part of the TinyUSB stack.
*/
/** \ingroup group_class
* \defgroup ClassDriver_Audio Audio
* Currently only MIDI subclass is supported
* @{ */
#ifndef _TUSB_AUDIO_H__
#define _TUSB_AUDIO_H__
#include "common/tusb_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/// Audio Interface Subclass Codes
typedef enum
{
AUDIO_SUBCLASS_CONTROL = 0x01 , ///< Audio Control
AUDIO_SUBCLASS_STREAMING , ///< Audio Streaming
AUDIO_SUBCLASS_MIDI_STREAMING , ///< MIDI Streaming
} audio_subclass_type_t;
/// Audio Protocol Codes
typedef enum
{
AUDIO_PROTOCOL_V1 = 0x00, ///< Version 1.0
AUDIO_PROTOCOL_V2 = 0x20, ///< Version 2.0
AUDIO_PROTOCOL_V3 = 0x30, ///< Version 3.0
} audio_protocol_type_t;
/// Audio Function Category Codes
typedef enum
{
AUDIO_FUNC_DESKTOP_SPEAKER = 0x01,
AUDIO_FUNC_HOME_THEATER = 0x02,
AUDIO_FUNC_MICROPHONE = 0x03,
AUDIO_FUNC_HEADSET = 0x04,
AUDIO_FUNC_TELEPHONE = 0x05,
AUDIO_FUNC_CONVERTER = 0x06,
AUDIO_FUNC_SOUND_RECODER = 0x07,
AUDIO_FUNC_IO_BOX = 0x08,
AUDIO_FUNC_MUSICAL_INSTRUMENT = 0x09,
AUDIO_FUNC_PRO_AUDIO = 0x0A,
AUDIO_FUNC_AUDIO_VIDEO = 0x0B,
AUDIO_FUNC_CONTROL_PANEL = 0x0C
} audio_function_t;
/// Audio Class-Specific AC Interface Descriptor Subtypes
typedef enum
{
AUDIO_CS_INTERFACE_HEADER = 0x01,
AUDIO_CS_INTERFACE_INPUT_TERMINAL = 0x02,
AUDIO_CS_INTERFACE_OUTPUT_TERMINAL = 0x03,
AUDIO_CS_INTERFACE_MIXER_UNIT = 0x04,
AUDIO_CS_INTERFACE_SELECTOR_UNIT = 0x05,
AUDIO_CS_INTERFACE_FEATURE_UNIT = 0x06,
AUDIO_CS_INTERFACE_EFFECT_UNIT = 0x07,
AUDIO_CS_INTERFACE_PROCESSING_UNIT = 0x08,
AUDIO_CS_INTERFACE_EXTENSION_UNIT = 0x09,
AUDIO_CS_INTERFACE_CLOCK_SOURCE = 0x0A,
AUDIO_CS_INTERFACE_CLOCK_SELECTOR = 0x0B,
AUDIO_CS_INTERFACE_CLOCK_MULTIPLIER = 0x0C,
AUDIO_CS_INTERFACE_SAMPLE_RATE_CONVERTER = 0x0D,
} audio_cs_interface_subtype_t;
/** @} */
#ifdef __cplusplus
}
#endif
#endif
/** @} */

View file

@ -0,0 +1,405 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This file is part of the TinyUSB stack.
*/
/** \ingroup group_class
* \defgroup ClassDriver_CDC Communication Device Class (CDC)
* Currently only Abstract Control Model subclass is supported
* @{ */
#ifndef _TUSB_CDC_H__
#define _TUSB_CDC_H__
#include "common/tusb_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup ClassDriver_CDC_Common Common Definitions
* @{ */
// TODO remove
/// CDC Pipe ID, used to indicate which pipe the API is addressing to (Notification, Out, In)
typedef enum
{
CDC_PIPE_NOTIFICATION , ///< Notification pipe
CDC_PIPE_DATA_IN , ///< Data in pipe
CDC_PIPE_DATA_OUT , ///< Data out pipe
CDC_PIPE_ERROR , ///< Invalid Pipe ID
}cdc_pipeid_t;
//--------------------------------------------------------------------+
// CDC Communication Interface Class
//--------------------------------------------------------------------+
/// Communication Interface Subclass Codes
typedef enum
{
CDC_COMM_SUBCLASS_DIRECT_LINE_CONTROL_MODEL = 0x01 , ///< Direct Line Control Model [USBPSTN1.2]
CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL , ///< Abstract Control Model [USBPSTN1.2]
CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL , ///< Telephone Control Model [USBPSTN1.2]
CDC_COMM_SUBCLASS_MULTICHANNEL_CONTROL_MODEL , ///< Multi-Channel Control Model [USBISDN1.2]
CDC_COMM_SUBCLASS_CAPI_CONTROL_MODEL , ///< CAPI Control Model [USBISDN1.2]
CDC_COMM_SUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL , ///< Ethernet Networking Control Model [USBECM1.2]
CDC_COMM_SUBCLASS_ATM_NETWORKING_CONTROL_MODEL , ///< ATM Networking Control Model [USBATM1.2]
CDC_COMM_SUBCLASS_WIRELESS_HANDSET_CONTROL_MODEL , ///< Wireless Handset Control Model [USBWMC1.1]
CDC_COMM_SUBCLASS_DEVICE_MANAGEMENT , ///< Device Management [USBWMC1.1]
CDC_COMM_SUBCLASS_MOBILE_DIRECT_LINE_MODEL , ///< Mobile Direct Line Model [USBWMC1.1]
CDC_COMM_SUBCLASS_OBEX , ///< OBEX [USBWMC1.1]
CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL ///< Ethernet Emulation Model [USBEEM1.0]
} cdc_comm_sublcass_type_t;
/// Communication Interface Protocol Codes
typedef enum
{
CDC_COMM_PROTOCOL_NONE = 0x00 , ///< No specific protocol
CDC_COMM_PROTOCOL_ATCOMMAND , ///< AT Commands: V.250 etc
CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101 , ///< AT Commands defined by PCCA-101
CDC_COMM_PROTOCOL_ATCOMMAND_PCCA_101_AND_ANNEXO , ///< AT Commands defined by PCCA-101 & Annex O
CDC_COMM_PROTOCOL_ATCOMMAND_GSM_707 , ///< AT Commands defined by GSM 07.07
CDC_COMM_PROTOCOL_ATCOMMAND_3GPP_27007 , ///< AT Commands defined by 3GPP 27.007
CDC_COMM_PROTOCOL_ATCOMMAND_CDMA , ///< AT Commands defined by TIA for CDMA
CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL ///< Ethernet Emulation Model
} cdc_comm_protocol_type_t;
//------------- SubType Descriptor in COMM Functional Descriptor -------------//
/// Communication Interface SubType Descriptor
typedef enum
{
CDC_FUNC_DESC_HEADER = 0x00 , ///< Header Functional Descriptor, which marks the beginning of the concatenated set of functional descriptors for the interface.
CDC_FUNC_DESC_CALL_MANAGEMENT = 0x01 , ///< Call Management Functional Descriptor.
CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT = 0x02 , ///< Abstract Control Management Functional Descriptor.
CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT = 0x03 , ///< Direct Line Management Functional Descriptor.
CDC_FUNC_DESC_TELEPHONE_RINGER = 0x04 , ///< Telephone Ringer Functional Descriptor.
CDC_FUNC_DESC_TELEPHONE_CALL_AND_LINE_STATE_REPORTING_CAPACITY = 0x05 , ///< Telephone Call and Line State Reporting Capabilities Functional Descriptor.
CDC_FUNC_DESC_UNION = 0x06 , ///< Union Functional Descriptor
CDC_FUNC_DESC_COUNTRY_SELECTION = 0x07 , ///< Country Selection Functional Descriptor
CDC_FUNC_DESC_TELEPHONE_OPERATIONAL_MODES = 0x08 , ///< Telephone Operational ModesFunctional Descriptor
CDC_FUNC_DESC_USB_TERMINAL = 0x09 , ///< USB Terminal Functional Descriptor
CDC_FUNC_DESC_NETWORK_CHANNEL_TERMINAL = 0x0A , ///< Network Channel Terminal Descriptor
CDC_FUNC_DESC_PROTOCOL_UNIT = 0x0B , ///< Protocol Unit Functional Descriptor
CDC_FUNC_DESC_EXTENSION_UNIT = 0x0C , ///< Extension Unit Functional Descriptor
CDC_FUNC_DESC_MULTICHANEL_MANAGEMENT = 0x0D , ///< Multi-Channel Management Functional Descriptor
CDC_FUNC_DESC_CAPI_CONTROL_MANAGEMENT = 0x0E , ///< CAPI Control Management Functional Descriptor
CDC_FUNC_DESC_ETHERNET_NETWORKING = 0x0F , ///< Ethernet Networking Functional Descriptor
CDC_FUNC_DESC_ATM_NETWORKING = 0x10 , ///< ATM Networking Functional Descriptor
CDC_FUNC_DESC_WIRELESS_HANDSET_CONTROL_MODEL = 0x11 , ///< Wireless Handset Control Model Functional Descriptor
CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL = 0x12 , ///< Mobile Direct Line Model Functional Descriptor
CDC_FUNC_DESC_MOBILE_DIRECT_LINE_MODEL_DETAIL = 0x13 , ///< MDLM Detail Functional Descriptor
CDC_FUNC_DESC_DEVICE_MANAGEMENT_MODEL = 0x14 , ///< Device Management Model Functional Descriptor
CDC_FUNC_DESC_OBEX = 0x15 , ///< OBEX Functional Descriptor
CDC_FUNC_DESC_COMMAND_SET = 0x16 , ///< Command Set Functional Descriptor
CDC_FUNC_DESC_COMMAND_SET_DETAIL = 0x17 , ///< Command Set Detail Functional Descriptor
CDC_FUNC_DESC_TELEPHONE_CONTROL_MODEL = 0x18 , ///< Telephone Control Model Functional Descriptor
CDC_FUNC_DESC_OBEX_SERVICE_IDENTIFIER = 0x19 ///< OBEX Service Identifier Functional Descriptor
}cdc_func_desc_type_t;
//--------------------------------------------------------------------+
// CDC Data Interface Class
//--------------------------------------------------------------------+
// SUBCLASS code of Data Interface is not used and should/must be zero
/// Data Interface Protocol Codes
typedef enum{
CDC_DATA_PROTOCOL_ISDN_BRI = 0x30, ///< Physical interface protocol for ISDN BRI
CDC_DATA_PROTOCOL_HDLC = 0x31, ///< HDLC
CDC_DATA_PROTOCOL_TRANSPARENT = 0x32, ///< Transparent
CDC_DATA_PROTOCOL_Q921_MANAGEMENT = 0x50, ///< Management protocol for Q.921 data link protocol
CDC_DATA_PROTOCOL_Q921_DATA_LINK = 0x51, ///< Data link protocol for Q.931
CDC_DATA_PROTOCOL_Q921_TEI_MULTIPLEXOR = 0x52, ///< TEI-multiplexor for Q.921 data link protocol
CDC_DATA_PROTOCOL_V42BIS_DATA_COMPRESSION = 0x90, ///< Data compression procedures
CDC_DATA_PROTOCOL_EURO_ISDN = 0x91, ///< Euro-ISDN protocol control
CDC_DATA_PROTOCOL_V24_RATE_ADAPTION_TO_ISDN = 0x92, ///< V.24 rate adaptation to ISDN
CDC_DATA_PROTOCOL_CAPI_COMMAND = 0x93, ///< CAPI Commands
CDC_DATA_PROTOCOL_HOST_BASED_DRIVER = 0xFD, ///< Host based driver. Note: This protocol code should only be used in messages between host and device to identify the host driver portion of a protocol stack.
CDC_DATA_PROTOCOL_IN_PROTOCOL_UNIT_FUNCTIONAL_DESCRIPTOR = 0xFE ///< The protocol(s) are described using a ProtocolUnit Functional Descriptors on Communications Class Interface
}cdc_data_protocol_type_t;
//--------------------------------------------------------------------+
// Management Element Request (Control Endpoint)
//--------------------------------------------------------------------+
/// Communication Interface Management Element Request Codes
typedef enum
{
CDC_REQUEST_SEND_ENCAPSULATED_COMMAND = 0x00, ///< is used to issue a command in the format of the supported control protocol of the Communications Class interface
CDC_REQUEST_GET_ENCAPSULATED_RESPONSE = 0x01, ///< is used to request a response in the format of the supported control protocol of the Communications Class interface.
CDC_REQUEST_SET_COMM_FEATURE = 0x02,
CDC_REQUEST_GET_COMM_FEATURE = 0x03,
CDC_REQUEST_CLEAR_COMM_FEATURE = 0x04,
CDC_REQUEST_SET_AUX_LINE_STATE = 0x10,
CDC_REQUEST_SET_HOOK_STATE = 0x11,
CDC_REQUEST_PULSE_SETUP = 0x12,
CDC_REQUEST_SEND_PULSE = 0x13,
CDC_REQUEST_SET_PULSE_TIME = 0x14,
CDC_REQUEST_RING_AUX_JACK = 0x15,
CDC_REQUEST_SET_LINE_CODING = 0x20,
CDC_REQUEST_GET_LINE_CODING = 0x21,
CDC_REQUEST_SET_CONTROL_LINE_STATE = 0x22,
CDC_REQUEST_SEND_BREAK = 0x23,
CDC_REQUEST_SET_RINGER_PARMS = 0x30,
CDC_REQUEST_GET_RINGER_PARMS = 0x31,
CDC_REQUEST_SET_OPERATION_PARMS = 0x32,
CDC_REQUEST_GET_OPERATION_PARMS = 0x33,
CDC_REQUEST_SET_LINE_PARMS = 0x34,
CDC_REQUEST_GET_LINE_PARMS = 0x35,
CDC_REQUEST_DIAL_DIGITS = 0x36,
CDC_REQUEST_SET_UNIT_PARAMETER = 0x37,
CDC_REQUEST_GET_UNIT_PARAMETER = 0x38,
CDC_REQUEST_CLEAR_UNIT_PARAMETER = 0x39,
CDC_REQUEST_GET_PROFILE = 0x3A,
CDC_REQUEST_SET_ETHERNET_MULTICAST_FILTERS = 0x40,
CDC_REQUEST_SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x41,
CDC_REQUEST_GET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER = 0x42,
CDC_REQUEST_SET_ETHERNET_PACKET_FILTER = 0x43,
CDC_REQUEST_GET_ETHERNET_STATISTIC = 0x44,
CDC_REQUEST_SET_ATM_DATA_FORMAT = 0x50,
CDC_REQUEST_GET_ATM_DEVICE_STATISTICS = 0x51,
CDC_REQUEST_SET_ATM_DEFAULT_VC = 0x52,
CDC_REQUEST_GET_ATM_VC_STATISTICS = 0x53,
CDC_REQUEST_MDLM_SEMANTIC_MODEL = 0x60,
}cdc_management_request_t;
//--------------------------------------------------------------------+
// Management Elemenent Notification (Notification Endpoint)
//--------------------------------------------------------------------+
/// Communication Interface Management Element Notification Codes
typedef enum
{
NETWORK_CONNECTION = 0x00, ///< This notification allows the device to notify the host about network connection status.
RESPONSE_AVAILABLE = 0x01, ///< This notification allows the device to notify the hostthat a response is available. This response can be retrieved with a subsequent \ref CDC_REQUEST_GET_ENCAPSULATED_RESPONSE request.
AUX_JACK_HOOK_STATE = 0x08,
RING_DETECT = 0x09,
SERIAL_STATE = 0x20,
CALL_STATE_CHANGE = 0x28,
LINE_STATE_CHANGE = 0x29,
CONNECTION_SPEED_CHANGE = 0x2A, ///< This notification allows the device to inform the host-networking driver that a change in either the upstream or the downstream bit rate of the connection has occurred
MDLM_SEMANTIC_MODEL_NOTIFICATION = 0x40,
}cdc_notification_request_t;
//--------------------------------------------------------------------+
// Class Specific Functional Descriptor (Communication Interface)
//--------------------------------------------------------------------+
/// Header Functional Descriptor (Communication Interface)
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUNC_DESC_
uint16_t bcdCDC ; ///< CDC release number in Binary-Coded Decimal
}cdc_desc_func_header_t;
/// Union Functional Descriptor (Communication Interface)
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
uint8_t bControlInterface ; ///< Interface number of Communication Interface
uint8_t bSubordinateInterface ; ///< Array of Interface number of Data Interface
}cdc_desc_func_union_t;
#define cdc_desc_func_union_n_t(no_slave)\
struct TU_ATTR_PACKED { \
uint8_t bLength ;\
uint8_t bDescriptorType ;\
uint8_t bDescriptorSubType ;\
uint8_t bControlInterface ;\
uint8_t bSubordinateInterface[no_slave] ;\
}
/// Country Selection Functional Descriptor (Communication Interface)
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
uint8_t iCountryCodeRelDate ; ///< Index of a string giving the release date for the implemented ISO 3166 Country Codes.
uint16_t wCountryCode ; ///< Country code in the format as defined in [ISO3166], release date as specified inoffset 3 for the first supported country.
}cdc_desc_func_country_selection_t;
#define cdc_desc_func_country_selection_n_t(no_country) \
struct TU_ATTR_PACKED {\
uint8_t bLength ;\
uint8_t bDescriptorType ;\
uint8_t bDescriptorSubType ;\
uint8_t iCountryCodeRelDate ;\
uint16_t wCountryCode[no_country] ;\
}
//--------------------------------------------------------------------+
// PUBLIC SWITCHED TELEPHONE NETWORK (PSTN) SUBCLASS
//--------------------------------------------------------------------+
/// \brief Call Management Functional Descriptor
/// \details This functional descriptor describes the processing of calls for the Communications Class interface.
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
struct {
uint8_t handle_call : 1; ///< 0 - Device sends/receives call management information only over the Communications Class interface. 1 - Device can send/receive call management information over a Data Class interface.
uint8_t send_recv_call : 1; ///< 0 - Device does not handle call management itself. 1 - Device handles call management itself.
uint8_t : 0;
} bmCapabilities;
uint8_t bDataInterface;
}cdc_desc_func_call_management_t;
typedef struct TU_ATTR_PACKED
{
uint8_t support_comm_request : 1; ///< Device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature.
uint8_t support_line_request : 1; ///< Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State.
uint8_t support_send_break : 1; ///< Device supports the request Send_Break
uint8_t support_notification_network_connection : 1; ///< Device supports the notification Network_Connection.
uint8_t : 0;
}cdc_acm_capability_t;
TU_VERIFY_STATIC(sizeof(cdc_acm_capability_t) == 1, "mostly problem with compiler");
/// \brief Abstract Control Management Functional Descriptor
/// \details This functional descriptor describes the commands supported by by the Communications Class interface with SubClass code of \ref CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
cdc_acm_capability_t bmCapabilities ;
}cdc_desc_func_acm_t;
/// \brief Direct Line Management Functional Descriptor
/// \details This functional descriptor describes the commands supported by the Communications Class interface with SubClass code of \ref CDC_FUNC_DESC_DIRECT_LINE_MANAGEMENT
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
struct {
uint8_t require_pulse_setup : 1; ///< Device requires extra Pulse_Setup request during pulse dialing sequence to disengage holding circuit.
uint8_t support_aux_request : 1; ///< Device supports the request combination of Set_Aux_Line_State, Ring_Aux_Jack, and notification Aux_Jack_Hook_State.
uint8_t support_pulse_request : 1; ///< Device supports the request combination of Pulse_Setup, Send_Pulse, and Set_Pulse_Time.
uint8_t : 0;
} bmCapabilities;
}cdc_desc_func_direct_line_management_t;
/// \brief Telephone Ringer Functional Descriptor
/// \details The Telephone Ringer functional descriptor describes the ringer capabilities supported by the Communications Class interface,
/// with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
uint8_t bRingerVolSteps ;
uint8_t bNumRingerPatterns ;
}cdc_desc_func_telephone_ringer_t;
/// \brief Telephone Operational Modes Functional Descriptor
/// \details The Telephone Operational Modes functional descriptor describes the operational modes supported by
/// the Communications Class interface, with the SubClass code of \ref CDC_COMM_SUBCLASS_TELEPHONE_CONTROL_MODEL
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
struct {
uint8_t simple_mode : 1;
uint8_t standalone_mode : 1;
uint8_t computer_centric_mode : 1;
uint8_t : 0;
} bmCapabilities;
}cdc_desc_func_telephone_operational_modes_t;
/// \brief Telephone Call and Line State Reporting Capabilities Descriptor
/// \details The Telephone Call and Line State Reporting Capabilities functional descriptor describes the abilities of a
/// telephone device to report optional call and line states.
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
uint8_t bDescriptorType ; ///< Descriptor Type, must be Class-Specific
uint8_t bDescriptorSubType ; ///< Descriptor SubType one of above CDC_FUCN_DESC_
struct {
uint32_t interrupted_dialtone : 1; ///< 0 : Reports only dialtone (does not differentiate between normal and interrupted dialtone). 1 : Reports interrupted dialtone in addition to normal dialtone
uint32_t ringback_busy_fastbusy : 1; ///< 0 : Reports only dialing state. 1 : Reports ringback, busy, and fast busy states.
uint32_t caller_id : 1; ///< 0 : Does not report caller ID. 1 : Reports caller ID information.
uint32_t incoming_distinctive : 1; ///< 0 : Reports only incoming ringing. 1 : Reports incoming distinctive ringing patterns.
uint32_t dual_tone_multi_freq : 1; ///< 0 : Cannot report dual tone multi-frequency (DTMF) digits input remotely over the telephone line. 1 : Can report DTMF digits input remotely over the telephone line.
uint32_t line_state_change : 1; ///< 0 : Does not support line state change notification. 1 : Does support line state change notification
uint32_t : 0;
} bmCapabilities;
}cdc_desc_func_telephone_call_state_reporting_capabilities_t;
static inline uint8_t cdc_functional_desc_typeof(uint8_t const * p_desc)
{
return p_desc[2];
}
//--------------------------------------------------------------------+
// Requests
//--------------------------------------------------------------------+
typedef struct TU_ATTR_PACKED
{
uint32_t bit_rate;
uint8_t stop_bits; ///< 0: 1 stop bit - 1: 1.5 stop bits - 2: 2 stop bits
uint8_t parity; ///< 0: None - 1: Odd - 2: Even - 3: Mark - 4: Space
uint8_t data_bits; ///< can be 5, 6, 7, 8 or 16
} cdc_line_coding_t;
TU_VERIFY_STATIC(sizeof(cdc_line_coding_t) == 7, "size is not correct");
typedef struct TU_ATTR_PACKED
{
uint16_t dte_is_present : 1; ///< Indicates to DCE if DTE is presentor not. This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR.
uint16_t half_duplex_carrier_control : 1;
uint16_t : 14;
} cdc_line_control_state_t;
TU_VERIFY_STATIC(sizeof(cdc_line_control_state_t) == 2, "size is not correct");
/** @} */
#ifdef __cplusplus
}
#endif
#endif
/** @} */

View file

@ -0,0 +1,394 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This file is part of the TinyUSB stack.
*/
#include "tusb_option.h"
#if (TUSB_OPT_DEVICE_ENABLED && CFG_TUD_CDC)
#include "cdc_device.h"
#include "device/usbd_pvt.h"
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
typedef struct
{
uint8_t itf_num;
uint8_t ep_notif;
uint8_t ep_in;
uint8_t ep_out;
// Bit 0: DTR (Data Terminal Ready), Bit 1: RTS (Request to Send)
uint8_t line_state;
/*------------- From this point, data is not cleared by bus reset -------------*/
char wanted_char;
cdc_line_coding_t line_coding;
// FIFO
tu_fifo_t rx_ff;
tu_fifo_t tx_ff;
uint8_t rx_ff_buf[CFG_TUD_CDC_RX_BUFSIZE];
uint8_t tx_ff_buf[CFG_TUD_CDC_TX_BUFSIZE];
#if CFG_FIFO_MUTEX
osal_mutex_def_t rx_ff_mutex;
osal_mutex_def_t tx_ff_mutex;
#endif
// Endpoint Transfer buffer
CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_CDC_EPSIZE];
CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_CDC_EPSIZE];
}cdcd_interface_t;
#define ITF_MEM_RESET_SIZE offsetof(cdcd_interface_t, wanted_char)
//--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+
CFG_TUSB_MEM_SECTION static cdcd_interface_t _cdcd_itf[CFG_TUD_CDC];
static void _prep_out_transaction (uint8_t itf)
{
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
// skip if previous transfer not complete
if ( usbd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_out) ) return;
// Prepare for incoming data but only allow what we can store in the ring buffer.
uint16_t max_read = tu_fifo_remaining(&p_cdc->rx_ff);
if ( max_read >= CFG_TUD_CDC_EPSIZE )
{
usbd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_out, p_cdc->epout_buf, CFG_TUD_CDC_EPSIZE);
}
}
//--------------------------------------------------------------------+
// APPLICATION API
//--------------------------------------------------------------------+
bool tud_cdc_n_connected(uint8_t itf)
{
// DTR (bit 0) active is considered as connected
return tud_ready() && tu_bit_test(_cdcd_itf[itf].line_state, 0);
}
uint8_t tud_cdc_n_get_line_state (uint8_t itf)
{
return _cdcd_itf[itf].line_state;
}
void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding)
{
(*coding) = _cdcd_itf[itf].line_coding;
}
void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted)
{
_cdcd_itf[itf].wanted_char = wanted;
}
//--------------------------------------------------------------------+
// READ API
//--------------------------------------------------------------------+
uint32_t tud_cdc_n_available(uint8_t itf)
{
return tu_fifo_count(&_cdcd_itf[itf].rx_ff);
}
uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize)
{
uint32_t num_read = tu_fifo_read_n(&_cdcd_itf[itf].rx_ff, buffer, bufsize);
_prep_out_transaction(itf);
return num_read;
}
bool tud_cdc_n_peek(uint8_t itf, int pos, uint8_t* chr)
{
return tu_fifo_peek_at(&_cdcd_itf[itf].rx_ff, pos, chr);
}
void tud_cdc_n_read_flush (uint8_t itf)
{
tu_fifo_clear(&_cdcd_itf[itf].rx_ff);
_prep_out_transaction(itf);
}
//--------------------------------------------------------------------+
// WRITE API
//--------------------------------------------------------------------+
uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize)
{
uint16_t ret = tu_fifo_write_n(&_cdcd_itf[itf].tx_ff, buffer, bufsize);
#if 0 // TODO issue with circuitpython's REPL
// flush if queue more than endpoint size
if ( tu_fifo_count(&_cdcd_itf[itf].tx_ff) >= CFG_TUD_CDC_EPSIZE )
{
tud_cdc_n_write_flush(itf);
}
#endif
return ret;
}
bool tud_cdc_n_write_flush (uint8_t itf)
{
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_in) ); // skip if previous transfer not complete
uint16_t count = tu_fifo_read_n(&_cdcd_itf[itf].tx_ff, p_cdc->epin_buf, CFG_TUD_CDC_EPSIZE);
if ( count )
{
TU_VERIFY( tud_cdc_n_connected(itf) ); // fifo is empty if not connected
TU_ASSERT( usbd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_in, p_cdc->epin_buf, count) );
}
return true;
}
uint32_t tud_cdc_n_write_available (uint8_t itf)
{
return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff);
}
//--------------------------------------------------------------------+
// USBD Driver API
//--------------------------------------------------------------------+
void cdcd_init(void)
{
tu_memclr(_cdcd_itf, sizeof(_cdcd_itf));
for(uint8_t i=0; i<CFG_TUD_CDC; i++)
{
cdcd_interface_t* p_cdc = &_cdcd_itf[i];
p_cdc->wanted_char = -1;
// default line coding is : stop bit = 1, parity = none, data bits = 8
p_cdc->line_coding.bit_rate = 115200;
p_cdc->line_coding.stop_bits = 0;
p_cdc->line_coding.parity = 0;
p_cdc->line_coding.data_bits = 8;
// config fifo
tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, CFG_TUD_CDC_RX_BUFSIZE, 1, false);
tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, CFG_TUD_CDC_TX_BUFSIZE, 1, false);
#if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&p_cdc->rx_ff, osal_mutex_create(&p_cdc->rx_ff_mutex));
tu_fifo_config_mutex(&p_cdc->tx_ff, osal_mutex_create(&p_cdc->tx_ff_mutex));
#endif
}
}
void cdcd_reset(uint8_t rhport)
{
(void) rhport;
for(uint8_t i=0; i<CFG_TUD_CDC; i++)
{
tu_memclr(&_cdcd_itf[i], ITF_MEM_RESET_SIZE);
tu_fifo_clear(&_cdcd_itf[i].rx_ff);
tu_fifo_clear(&_cdcd_itf[i].tx_ff);
}
}
bool cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t *p_length)
{
// Only support ACM subclass
TU_ASSERT ( CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass);
// Only support AT commands, no protocol and vendor specific commands.
TU_ASSERT(tu_within(CDC_COMM_PROTOCOL_NONE, itf_desc->bInterfaceProtocol, CDC_COMM_PROTOCOL_ATCOMMAND_CDMA) ||
itf_desc->bInterfaceProtocol == 0xff);
// Find available interface
cdcd_interface_t * p_cdc = NULL;
uint8_t cdc_id;
for(cdc_id=0; cdc_id<CFG_TUD_CDC; cdc_id++)
{
if ( _cdcd_itf[cdc_id].ep_in == 0 )
{
p_cdc = &_cdcd_itf[cdc_id];
break;
}
}
TU_ASSERT(p_cdc);
//------------- Control Interface -------------//
p_cdc->itf_num = itf_desc->bInterfaceNumber;
uint8_t const * p_desc = tu_desc_next( itf_desc );
(*p_length) = sizeof(tusb_desc_interface_t);
// Communication Functional Descriptors
while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) )
{
(*p_length) += tu_desc_len(p_desc);
p_desc = tu_desc_next(p_desc);
}
if ( TUSB_DESC_ENDPOINT == tu_desc_type(p_desc) )
{
// notification endpoint if any
TU_ASSERT( dcd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc) );
p_cdc->ep_notif = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress;
(*p_length) += p_desc[DESC_OFFSET_LEN];
p_desc = tu_desc_next(p_desc);
}
//------------- Data Interface (if any) -------------//
if ( (TUSB_DESC_INTERFACE == p_desc[DESC_OFFSET_TYPE]) &&
(TUSB_CLASS_CDC_DATA == ((tusb_desc_interface_t const *) p_desc)->bInterfaceClass) )
{
// next to endpoint descriptor
p_desc = tu_desc_next(p_desc);
// Open endpoint pair
TU_ASSERT( usbd_open_edpt_pair(rhport, p_desc, 2, TUSB_XFER_BULK, &p_cdc->ep_out, &p_cdc->ep_in) );
(*p_length) += sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t);
}
// Prepare for incoming data
_prep_out_transaction(cdc_id);
return true;
}
// Invoked when class request DATA stage is finished.
// return false to stall control endpoint (e.g Host send non-sense DATA)
bool cdcd_control_complete(uint8_t rhport, tusb_control_request_t const * request)
{
(void) rhport;
//------------- Class Specific Request -------------//
TU_VERIFY (request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS);
// TODO Support multiple interfaces
uint8_t const itf = 0;
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
// Invoke callback
if ( CDC_REQUEST_SET_LINE_CODING == request->bRequest )
{
if ( tud_cdc_line_coding_cb ) tud_cdc_line_coding_cb(itf, &p_cdc->line_coding);
}
return true;
}
// Handle class control request
// return false to stall control endpoint (e.g unsupported request)
bool cdcd_control_request(uint8_t rhport, tusb_control_request_t const * request)
{
//------------- Class Specific Request -------------//
TU_ASSERT(request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS);
// TODO Support multiple interfaces
uint8_t const itf = 0;
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
switch ( request->bRequest )
{
case CDC_REQUEST_SET_LINE_CODING:
tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t));
break;
case CDC_REQUEST_GET_LINE_CODING:
tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t));
break;
case CDC_REQUEST_SET_CONTROL_LINE_STATE:
// CDC PSTN v1.2 section 6.3.12
// Bit 0: Indicates if DTE is present or not.
// This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR (Data Terminal Ready)
// Bit 1: Carrier control for half-duplex modems.
// This signal corresponds to V.24 signal 105 and RS-232 signal RTS (Request to Send)
p_cdc->line_state = (uint8_t) request->wValue;
tud_control_status(rhport, request);
// Invoke callback
if ( tud_cdc_line_state_cb) tud_cdc_line_state_cb(itf, tu_bit_test(request->wValue, 0), tu_bit_test(request->wValue, 1));
break;
default: return false; // stall unsupported request
}
return true;
}
bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
{
(void) rhport;
(void) result;
// TODO Support multiple interfaces
uint8_t const itf = 0;
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
// Received new data
if ( ep_addr == p_cdc->ep_out )
{
for(uint32_t i=0; i<xferred_bytes; i++)
{
tu_fifo_write(&p_cdc->rx_ff, &p_cdc->epout_buf[i]);
// Check for wanted char and invoke callback if needed
if ( tud_cdc_rx_wanted_cb && ( ((signed char) p_cdc->wanted_char) != -1 ) && ( p_cdc->wanted_char == p_cdc->epout_buf[i] ) )
{
tud_cdc_rx_wanted_cb(itf, p_cdc->wanted_char);
}
}
// invoke receive callback (if there is still data)
if (tud_cdc_rx_cb && tu_fifo_count(&p_cdc->rx_ff) ) tud_cdc_rx_cb(itf);
// prepare for OUT transaction
_prep_out_transaction(itf);
}
// Data sent to host, we could continue to fetch data tx fifo to send.
// But it will cause incorrect baudrate set in line coding.
// Though maybe the baudrate is not really important !!!
// if ( ep_addr == p_cdc->ep_in )
// {
//
// }
// nothing to do with notif endpoint for now
return true;
}
#endif

View file

@ -0,0 +1,213 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This file is part of the TinyUSB stack.
*/
#ifndef _TUSB_CDC_DEVICE_H_
#define _TUSB_CDC_DEVICE_H_
#include "common/tusb_common.h"
#include "device/usbd.h"
#include "cdc.h"
//--------------------------------------------------------------------+
// Class Driver Configuration
//--------------------------------------------------------------------+
#ifndef CFG_TUD_CDC_EPSIZE
#define CFG_TUD_CDC_EPSIZE 64
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** \addtogroup CDC_Serial Serial
* @{
* \defgroup CDC_Serial_Device Device
* @{ */
//--------------------------------------------------------------------+
// Application API (Multiple Interfaces)
// CFG_TUD_CDC > 1
//--------------------------------------------------------------------+
bool tud_cdc_n_connected (uint8_t itf);
uint8_t tud_cdc_n_get_line_state (uint8_t itf);
void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding);
void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted);
uint32_t tud_cdc_n_available (uint8_t itf);
uint32_t tud_cdc_n_read (uint8_t itf, void* buffer, uint32_t bufsize);
void tud_cdc_n_read_flush (uint8_t itf);
bool tud_cdc_n_peek (uint8_t itf, int pos, uint8_t* u8);
static inline int32_t tud_cdc_n_read_char (uint8_t itf);
uint32_t tud_cdc_n_write (uint8_t itf, void const* buffer, uint32_t bufsize);
bool tud_cdc_n_write_flush (uint8_t itf);
uint32_t tud_cdc_n_write_available (uint8_t itf);
static inline uint32_t tud_cdc_n_write_char (uint8_t itf, char ch);
static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str);
//--------------------------------------------------------------------+
// Application API (Interface0)
//--------------------------------------------------------------------+
static inline bool tud_cdc_connected (void);
static inline uint8_t tud_cdc_get_line_state (void);
static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding);
static inline void tud_cdc_set_wanted_char (char wanted);
static inline uint32_t tud_cdc_available (void);
static inline int32_t tud_cdc_read_char (void);
static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize);
static inline void tud_cdc_read_flush (void);
static inline bool tud_cdc_peek (int pos, uint8_t* u8);
static inline uint32_t tud_cdc_write_char (char ch);
static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize);
static inline uint32_t tud_cdc_write_str (char const* str);
static inline bool tud_cdc_write_flush (void);
static inline uint32_t tud_cdc_write_available (void);
//--------------------------------------------------------------------+
// Application Callback API (weak is optional)
//--------------------------------------------------------------------+
// Invoked when received new data
TU_ATTR_WEAK void tud_cdc_rx_cb(uint8_t itf);
// Invoked when received `wanted_char`
TU_ATTR_WEAK void tud_cdc_rx_wanted_cb(uint8_t itf, char wanted_char);
// Invoked when line state DTR & RTS are changed via SET_CONTROL_LINE_STATE
TU_ATTR_WEAK void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts);
// Invoked when line coding is change via SET_LINE_CODING
TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p_line_coding);
//--------------------------------------------------------------------+
// Inline Functions
//--------------------------------------------------------------------+
static inline int32_t tud_cdc_n_read_char (uint8_t itf)
{
uint8_t ch;
return tud_cdc_n_read(itf, &ch, 1) ? (int32_t) ch : -1;
}
static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch)
{
return tud_cdc_n_write(itf, &ch, 1);
}
static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str)
{
return tud_cdc_n_write(itf, str, strlen(str));
}
static inline bool tud_cdc_connected (void)
{
return tud_cdc_n_connected(0);
}
static inline uint8_t tud_cdc_get_line_state (void)
{
return tud_cdc_n_get_line_state(0);
}
static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding)
{
return tud_cdc_n_get_line_coding(0, coding);
}
static inline void tud_cdc_set_wanted_char (char wanted)
{
tud_cdc_n_set_wanted_char(0, wanted);
}
static inline uint32_t tud_cdc_available (void)
{
return tud_cdc_n_available(0);
}
static inline int32_t tud_cdc_read_char (void)
{
return tud_cdc_n_read_char(0);
}
static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize)
{
return tud_cdc_n_read(0, buffer, bufsize);
}
static inline void tud_cdc_read_flush (void)
{
tud_cdc_n_read_flush(0);
}
static inline bool tud_cdc_peek (int pos, uint8_t* u8)
{
return tud_cdc_n_peek(0, pos, u8);
}
static inline uint32_t tud_cdc_write_char (char ch)
{
return tud_cdc_n_write_char(0, ch);
}
static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize)
{
return tud_cdc_n_write(0, buffer, bufsize);
}
static inline uint32_t tud_cdc_write_str (char const* str)
{
return tud_cdc_n_write_str(0, str);
}
static inline bool tud_cdc_write_flush (void)
{
return tud_cdc_n_write_flush(0);
}
static inline uint32_t tud_cdc_write_available(void)
{
return tud_cdc_n_write_available(0);
}
/** @} */
/** @} */
//--------------------------------------------------------------------+
// INTERNAL USBD-CLASS DRIVER API
//--------------------------------------------------------------------+
void cdcd_init (void);
void cdcd_reset (uint8_t rhport);
bool cdcd_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t *p_length);
bool cdcd_control_request (uint8_t rhport, tusb_control_request_t const * request);
bool cdcd_control_complete (uint8_t rhport, tusb_control_request_t const * request);
bool cdcd_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes);
#ifdef __cplusplus
}
#endif
#endif /* _TUSB_CDC_DEVICE_H_ */

View file

@ -0,0 +1,873 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This file is part of the TinyUSB stack.
*/
/** \ingroup group_class
* \defgroup ClassDriver_HID Human Interface Device (HID)
* @{ */
#ifndef _TUSB_HID_H_
#define _TUSB_HID_H_
#include "common/tusb_common.h"
#ifdef __cplusplus
extern "C" {
#endif
//--------------------------------------------------------------------+
// Common Definitions
//--------------------------------------------------------------------+
/** \defgroup ClassDriver_HID_Common Common Definitions
* @{ */
/// USB HID Descriptor
typedef struct TU_ATTR_PACKED
{
uint8_t bLength; /**< Numeric expression that is the total size of the HID descriptor */
uint8_t bDescriptorType; /**< Constant name specifying type of HID descriptor. */
uint16_t bcdHID; /**< Numeric expression identifying the HID Class Specification release */
uint8_t bCountryCode; /**< Numeric expression identifying country code of the localized hardware. */
uint8_t bNumDescriptors; /**< Numeric expression specifying the number of class descriptors */
uint8_t bReportType; /**< Type of HID class report. */
uint16_t wReportLength; /**< the total size of the Report descriptor. */
} tusb_hid_descriptor_hid_t;
/// HID Subclass
typedef enum
{
HID_SUBCLASS_NONE = 0, ///< No Subclass
HID_SUBCLASS_BOOT = 1 ///< Boot Interface Subclass
}hid_subclass_type_t;
/// HID Protocol
typedef enum
{
HID_PROTOCOL_NONE = 0, ///< None
HID_PROTOCOL_KEYBOARD = 1, ///< Keyboard
HID_PROTOCOL_MOUSE = 2 ///< Mouse
}hid_protocol_type_t;
/// HID Descriptor Type
typedef enum
{
HID_DESC_TYPE_HID = 0x21, ///< HID Descriptor
HID_DESC_TYPE_REPORT = 0x22, ///< Report Descriptor
HID_DESC_TYPE_PHYSICAL = 0x23 ///< Physical Descriptor
}hid_descriptor_type_t;
/// HID Request Report Type
typedef enum
{
HID_REPORT_TYPE_INVALID = 0,
HID_REPORT_TYPE_INPUT, ///< Input
HID_REPORT_TYPE_OUTPUT, ///< Output
HID_REPORT_TYPE_FEATURE ///< Feature
}hid_report_type_t;
/// HID Class Specific Control Request
typedef enum
{
HID_REQ_CONTROL_GET_REPORT = 0x01, ///< Get Report
HID_REQ_CONTROL_GET_IDLE = 0x02, ///< Get Idle
HID_REQ_CONTROL_GET_PROTOCOL = 0x03, ///< Get Protocol
HID_REQ_CONTROL_SET_REPORT = 0x09, ///< Set Report
HID_REQ_CONTROL_SET_IDLE = 0x0a, ///< Set Idle
HID_REQ_CONTROL_SET_PROTOCOL = 0x0b ///< Set Protocol
}hid_request_type_t;
/// HID Country Code
typedef enum
{
HID_LOCAL_NotSupported = 0 , ///< NotSupported
HID_LOCAL_Arabic , ///< Arabic
HID_LOCAL_Belgian , ///< Belgian
HID_LOCAL_Canadian_Bilingual , ///< Canadian_Bilingual
HID_LOCAL_Canadian_French , ///< Canadian_French
HID_LOCAL_Czech_Republic , ///< Czech_Republic
HID_LOCAL_Danish , ///< Danish
HID_LOCAL_Finnish , ///< Finnish
HID_LOCAL_French , ///< French
HID_LOCAL_German , ///< German
HID_LOCAL_Greek , ///< Greek
HID_LOCAL_Hebrew , ///< Hebrew
HID_LOCAL_Hungary , ///< Hungary
HID_LOCAL_International , ///< International
HID_LOCAL_Italian , ///< Italian
HID_LOCAL_Japan_Katakana , ///< Japan_Katakana
HID_LOCAL_Korean , ///< Korean
HID_LOCAL_Latin_American , ///< Latin_American
HID_LOCAL_Netherlands_Dutch , ///< Netherlands/Dutch
HID_LOCAL_Norwegian , ///< Norwegian
HID_LOCAL_Persian_Farsi , ///< Persian (Farsi)
HID_LOCAL_Poland , ///< Poland
HID_LOCAL_Portuguese , ///< Portuguese
HID_LOCAL_Russia , ///< Russia
HID_LOCAL_Slovakia , ///< Slovakia
HID_LOCAL_Spanish , ///< Spanish
HID_LOCAL_Swedish , ///< Swedish
HID_LOCAL_Swiss_French , ///< Swiss/French
HID_LOCAL_Swiss_German , ///< Swiss/German
HID_LOCAL_Switzerland , ///< Switzerland
HID_LOCAL_Taiwan , ///< Taiwan
HID_LOCAL_Turkish_Q , ///< Turkish-Q
HID_LOCAL_UK , ///< UK
HID_LOCAL_US , ///< US
HID_LOCAL_Yugoslavia , ///< Yugoslavia
HID_LOCAL_Turkish_F ///< Turkish-F
} hid_country_code_t;
/** @} */
//--------------------------------------------------------------------+
// MOUSE
//--------------------------------------------------------------------+
/** \addtogroup ClassDriver_HID_Mouse Mouse
* @{ */
/// Standard HID Boot Protocol Mouse Report.
typedef struct TU_ATTR_PACKED
{
uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */
int8_t x; /**< Current delta x movement of the mouse. */
int8_t y; /**< Current delta y movement on the mouse. */
int8_t wheel; /**< Current delta wheel movement on the mouse. */
int8_t pan; // using AC Pan
} hid_mouse_report_t;
/// Standard Mouse Buttons Bitmap
typedef enum
{
MOUSE_BUTTON_LEFT = TU_BIT(0), ///< Left button
MOUSE_BUTTON_RIGHT = TU_BIT(1), ///< Right button
MOUSE_BUTTON_MIDDLE = TU_BIT(2), ///< Middle button
MOUSE_BUTTON_BACKWARD = TU_BIT(3), ///< Backward button,
MOUSE_BUTTON_FORWARD = TU_BIT(4), ///< Forward button,
}hid_mouse_button_bm_t;
/// @}
//--------------------------------------------------------------------+
// Keyboard
//--------------------------------------------------------------------+
/** \addtogroup ClassDriver_HID_Keyboard Keyboard
* @{ */
/// Standard HID Boot Protocol Keyboard Report.
typedef struct TU_ATTR_PACKED
{
uint8_t modifier; /**< Keyboard modifier (KEYBOARD_MODIFER_* masks). */
uint8_t reserved; /**< Reserved for OEM use, always set to 0. */
uint8_t keycode[6]; /**< Key codes of the currently pressed keys. */
} hid_keyboard_report_t;
/// Keyboard modifier codes bitmap
typedef enum
{
KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), ///< Left Control
KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), ///< Left Shift
KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), ///< Left Alt
KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), ///< Left Window
KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), ///< Right Control
KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), ///< Right Shift
KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), ///< Right Alt
KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) ///< Right Window
}hid_keyboard_modifier_bm_t;
typedef enum
{
KEYBOARD_LED_NUMLOCK = TU_BIT(0), ///< Num Lock LED
KEYBOARD_LED_CAPSLOCK = TU_BIT(1), ///< Caps Lock LED
KEYBOARD_LED_SCROLLLOCK = TU_BIT(2), ///< Scroll Lock LED
KEYBOARD_LED_COMPOSE = TU_BIT(3), ///< Composition Mode
KEYBOARD_LED_KANA = TU_BIT(4) ///< Kana mode
}hid_keyboard_led_bm_t;
/// @}
//--------------------------------------------------------------------+
// HID KEYCODE
//--------------------------------------------------------------------+
#define HID_KEY_NONE 0x00
#define HID_KEY_A 0x04
#define HID_KEY_B 0x05
#define HID_KEY_C 0x06
#define HID_KEY_D 0x07
#define HID_KEY_E 0x08
#define HID_KEY_F 0x09
#define HID_KEY_G 0x0A
#define HID_KEY_H 0x0B
#define HID_KEY_I 0x0C
#define HID_KEY_J 0x0D
#define HID_KEY_K 0x0E
#define HID_KEY_L 0x0F
#define HID_KEY_M 0x10
#define HID_KEY_N 0x11
#define HID_KEY_O 0x12
#define HID_KEY_P 0x13
#define HID_KEY_Q 0x14
#define HID_KEY_R 0x15
#define HID_KEY_S 0x16
#define HID_KEY_T 0x17
#define HID_KEY_U 0x18
#define HID_KEY_V 0x19
#define HID_KEY_W 0x1A
#define HID_KEY_X 0x1B
#define HID_KEY_Y 0x1C
#define HID_KEY_Z 0x1D
#define HID_KEY_1 0x1E
#define HID_KEY_2 0x1F
#define HID_KEY_3 0x20
#define HID_KEY_4 0x21
#define HID_KEY_5 0x22
#define HID_KEY_6 0x23
#define HID_KEY_7 0x24
#define HID_KEY_8 0x25
#define HID_KEY_9 0x26
#define HID_KEY_0 0x27
#define HID_KEY_RETURN 0x28
#define HID_KEY_ESCAPE 0x29
#define HID_KEY_BACKSPACE 0x2A
#define HID_KEY_TAB 0x2B
#define HID_KEY_SPACE 0x2C
#define HID_KEY_MINUS 0x2D
#define HID_KEY_EQUAL 0x2E
#define HID_KEY_BRACKET_LEFT 0x2F
#define HID_KEY_BRACKET_RIGHT 0x30
#define HID_KEY_BACKSLASH 0x31
#define HID_KEY_EUROPE_1 0x32
#define HID_KEY_SEMICOLON 0x33
#define HID_KEY_APOSTROPHE 0x34
#define HID_KEY_GRAVE 0x35
#define HID_KEY_COMMA 0x36
#define HID_KEY_PERIOD 0x37
#define HID_KEY_SLASH 0x38
#define HID_KEY_CAPS_LOCK 0x39
#define HID_KEY_F1 0x3A
#define HID_KEY_F2 0x3B
#define HID_KEY_F3 0x3C
#define HID_KEY_F4 0x3D
#define HID_KEY_F5 0x3E
#define HID_KEY_F6 0x3F
#define HID_KEY_F7 0x40
#define HID_KEY_F8 0x41
#define HID_KEY_F9 0x42
#define HID_KEY_F10 0x43
#define HID_KEY_F11 0x44
#define HID_KEY_F12 0x45
#define HID_KEY_PRINT_SCREEN 0x46
#define HID_KEY_SCROLL_LOCK 0x47
#define HID_KEY_PAUSE 0x48
#define HID_KEY_INSERT 0x49
#define HID_KEY_HOME 0x4A
#define HID_KEY_PAGE_UP 0x4B
#define HID_KEY_DELETE 0x4C
#define HID_KEY_END 0x4D
#define HID_KEY_PAGE_DOWN 0x4E
#define HID_KEY_ARROW_RIGHT 0x4F
#define HID_KEY_ARROW_LEFT 0x50
#define HID_KEY_ARROW_DOWN 0x51
#define HID_KEY_ARROW_UP 0x52
#define HID_KEY_NUM_LOCK 0x53
#define HID_KEY_KEYPAD_DIVIDE 0x54
#define HID_KEY_KEYPAD_MULTIPLY 0x55
#define HID_KEY_KEYPAD_SUBTRACT 0x56
#define HID_KEY_KEYPAD_ADD 0x57
#define HID_KEY_KEYPAD_ENTER 0x58
#define HID_KEY_KEYPAD_1 0x59
#define HID_KEY_KEYPAD_2 0x5A
#define HID_KEY_KEYPAD_3 0x5B
#define HID_KEY_KEYPAD_4 0x5C
#define HID_KEY_KEYPAD_5 0x5D
#define HID_KEY_KEYPAD_6 0x5E
#define HID_KEY_KEYPAD_7 0x5F
#define HID_KEY_KEYPAD_8 0x60
#define HID_KEY_KEYPAD_9 0x61
#define HID_KEY_KEYPAD_0 0x62
#define HID_KEY_KEYPAD_DECIMAL 0x63
#define HID_KEY_EUROPE_2 0x64
#define HID_KEY_APPLICATION 0x65
#define HID_KEY_POWER 0x66
#define HID_KEY_KEYPAD_EQUAL 0x67
#define HID_KEY_F13 0x68
#define HID_KEY_F14 0x69
#define HID_KEY_F15 0x6A
#define HID_KEY_CONTROL_LEFT 0xE0
#define HID_KEY_SHIFT_LEFT 0xE1
#define HID_KEY_ALT_LEFT 0xE2
#define HID_KEY_GUI_LEFT 0xE3
#define HID_KEY_CONTROL_RIGHT 0xE4
#define HID_KEY_SHIFT_RIGHT 0xE5
#define HID_KEY_ALT_RIGHT 0xE6
#define HID_KEY_GUI_RIGHT 0xE7
//--------------------------------------------------------------------+
// REPORT DESCRIPTOR
//--------------------------------------------------------------------+
//------------- ITEM & TAG -------------//
#define HID_REPORT_DATA_0(data)
#define HID_REPORT_DATA_1(data) , data
#define HID_REPORT_DATA_2(data) , U16_TO_U8S_LE(data)
#define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data)
#define HID_REPORT_ITEM(data, tag, type, size) \
(((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data)
#define RI_TYPE_MAIN 0
#define RI_TYPE_GLOBAL 1
#define RI_TYPE_LOCAL 2
//------------- MAIN ITEMS 6.2.2.4 -------------//
#define HID_INPUT(x) HID_REPORT_ITEM(x, 8, RI_TYPE_MAIN, 1)
#define HID_OUTPUT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_MAIN, 1)
#define HID_COLLECTION(x) HID_REPORT_ITEM(x, 10, RI_TYPE_MAIN, 1)
#define HID_FEATURE(x) HID_REPORT_ITEM(x, 11, RI_TYPE_MAIN, 1)
#define HID_COLLECTION_END HID_REPORT_ITEM(x, 12, RI_TYPE_MAIN, 0)
//------------- INPUT, OUTPUT, FEATURE 6.2.2.5 -------------//
#define HID_DATA (0<<0)
#define HID_CONSTANT (1<<0)
#define HID_ARRAY (0<<1)
#define HID_VARIABLE (1<<1)
#define HID_ABSOLUTE (0<<2)
#define HID_RELATIVE (1<<2)
#define HID_WRAP_NO (0<<3)
#define HID_WRAP (1<<3)
#define HID_LINEAR (0<<4)
#define HID_NONLINEAR (1<<4)
#define HID_PREFERRED_STATE (0<<5)
#define HID_PREFERRED_NO (1<<5)
#define HID_NO_NULL_POSITION (0<<6)
#define HID_NULL_STATE (1<<6)
#define HID_NON_VOLATILE (0<<7)
#define HID_VOLATILE (1<<7)
#define HID_BITFIELD (0<<8)
#define HID_BUFFERED_BYTES (1<<8)
//------------- COLLECTION ITEM 6.2.2.6 -------------//
enum {
HID_COLLECTION_PHYSICAL = 0,
HID_COLLECTION_APPLICATION,
HID_COLLECTION_LOGICAL,
HID_COLLECTION_REPORT,
HID_COLLECTION_NAMED_ARRAY,
HID_COLLECTION_USAGE_SWITCH,
HID_COLLECTION_USAGE_MODIFIER
};
//------------- GLOBAL ITEMS 6.2.2.7 -------------//
#define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, 0, RI_TYPE_GLOBAL, 1)
#define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, 0, RI_TYPE_GLOBAL, n)
#define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, 1, RI_TYPE_GLOBAL, 1)
#define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, 1, RI_TYPE_GLOBAL, n)
#define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, 2, RI_TYPE_GLOBAL, 1)
#define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, 2, RI_TYPE_GLOBAL, n)
#define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, 3, RI_TYPE_GLOBAL, 1)
#define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, 3, RI_TYPE_GLOBAL, n)
#define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, 4, RI_TYPE_GLOBAL, 1)
#define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, 4, RI_TYPE_GLOBAL, n)
#define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, 5, RI_TYPE_GLOBAL, 1)
#define HID_UNIT_EXPONENT_N(x, n) HID_REPORT_ITEM(x, 5, RI_TYPE_GLOBAL, n)
#define HID_UNIT(x) HID_REPORT_ITEM(x, 6, RI_TYPE_GLOBAL, 1)
#define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, 6, RI_TYPE_GLOBAL, n)
#define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, 7, RI_TYPE_GLOBAL, 1)
#define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, 7, RI_TYPE_GLOBAL, n)
#define HID_REPORT_ID(x) HID_REPORT_ITEM(x, 8, RI_TYPE_GLOBAL, 1)
#define HID_REPORT_ID_N(x) HID_REPORT_ITEM(x, 8, RI_TYPE_GLOBAL, n)
#define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_GLOBAL, 1)
#define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, 9, RI_TYPE_GLOBAL, n)
#define HID_PUSH HID_REPORT_ITEM(x, 10, RI_TYPE_GLOBAL, 0)
#define HID_POP HID_REPORT_ITEM(x, 11, RI_TYPE_GLOBAL, 0)
//------------- LOCAL ITEMS 6.2.2.8 -------------//
#define HID_USAGE(x) HID_REPORT_ITEM(x, 0, RI_TYPE_LOCAL, 1)
#define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, 0, RI_TYPE_LOCAL, n)
#define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, 1, RI_TYPE_LOCAL, 1)
#define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, 1, RI_TYPE_LOCAL, n)
#define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, 2, RI_TYPE_LOCAL, 1)
#define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, 2, RI_TYPE_LOCAL, n)
//--------------------------------------------------------------------+
// Usage Table
//--------------------------------------------------------------------+
/// HID Usage Table - Table 1: Usage Page Summary
enum {
HID_USAGE_PAGE_DESKTOP = 0x01,
HID_USAGE_PAGE_SIMULATE = 0x02,
HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03,
HID_USAGE_PAGE_SPORT = 0x04,
HID_USAGE_PAGE_GAME = 0x05,
HID_USAGE_PAGE_GENERIC_DEVICE = 0x06,
HID_USAGE_PAGE_KEYBOARD = 0x07,
HID_USAGE_PAGE_LED = 0x08,
HID_USAGE_PAGE_BUTTON = 0x09,
HID_USAGE_PAGE_ORDINAL = 0x0a,
HID_USAGE_PAGE_TELEPHONY = 0x0b,
HID_USAGE_PAGE_CONSUMER = 0x0c,
HID_USAGE_PAGE_DIGITIZER = 0x0d,
HID_USAGE_PAGE_PID = 0x0f,
HID_USAGE_PAGE_UNICODE = 0x10,
HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14,
HID_USAGE_PAGE_MEDICAL = 0x40,
HID_USAGE_PAGE_MONITOR = 0x80, //0x80 - 0x83
HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87
HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c,
HID_USAGE_PAGE_SCALE = 0x8d,
HID_USAGE_PAGE_MSR = 0x8e,
HID_USAGE_PAGE_CAMERA = 0x90,
HID_USAGE_PAGE_ARCADE = 0x91,
HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF
};
/// HID Usage Table - Table 6: Generic Desktop Page
enum {
HID_USAGE_DESKTOP_POINTER = 0x01,
HID_USAGE_DESKTOP_MOUSE = 0x02,
HID_USAGE_DESKTOP_JOYSTICK = 0x04,
HID_USAGE_DESKTOP_GAMEPAD = 0x05,
HID_USAGE_DESKTOP_KEYBOARD = 0x06,
HID_USAGE_DESKTOP_KEYPAD = 0x07,
HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08,
HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09,
HID_USAGE_DESKTOP_X = 0x30,
HID_USAGE_DESKTOP_Y = 0x31,
HID_USAGE_DESKTOP_Z = 0x32,
HID_USAGE_DESKTOP_RX = 0x33,
HID_USAGE_DESKTOP_RY = 0x34,
HID_USAGE_DESKTOP_RZ = 0x35,
HID_USAGE_DESKTOP_SLIDER = 0x36,
HID_USAGE_DESKTOP_DIAL = 0x37,
HID_USAGE_DESKTOP_WHEEL = 0x38,
HID_USAGE_DESKTOP_HAT_SWITCH = 0x39,
HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a,
HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b,
HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c,
HID_USAGE_DESKTOP_START = 0x3d,
HID_USAGE_DESKTOP_SELECT = 0x3e,
HID_USAGE_DESKTOP_VX = 0x40,
HID_USAGE_DESKTOP_VY = 0x41,
HID_USAGE_DESKTOP_VZ = 0x42,
HID_USAGE_DESKTOP_VBRX = 0x43,
HID_USAGE_DESKTOP_VBRY = 0x44,
HID_USAGE_DESKTOP_VBRZ = 0x45,
HID_USAGE_DESKTOP_VNO = 0x46,
HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47,
HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48,
HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80,
HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81,
HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82,
HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83,
HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84,
HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85,
HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86,
HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87,
HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88,
HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89,
HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A,
HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B,
HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C,
HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D,
HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E,
HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F,
HID_USAGE_DESKTOP_DPAD_UP = 0x90,
HID_USAGE_DESKTOP_DPAD_DOWN = 0x91,
HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92,
HID_USAGE_DESKTOP_DPAD_LEFT = 0x93,
HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0,
HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1,
HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2,
HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3,
HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4,
HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5,
HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6,
HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7,
HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6,
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
};
/// HID Usage Table: Consumer Page (0x0C)
/// Only contains controls that supported by Windows (whole list is too long)
enum
{
// Generic Control
HID_USAGE_CONSUMER_CONTROL = 0x0001,
// Power Control
HID_USAGE_CONSUMER_POWER = 0x0030,
HID_USAGE_CONSUMER_RESET = 0x0031,
HID_USAGE_CONSUMER_SLEEP = 0x0032,
// Screen Brightness
HID_USAGE_CONSUMER_BRIGHTNESS_INCREMENT = 0x006F,
HID_USAGE_CONSUMER_BRIGHTNESS_DECREMENT = 0x0070,
// These HID usages operate only on mobile systems (battery powered) and
// require Windows 8 (build 8302 or greater).
HID_USAGE_CONSUMER_WIRELESS_RADIO_CONTROLS = 0x000C,
HID_USAGE_CONSUMER_WIRELESS_RADIO_BUTTONS = 0x00C6,
HID_USAGE_CONSUMER_WIRELESS_RADIO_LED = 0x00C7,
HID_USAGE_CONSUMER_WIRELESS_RADIO_SLIDER_SWITCH = 0x00C8,
// Media Control
HID_USAGE_CONSUMER_PLAY_PAUSE = 0x00CD,
HID_USAGE_CONSUMER_SCAN_NEXT = 0x00B5,
HID_USAGE_CONSUMER_SCAN_PREVIOUS = 0x00B6,
HID_USAGE_CONSUMER_STOP = 0x00B7,
HID_USAGE_CONSUMER_VOLUME = 0x00E0,
HID_USAGE_CONSUMER_MUTE = 0x00E2,
HID_USAGE_CONSUMER_BASS = 0x00E3,
HID_USAGE_CONSUMER_TREBLE = 0x00E4,
HID_USAGE_CONSUMER_BASS_BOOST = 0x00E5,
HID_USAGE_CONSUMER_VOLUME_INCREMENT = 0x00E9,
HID_USAGE_CONSUMER_VOLUME_DECREMENT = 0x00EA,
HID_USAGE_CONSUMER_BASS_INCREMENT = 0x0152,
HID_USAGE_CONSUMER_BASS_DECREMENT = 0x0153,
HID_USAGE_CONSUMER_TREBLE_INCREMENT = 0x0154,
HID_USAGE_CONSUMER_TREBLE_DECREMENT = 0x0155,
// Application Launcher
HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION = 0x0183,
HID_USAGE_CONSUMER_AL_EMAIL_READER = 0x018A,
HID_USAGE_CONSUMER_AL_CALCULATOR = 0x0192,
HID_USAGE_CONSUMER_AL_LOCAL_BROWSER = 0x0194,
// Browser/Explorer Specific
HID_USAGE_CONSUMER_AC_SEARCH = 0x0221,
HID_USAGE_CONSUMER_AC_HOME = 0x0223,
HID_USAGE_CONSUMER_AC_BACK = 0x0224,
HID_USAGE_CONSUMER_AC_FORWARD = 0x0225,
HID_USAGE_CONSUMER_AC_STOP = 0x0226,
HID_USAGE_CONSUMER_AC_REFRESH = 0x0227,
HID_USAGE_CONSUMER_AC_BOOKMARKS = 0x022A,
// Mouse Horizontal scroll
HID_USAGE_CONSUMER_AC_PAN = 0x0238,
};
/*--------------------------------------------------------------------
* ASCII to KEYCODE Conversion
* Expand to array of [128][2] (shift, keycode)
*
* Usage: example to convert input chr into keyboard report (modifier + keycode)
*
* uint8_t const conv_table[128][2] = { HID_ASCII_TO_KEYCODE };
*
* uint8_t keycode[6] = { 0 };
* uint8_t modifier = 0;
*
* if ( conv_table[chr][0] ) modifier = KEYBOARD_MODIFIER_LEFTSHIFT;
* keycode[0] = conv_table[chr][1];
* tud_hid_keyboard_report(report_id, modifier, keycode);
*
*--------------------------------------------------------------------*/
#define HID_ASCII_TO_KEYCODE \
{0, 0 }, /* 0x00 Null */ \
{0, 0 }, /* 0x01 */ \
{0, 0 }, /* 0x02 */ \
{0, 0 }, /* 0x03 */ \
{0, 0 }, /* 0x04 */ \
{0, 0 }, /* 0x05 */ \
{0, 0 }, /* 0x06 */ \
{0, 0 }, /* 0x07 */ \
{0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \
{0, HID_KEY_TAB }, /* 0x09 Tab */ \
{0, HID_KEY_RETURN }, /* 0x0A Line Feed */ \
{0, 0 }, /* 0x0B */ \
{0, 0 }, /* 0x0C */ \
{0, HID_KEY_RETURN }, /* 0x0D CR */ \
{0, 0 }, /* 0x0E */ \
{0, 0 }, /* 0x0F */ \
{0, 0 }, /* 0x10 */ \
{0, 0 }, /* 0x11 */ \
{0, 0 }, /* 0x12 */ \
{0, 0 }, /* 0x13 */ \
{0, 0 }, /* 0x14 */ \
{0, 0 }, /* 0x15 */ \
{0, 0 }, /* 0x16 */ \
{0, 0 }, /* 0x17 */ \
{0, 0 }, /* 0x18 */ \
{0, 0 }, /* 0x19 */ \
{0, 0 }, /* 0x1A */ \
{0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \
{0, 0 }, /* 0x1C */ \
{0, 0 }, /* 0x1D */ \
{0, 0 }, /* 0x1E */ \
{0, 0 }, /* 0x1F */ \
\
{0, HID_KEY_SPACE }, /* 0x20 */ \
{1, HID_KEY_1 }, /* 0x21 ! */ \
{1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \
{1, HID_KEY_3 }, /* 0x23 # */ \
{1, HID_KEY_4 }, /* 0x24 $ */ \
{1, HID_KEY_5 }, /* 0x25 % */ \
{1, HID_KEY_7 }, /* 0x26 & */ \
{0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \
{1, HID_KEY_9 }, /* 0x28 ( */ \
{1, HID_KEY_0 }, /* 0x29 ) */ \
{1, HID_KEY_8 }, /* 0x2A * */ \
{1, HID_KEY_EQUAL }, /* 0x2B + */ \
{0, HID_KEY_COMMA }, /* 0x2C , */ \
{0, HID_KEY_MINUS }, /* 0x2D - */ \
{0, HID_KEY_PERIOD }, /* 0x2E . */ \
{0, HID_KEY_SLASH }, /* 0x2F / */ \
{0, HID_KEY_0 }, /* 0x30 0 */ \
{0, HID_KEY_1 }, /* 0x31 1 */ \
{0, HID_KEY_2 }, /* 0x32 2 */ \
{0, HID_KEY_3 }, /* 0x33 3 */ \
{0, HID_KEY_4 }, /* 0x34 4 */ \
{0, HID_KEY_5 }, /* 0x35 5 */ \
{0, HID_KEY_6 }, /* 0x36 6 */ \
{0, HID_KEY_7 }, /* 0x37 7 */ \
{0, HID_KEY_8 }, /* 0x38 8 */ \
{0, HID_KEY_9 }, /* 0x39 9 */ \
{1, HID_KEY_SEMICOLON }, /* 0x3A : */ \
{0, HID_KEY_SEMICOLON }, /* 0x3B ; */ \
{1, HID_KEY_COMMA }, /* 0x3C < */ \
{0, HID_KEY_EQUAL }, /* 0x3D = */ \
{1, HID_KEY_PERIOD }, /* 0x3E > */ \
{1, HID_KEY_SLASH }, /* 0x3F ? */ \
\
{1, HID_KEY_2 }, /* 0x40 @ */ \
{1, HID_KEY_A }, /* 0x41 A */ \
{1, HID_KEY_B }, /* 0x42 B */ \
{1, HID_KEY_C }, /* 0x43 C */ \
{1, HID_KEY_D }, /* 0x44 D */ \
{1, HID_KEY_E }, /* 0x45 E */ \
{1, HID_KEY_F }, /* 0x46 F */ \
{1, HID_KEY_G }, /* 0x47 G */ \
{1, HID_KEY_H }, /* 0x48 H */ \
{1, HID_KEY_I }, /* 0x49 I */ \
{1, HID_KEY_J }, /* 0x4A J */ \
{1, HID_KEY_K }, /* 0x4B K */ \
{1, HID_KEY_L }, /* 0x4C L */ \
{1, HID_KEY_M }, /* 0x4D M */ \
{1, HID_KEY_N }, /* 0x4E N */ \
{1, HID_KEY_O }, /* 0x4F O */ \
{1, HID_KEY_P }, /* 0x50 P */ \
{1, HID_KEY_Q }, /* 0x51 Q */ \
{1, HID_KEY_R }, /* 0x52 R */ \
{1, HID_KEY_S }, /* 0x53 S */ \
{1, HID_KEY_T }, /* 0x55 T */ \
{1, HID_KEY_U }, /* 0x55 U */ \
{1, HID_KEY_V }, /* 0x56 V */ \
{1, HID_KEY_W }, /* 0x57 W */ \
{1, HID_KEY_X }, /* 0x58 X */ \
{1, HID_KEY_Y }, /* 0x59 Y */ \
{1, HID_KEY_Z }, /* 0x5A Z */ \
{0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \
{0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \
{0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \
{1, HID_KEY_6 }, /* 0x5E ^ */ \
{1, HID_KEY_MINUS }, /* 0x5F _ */ \
\
{0, HID_KEY_GRAVE }, /* 0x60 ` */ \
{0, HID_KEY_A }, /* 0x61 a */ \
{0, HID_KEY_B }, /* 0x62 b */ \
{0, HID_KEY_C }, /* 0x63 c */ \
{0, HID_KEY_D }, /* 0x66 d */ \
{0, HID_KEY_E }, /* 0x65 e */ \
{0, HID_KEY_F }, /* 0x66 f */ \
{0, HID_KEY_G }, /* 0x67 g */ \
{0, HID_KEY_H }, /* 0x68 h */ \
{0, HID_KEY_I }, /* 0x69 i */ \
{0, HID_KEY_J }, /* 0x6A j */ \
{0, HID_KEY_K }, /* 0x6B k */ \
{0, HID_KEY_L }, /* 0x6C l */ \
{0, HID_KEY_M }, /* 0x6D m */ \
{0, HID_KEY_N }, /* 0x6E n */ \
{0, HID_KEY_O }, /* 0x6F o */ \
{0, HID_KEY_P }, /* 0x70 p */ \
{0, HID_KEY_Q }, /* 0x71 q */ \
{0, HID_KEY_R }, /* 0x72 r */ \
{0, HID_KEY_S }, /* 0x73 s */ \
{0, HID_KEY_T }, /* 0x75 t */ \
{0, HID_KEY_U }, /* 0x75 u */ \
{0, HID_KEY_V }, /* 0x76 v */ \
{0, HID_KEY_W }, /* 0x77 w */ \
{0, HID_KEY_X }, /* 0x78 x */ \
{0, HID_KEY_Y }, /* 0x79 y */ \
{0, HID_KEY_Z }, /* 0x7A z */ \
{1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \
{1, HID_KEY_BACKSLASH }, /* 0x7C | */ \
{1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \
{1, HID_KEY_GRAVE }, /* 0x7E ~ */ \
{0, HID_KEY_DELETE } /* 0x7F Delete */ \
/*--------------------------------------------------------------------
* KEYCODE to Ascii Conversion
* Expand to array of [128][2] (ascii without shift, ascii with shift)
*
* Usage: example to convert ascii from keycode (key) and shift modifier (shift).
* Here we assume key < 128 ( printable )
*
* uint8_t const conv_table[128][2] = { HID_KEYCODE_TO_ASCII };
* char ch = shift ? conv_table[chr][1] : conv_table[chr][0];
*
*--------------------------------------------------------------------*/
#define HID_KEYCODE_TO_ASCII \
{0 , 0 }, /* 0x00 */ \
{0 , 0 }, /* 0x01 */ \
{0 , 0 }, /* 0x02 */ \
{0 , 0 }, /* 0x03 */ \
{'a' , 'A' }, /* 0x04 */ \
{'b' , 'B' }, /* 0x05 */ \
{'c' , 'C' }, /* 0x06 */ \
{'d' , 'D' }, /* 0x07 */ \
{'e' , 'E' }, /* 0x08 */ \
{'f' , 'F' }, /* 0x09 */ \
{'g' , 'G' }, /* 0x0a */ \
{'h' , 'H' }, /* 0x0b */ \
{'i' , 'I' }, /* 0x0c */ \
{'j' , 'J' }, /* 0x0d */ \
{'k' , 'K' }, /* 0x0e */ \
{'l' , 'L' }, /* 0x0f */ \
{'m' , 'M' }, /* 0x10 */ \
{'n' , 'N' }, /* 0x11 */ \
{'o' , 'O' }, /* 0x12 */ \
{'p' , 'P' }, /* 0x13 */ \
{'q' , 'Q' }, /* 0x14 */ \
{'r' , 'R' }, /* 0x15 */ \
{'s' , 'S' }, /* 0x16 */ \
{'t' , 'T' }, /* 0x17 */ \
{'u' , 'U' }, /* 0x18 */ \
{'v' , 'V' }, /* 0x19 */ \
{'w' , 'W' }, /* 0x1a */ \
{'x' , 'X' }, /* 0x1b */ \
{'y' , 'Y' }, /* 0x1c */ \
{'z' , 'Z' }, /* 0x1d */ \
{'1' , '!' }, /* 0x1e */ \
{'2' , '@' }, /* 0x1f */ \
{'3' , '#' }, /* 0x20 */ \
{'4' , '$' }, /* 0x21 */ \
{'5' , '%' }, /* 0x22 */ \
{'6' , '^' }, /* 0x23 */ \
{'7' , '&' }, /* 0x24 */ \
{'8' , '*' }, /* 0x25 */ \
{'9' , '(' }, /* 0x26 */ \
{'0' , ')' }, /* 0x27 */ \
{'\r' , '\r' }, /* 0x28 */ \
{'\x1b', '\x1b' }, /* 0x29 */ \
{'\b' , '\b' }, /* 0x2a */ \
{'\t' , '\t' }, /* 0x2b */ \
{' ' , ' ' }, /* 0x2c */ \
{'-' , '_' }, /* 0x2d */ \
{'=' , '+' }, /* 0x2e */ \
{'[' , '{' }, /* 0x2f */ \
{']' , '}' }, /* 0x30 */ \
{'\\' , '|' }, /* 0x31 */ \
{'#' , '~' }, /* 0x32 */ \
{';' , ':' }, /* 0x33 */ \
{'\'' , '\"' }, /* 0x34 */ \
{0 , 0 }, /* 0x35 */ \
{',' , '<' }, /* 0x36 */ \
{'.' , '>' }, /* 0x37 */ \
{'/' , '?' }, /* 0x38 */ \
\
{0 , 0 }, /* 0x39 */ \
{0 , 0 }, /* 0x3a */ \
{0 , 0 }, /* 0x3b */ \
{0 , 0 }, /* 0x3c */ \
{0 , 0 }, /* 0x3d */ \
{0 , 0 }, /* 0x3e */ \
{0 , 0 }, /* 0x3f */ \
{0 , 0 }, /* 0x40 */ \
{0 , 0 }, /* 0x41 */ \
{0 , 0 }, /* 0x42 */ \
{0 , 0 }, /* 0x43 */ \
{0 , 0 }, /* 0x44 */ \
{0 , 0 }, /* 0x45 */ \
{0 , 0 }, /* 0x46 */ \
{0 , 0 }, /* 0x47 */ \
{0 , 0 }, /* 0x48 */ \
{0 , 0 }, /* 0x49 */ \
{0 , 0 }, /* 0x4a */ \
{0 , 0 }, /* 0x4b */ \
{0 , 0 }, /* 0x4c */ \
{0 , 0 }, /* 0x4d */ \
{0 , 0 }, /* 0x4e */ \
{0 , 0 }, /* 0x4f */ \
{0 , 0 }, /* 0x50 */ \
{0 , 0 }, /* 0x51 */ \
{0 , 0 }, /* 0x52 */ \
{0 , 0 }, /* 0x53 */ \
\
{'/' , '/' }, /* 0x54 */ \
{'*' , '*' }, /* 0x55 */ \
{'-' , '-' }, /* 0x56 */ \
{'+' , '+' }, /* 0x57 */ \
{'\r' , '\r' }, /* 0x58 */ \
{'1' , 0 }, /* 0x59 */ \
{'2' , 0 }, /* 0x5a */ \
{'3' , 0 }, /* 0x5b */ \
{'4' , 0 }, /* 0x5c */ \
{'5' , '5' }, /* 0x5d */ \
{'6' , 0 }, /* 0x5e */ \
{'7' , 0 }, /* 0x5f */ \
{'8' , 0 }, /* 0x60 */ \
{'9' , 0 }, /* 0x61 */ \
{'0' , 0 }, /* 0x62 */ \
{'0' , 0 }, /* 0x63 */ \
{'=' , '=' }, /* 0x67 */ \
#ifdef __cplusplus
}
#endif
#endif /* _TUSB_HID_H__ */
/// @}

Some files were not shown because too many files have changed in this diff Show more