Compare commits

..

3 commits

974 changed files with 12711 additions and 229506 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 }}

8
.gitignore vendored
View file

@ -1,6 +1,8 @@
*.bz2
*.atsuo
*~
.o
.d
.elf
.lss
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

150
CHANGELOG
View file

@ -1,151 +1,4 @@
SAMD CORE ?.?.?? ????.??.??
SAMD CORE 1.6.21 2019.04.01
* MKR boards: changed I2C to sercom2, SPI1 + Serial2 to sercom4
* Improved accuracy of delay() function. Thanks @BenF
* MKR 1500: Changed SARA module to be powered off on boot
SAMD CORE 1.6.20 2018.11.28
* Replaced boolean type with bool in examples. Thanks @per1234
* Added c++ linker command to allow to include libstdc++ when linking. Thanks @helmut64
* CPX driver fixes. Thanks @dhalbert
* I2S: Changed library to use 8 MHz oscillator source if 48MHz divider does not fit in 8 bits
* UART: Added frame error handling
* USB: Fixed memory leak on reconnects
* SDU: Added support for Arduino M0. Thanks @jandrassy
* Added arduinoOTA upload keys for Arduino M0. Thanks @jandrassy
* USB: Fixed USB Host failures and fixed memory overwrite in USBHost. Thanks @gdsports
* USB: Added method to return USB error code. Thanks @MarkFischer
* CDC: Clear line state on end()
* USB: Added USB device end() method
* Removed requirement that the DAC is on A0. Thanks @GabrielNotman
* Added alternate ports 44, 45 to make the SWCLK and SWDIO pins available on the Zero. Thanks @helmut64
* Added defines for MKR pin layout
* Fixed freeze in tone()
* Added MKR NB 1500 variant and bootloader
* Increased the default serial buffer size to 256
SAMD CORE 1.6.19 2018.07.11
* Fixed bootloader tools for .org boards
* M0: Updated pin definitions for D6, D7 and D13 to match Zero
* SPI: Fixed interrupt mask to block. Thanks @ggajoch
* Added MKR WiFi 1010 variant and bootloader
* Updated Windows Drivers to 1.4.0 and re-signed Adafruit_Circuit_Playground_Express.inf
SAMD CORE 1.6.18 2018.03.05
* Wire: Added support for general call (broadcast)
* SPI: Added SPI.notUsingInterrupt(...) API
* Fixed build errors if variant disabled USB
* Wire: TX and RX buffers are now 256 bytes (previously was 64 bytes)
* Added samd21e sercom compatibility. Thanks @mitchellpontague
* Fixed lock ups when outputting to UART during ISR
* Wire: correct I2C frequency calculations, and allow variant to overide default pull up resistor rise time
* USB: Fixed build errors when CDC_ENABLED was not set. Thanks @gdsports
SAMD CORE 1.6.17 2017.11.29
* More accurate approximation for multiplication factor of PLL to make 48Mhz. Thanks @joverbee
* Fix changing trigger mode (RISING/FALLING/...) in attachInterrupt(..) during runtime. Thanks @joverbee
* Improved ISR response time. Thanks @joverbee
* USB power current can now be overridden in the variant. Thanks @awatterott
* UART's now support optional RTS and CTS pins defined in the variant.
* Added support for MKR GSM 1400 and MKR WAN 1300
SAMD CORE 1.6.16 2017.08.23
* Is now possible to use PWM on D7 (though it can't be used with PWM on D12 at the same time). Thanks @Adminius
* PWMs now can perform real 16-bit resolution if analogWriteResolution(16) is set. Thanks @Adminius
* USB CDC: fixed issue of available() getting stuck when receiving ZLP's
* Serial (UART) tx is now buffered.
* Improved CRYSTALLESS stability. Thanks @tannewt
* Some fixes to Adafruit Circuit Playground Express variant. Thanks @ladyada
* Updated Stream and Print class
* Native USB now supports USB Serial Number
* Fixed pgm_read_ptr compatibility macro. Thanks @nkrkv
SAMD CORE 1.6.15 2017.04.27
* Added missing Windows driver for MKRFox1200
* Added SDU support for MKRFox1200
SAMD CORE 1.6.14 2017.04.04
* Fixed platform definition for openocd
* Added bootloader definitions for MKRFox1200
* Added lowpower function on USB subsystem
SAMD CORE 1.6.13 2017.03.31
* Added SDU (SD card Updater) library.
* Fixed 8MHz clock being generated incorrectly. Thanks @keestux
SAMD CORE 1.6.12 2017.02.07
* Fixed type conflict of utoa function. Thanks @kbumsik
* Fixed pinMode(pin, OUTPUT) not working after analogRead(pin)
* Reenabled support for Tian
* Fixed signature for Adafruit Circuit Playground Express board
* Added CMSIS headers for SAML21 chip series. Thanks @aethaniel
SAMD CORE 1.6.11 2016.12.23
* Temporarily disabled support for Arduino Tian until an upload issue is fixed
SAMD CORE 1.6.10 2016.12.23
* Added .org boards
* Fixed MKRZero `build.board` property
* linker: .data section is now aligned to 16 bytes address
* Added support for CRYSTALLESS configurations (thanks @ladyada)
* Added Circuits Playground board
* Added method to automatically retrieve sketch start via linker variable
(see https://github.com/arduino/ArduinoCore-samd/pull/185)
* Fixed USBDevice.epBank1EnableTransferComplete method
* Adapted bootloader source code to CMSIS 4.5
SAMD CORE 1.6.9 2016.12.12
* MKR1000: Enabled PWM on pin 11, it is shared with pin A4
* SPI: Optimized SPI.transfer(...)
* Added linker flags for the ARM Math library
* Added new I2S library
* Bootloader: Check sketch vectors before waiting for double tap
* Upgraded CMSIS version to 4.5.0, and use new CMSIS-Atmel package
* Added Arduino MKRZero board.
SAMD CORE 1.6.8 2016.10.12
* Fixed regression on analogWrite. Thanks @bose-mdellisanti!
* Fixed regression on SerialUSB.available()
* C++ global constructors (if any) are now run after hardware initalization.
SAMD CORE 1.6.7 2016.09.28
* Fixed Serial.flush() blocking before any writes. Thanks @hangmoh
* Added snprintf_P to avr/pgmspace.h stub. Thanks @jantje
* Another small fix to String iterators. Thanks @Ivan-Perez @Chris--A
* Fixes SerialUSB.write(...) returning 0 instead of byte written
* Added Uart::availableForWrite()
* Added defines for RAMSTART, RAMSIZE, RAMEND
* Fixed writing LOW to a digital input pin blocking subsequent digitalRead attempts
* Fixed digitalWrite() unnecessarily activating the pull-up resistor
* Wire: Slave writes now use TX buffer
* Added getTimeout() method to Stream.
* Fixed glitch in PWM generation that may happen when calling analogWrite()
* PWM frequency is now 732.4Hz (before it was 187500.0Hz)
* Fixed PWM/analogwrite() not working on pin 13 on the Zero
* Improved reliability of SerialUSB under heavy load (this should solve
all issues with MKR1000/WiFi101 firmware updater on MacOSX)
* Improved SerialUSB.read() performance
* Added String::toDouble()
* Bootloader: LED now pulses and USB TX/RX blink on transfer (like Leonardo)
* Bootloader: enabled USB string descriptors
SAMD CORE 1.6.6 2016.05.19
SAMD CORE 1.6.6
* Fixed digitalPinToInterrupt() macro, now it works as documented.
* Added analogInputToDigitalPin macro
@ -155,7 +8,6 @@ SAMD CORE 1.6.6 2016.05.19
* Fixed Wire.write(0x00) "ambiguos method" error
* String class now supports iterators. Thanks @Chris--A
* Remove enabling bootloader protection when burning bootloader. This enables WDT, so sketches do not work.
* Added remote upload for Yun-Shield
SAMD CORE 1.6.5 2016.04.02

View file

@ -1,16 +1,17 @@
# Arduino Core for SAMD21 and SAMD51 CPU
# Arduino Core for SAMD21 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).
This repository containts the source code and configuration files of the Arduino Core
for Atmel's SAMD21 processor (used on the Arduino Zero board).
In particular, this adds support for the Adafruit SAMD Boards such as the Feather M0
## Bugs or Issues
## Installation on Arduino IDE
* AREF must be tied to 3.3V for dac to work. This is a bug in the SAMD51 silicon.
* USB host mode doesn't work yet
Install the Adafruit Board Support package json and then install the Adafruit SAMD board package
https://learn.adafruit.com/adafruit-feather-m0-basic-proto/using-with-arduino-ide
## Bugs or Issues
If you find a bug you can submit an issue here on github:

View file

@ -1,13 +1,8 @@
SAMD CORE 1.6.10
* The linker script must define `__text_start__` symbol at the beginning of .text section.
This symbol is used to automatically determine the bootloader size.
SAMD CORE 1.6.6
* `digitalPinToInterrupt` #define moved to Arduino.h, variant.h must no longer define it.
* digitalPinToInterrupt #define moved to Arduino.h, variant.h must no longer define it
SAMD CORE 1.6.3
* Timer for pin PWM selected based on value of `PIN_ATTR_TIMER_ALT` or `PIN_ATTR_TIMER`.
Prior to this "pin type" (ulPinType) was used.
* Timer for pin PWM selected based on value of PIN_ATTR_TIMER_ALT or PIN_ATTR_TIMER,
prior to this "pin type" (ulPinType) was used

2630
boards.txt

File diff suppressed because it is too large Load diff

View file

@ -71,7 +71,10 @@ endif
# Adafruit Feather Zero (0x239A 0x000B)
#CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x0B -DUSB_VID_LOW=0x9A -DUSB_VID_HIGH=0x23
# Adafruit Feather SAMR (0x239A 0x0014)
CFLAGS_EXTRA?=-D__SAMR21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x14 -DUSB_VID_LOW=0x9A -DUSB_VID_HIGH=0x23
#CFLAGS_EXTRA?=-D__SAMR21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x14 -DUSB_VID_LOW=0x9A -DUSB_VID_HIGH=0x23
# Adafruit SAMD10
CFLAGS_EXTRA?=-D__SAMD10D14AM__ -DSAM_BA_INTERFACE=SAM_BA_UART_ONLY -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x00 -DUSB_VID_LOW=0x9A -DUSB_VID_HIGH=0x23
# Arduino Zero (PID == 0x004D)
# CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x4D -DUSB_VID_LOW=0x41 -DUSB_VID_HIGH=0x23
# Genuino Zero (PID == 0x024D)
@ -82,7 +85,7 @@ CFLAGS_EXTRA?=-D__SAMR21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x14 -DUSB_VID_
# CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x02 -DUSB_PID_LOW=0x4E -DUSB_VID_LOW=0x41 -DUSB_VID_HIGH=0x23
# samd or samr
NAME=samr21_sam_ba
NAME=samd10_sam_ba
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/Device/ATMEL/"

View file

@ -17,17 +17,8 @@
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 "Genuino Zero"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x02
#define USB_PID_LOW 0x4D
#ifndef _BOARD_DEF_D10_H_
#define _BOARD_DEF_D10_H_
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -44,25 +35,25 @@
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define BOOT_PIN_MASK (1U << (BOOT_LOAD_PIN & 0x1f))
#define CPU_FREQUENCY (48000000ul)
#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_PER_CLOCK_INDEX GCLK_ID_SERCOM0_CORE
#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_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)
/* Calibration values for DFLL48 pll */
/* Master clock frequency */
#define VARIANT_MCK CPU_FREQUENCY
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
@ -70,12 +61,12 @@
* LEDs definitions
*/
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LED_PIN (9)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
#define BOARD_LEDRX_PORT (0)
#define BOARD_LEDRX_PIN (9)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#define BOARD_LEDTX_PIN (9)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -17,17 +17,8 @@
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 Zero"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x4D
#ifndef _BOARD_DEF_FEATHER_H_
#define _BOARD_DEF_FEATHER_H_
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -44,25 +35,25 @@
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define BOOT_PIN_MASK (1U << (BOOT_LOAD_PIN & 0x1f))
#define CPU_FREQUENCY (48000000ul)
#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_PER_CLOCK_INDEX GCLK_ID_SERCOM0_CORE
#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_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)
/* Calibration values for DFLL48 pll */
/* Master clock frequency */
#define VARIANT_MCK CPU_FREQUENCY
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)

View file

@ -20,53 +20,13 @@
#ifndef _BOARD_DEFINITIONS_H_
#define _BOARD_DEFINITIONS_H_
/*
* 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 defined(__SAMR21G18A__) || defined(__SAMD21G18A__)
#include "board_def_feather.h"
#endif
/*
* 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_PIN_MASK (1U << (BOOT_LOAD_PIN & 0x1f))
#if defined(__SAMD10D14AM__)
#include "board_def_d10.h"
#endif
#define CPU_FREQUENCY (48000000ul)
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM0
#define BOOT_USART_PER_CLOCK_INDEX GCLK_ID_SERCOM0_CORE
#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_PAD1 PINMUX_UNUSED
#define BOOT_USART_PAD0 PINMUX_UNUSED
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
/* Master clock frequency */
#define VARIANT_MCK CPU_FREQUENCY
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
/*
* LEDs definitions
*/
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -17,6 +17,8 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include <string.h>
#include "board_driver_usb.h"
#include "sam_ba_usb.h"
@ -400,3 +402,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

@ -20,6 +20,8 @@
#ifndef _BOARD_DRIVER_USB_H_
#define _BOARD_DRIVER_USB_H_
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include "sam_ba_cdc.h"
extern UsbDeviceDescriptor usb_endpoint_table[MAX_EP];
@ -42,4 +44,5 @@ void USB_SendZlp(Usb *pUsb);
void USB_SetAddress(Usb *pUsb, uint16_t wValue);
void USB_Configure(Usb *pUsb);
#endif
#endif // _BOARD_DRIVER_USB_H_

View file

@ -17,6 +17,8 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include "sam_ba_cdc.h"
#include "board_driver_usb.h"
@ -100,3 +102,5 @@ uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length)
return length;
}
#endif

View file

@ -20,6 +20,8 @@
#ifndef _SAM_BA_USB_CDC_H_
#define _SAM_BA_USB_CDC_H_
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include <stdint.h>
#include "sam_ba_usb.h"
@ -88,4 +90,6 @@ uint32_t cdc_read_buf(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
*/
uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
#endif
#endif // _SAM_BA_USB_CDC_H_

View file

@ -17,6 +17,8 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include <stdint.h>
#include <string.h>
#include "sam_ba_usb.h"
@ -485,4 +487,6 @@ uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t length, uin
return USB_Write(pUsb, (const char*)unicode_string, resulting_length, USB_EP_CTRL);
}
#endif
#endif // 0

View file

@ -20,6 +20,8 @@
#ifndef CDC_ENUMERATE_H
#define CDC_ENUMERATE_H
#if (SAM_BA_INTERFACE != SAM_BA_UART_ONLY)
#include <sam.h>
#include <stdbool.h>
@ -102,6 +104,6 @@ uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t length, uin
extern USB_CDC sam_ba_cdc;
#endif
#endif // CDC_ENUMERATE_H

Binary file not shown.

View file

@ -0,0 +1,249 @@
:10000000FC7F00204D020000390200003D0200008C
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000410200008D
:10003000000000000000000045020000490200002E
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD1000002001
:1000600000000000580F000008B5084B002B03D01B
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000580F0000140000200C0000200000000099
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
:1000D0001C42F7D1084B1A430260C3695A07FCD48B
:1000E000C0239B0243608181C3699C07FCD40368E1
:1000F00002221343036010BD04000040037EDA07B0
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0462C00002030B5364A1E23516857
:100140000820994302231943516033498A690243C5
:100150008A613248324A9082908A03439382D368FC
:100160009807FCD52F4B012018701878C40704D5C8
:100170002C48407840B20028F7DB0120986058787E
:1001800040B20028FBDB284C26484460587840B237
:100190000028FBDB82242348E4014480587840B2E5
:1001A0000028FBDB908C8024A0439084D068C50697
:1001B000FCD51E4C1A48C462D4681948E506FBD524
:1001C000848C1B4D2C438484D4681548E506FBD5EC
:1001D000848C02252C438484D0680406FCD5104806
:1001E000C0684506F8D5D068C406FCD500229A60E0
:1001F0005A7852B2002AFBDB0E480A4A50605A78FD
:1002000052B2002AFBDB00230B724B728B72CB7253
:1002100030BDC04600400041000400400C06000014
:1002200000080040000C004001050100B805FF7DFA
:10023000040A0000000703000EBEFEE70DBEFEE745
:1002400005BEFEE702BEFEE701BEFEE70E4A0F480E
:1002500038B5824204D10E4A0E4B93420ED10AE0C9
:100260000D4C9442F7D00023D1188842F3D9E558B9
:1002700004330D60F8E700F04DF804E09342FAD241
:10028000002102C3FAE7FEE7000000201000002072
:10029000BC010020100000205C0F0000194A10B5BE
:1002A0001188FA24013189B2174BA400A14201D070
:1002B00011801CE000211180144900240C57604378
:1002C0001C88001980B204B2FF2C01DC188002E007
:1002D000FF20188008700024185F002803DA00202F
:1002E00018800120087080200949800088611288E8
:1002F00000215B5E9A4203D18022054B92005A6135
:1003000010BDC0462E00002030000020000000205C
:100310000044004110B5234B802292009A605A613C
:10032000214A1C1C117801221140204B0022002977
:100330000AD118681E4A904201D1196018E01A606B
:100340001C4A013A002AFCD11A601B4B1A68191C7E
:10035000501C0DD0D8B200280AD180208000A061A6
:1003600082F30888FF229343144A93604B6818472E
:10037000FFF7E2FE62B600F0CBFA80239B00A36198
:100380000320FFF78BFF0E4B1B78002BF8D100F0FA
:1003900033FB0028F4D0012000F014F800F068F8D6
:1003A000FCE7C0460044004138040040FC7F0020C8
:1003B0003581730748E801000020000000ED00E0EF
:1003C00032000020012804D1024B034A1A60034B7B
:1003D00018707047A0000020000D000039000020B8
:1003E00030B51A4B85B01B78002B29D0042901D1D8
:1003F000026804E0022901D1028800E00278490085
:1004000004A843180B3B5C1AA3420BD00F201040EA
:10041000092802D83025284300E037301870120927
:10042000013BF1E701A830230370782343700A22CF
:1004300043189A700D22DA70054B04311B6801E0F5
:10044000034B1B68DB68984705B030BD38000020BF
:10045000A000002072B6EFF30883044A136003681B
:1004600083F30888436818477047C046A4000020FB
:10047000F0B58FB006A9CE4A0B1C31CA31C351CAA0
:1004800051C360CA60C3CB4CCB48A3687A255B03D9
:100490005B0F9B005B58C9490360A26892B253434B
:1004A0000A60C749C74A0B6000231360C64B1D7022
:1004B0000320FFF7F3FEC54BC54D1B68281C1B69C5
:1004C00040219847C34B00221860C34B1D60C34BAB
:1004D000C24DC04F1A60286839688842E8D2BE4BC6
:1004E0001B681A78FF2A00D1F6E1232A00D0CDE15B
:1004F000BB4E3378002B05D0B44BBA481B680221A1
:10050000DB689847B04B1B78532B38D13B682A687F
:1005100093421ED9B04801322A609A1AB24B016840
:100520001B6801310160B14E9A4201D2326000E095
:100530003360A44832680068029000F0BBFB336867
:1005400029685A182A60A44A1668F1181160A84A46
:1005500013702B68013B2B609F4B1A68013A1A609D
:10056000A34BA14A1B7811688B4206D2974A954843
:1005700012680068C91A92699047C04675E1522B0B
:1005800007D1904A914B10681B68974A5B691168C4
:100590006AE14F2B05D18B4B934A1B6812681A7086
:1005A00063E1482B05D1874B8F4A1B6812681A807C
:1005B0005BE1572B05D1834B8B4A1B6812681A608D
:1005C00053E16F2B03D17F4B0121186807E0682BA3
:1005D00008D17C4B84481B6802211B880360FFF70D
:1005E000FFFE42E1772B06D1764B7F481B68042142
:1005F0001B680360F3E7472B13D17B4B1868FFF7A9
:1006000029FF7C4B1B6883F3088862B67A4B1B7802
:10061000002B00D129E16D4B06201B681B68984711
:1006200023E1542B04D101233370684B1B685CE039
:100630004E2B0BD13378002B05D1644B69481B68D6
:100640000221DB689847002333700EE1562B50D10E
:100650005E4D01212B686948DB6898472B680321B0
:10066000DB6867489847674E2B68301CDB680121C0
:1006700098472B680D21DB68634898472B68301C2E
:10068000DB6801219847544F604B544E3B60002378
:1006900033603A1C311C1368581C10601B7803939C
:1006A000002B03D00B6801330B60F4E72B68316833
:1006B000DB68564898472B685248DB680121984709
:1006C0000398306052483860434A1368591C1160DF
:1006D0001A78424B002A03D01A6801321A60F3E7F5
:1006E0002A681968D36898472B68DB683D4802215F
:1006F000BAE03D4A582B15D12F4E314D366813685C
:100700002A68B100934208D25808E061414820802D
:10071000207DC507FCD55B18F4E72C4B3E481B68D1
:10072000DB68A0E0592B33D11268264B3B49002AE5
:1007300002D11B680B6026E0086819686368802591
:10074000AB4392086360002A1DD0354B2380237D84
:10075000DE07FCD50023184D2D680095AD08AB428F
:1007600002D3304D258006E09342FAD09D004659D1
:1007700001334E51EFE7257DEE07FCD59D00491969
:100780004019D21ADFE7114B27481B68DB686AE083
:100790005A2B6AD10B4B17681D680026EF19BD4212
:1007A00044D02878311C00F049F90135061CF6E7E1
:1007B000E00C0000004000415800002050000020E4
:1007C0004C0000209C00002048000020A0000020D9
:1007D0005C00002040000020440000205400002065
:1007E00038000020400D0000A8000020AC000020D0
:1007F0003C000020A4000020390000201C0D000057
:10080000450D00001E0D0000490D0000200D0000E8
:100810002C0D000002A5FFFF350D00003400002064
:1008200044A5FFFF04A5FFFF390D00002E4D2F4802
:100830002B680121DB68984707230F223240111CE7
:1008400036093031092A00DD07311020C0186A4608
:100850008154013BF1D22B6804A8DB68082198473A
:100860002B682348DB6803219847224D7A232B709D
:10087000214B00221A60214B1B7893422CD01A4B3B
:1008800001211B681E48DB68984725E0111C3039A0
:10089000C8B2194B092804D81E68320111431960E7
:1008A0001AE0111C4139052903D81868373A0101AB
:1008B00006E0111C6139052904D81D68573A290141
:1008C0000A4308E02C2A03D10E4A1E68166001E094
:1008D00008490A7000221A600B4B1A6801321A602C
:1008E0000A4B1A680132F3E5A00000203D0D00001C
:1008F0003F0D000048000020A80000203800002024
:10090000430D00009C000020540000204400002003
:1009100010B51C4B01201A78022402431A701A4B9E
:100920000F221978914319701978214319701749CA
:100930000C782043087019780A401A701A78202120
:100940000A431A70124B04211A6A0A431A62114BA5
:10095000114A5A805A7852B2002AFBDBC4220F484F
:100960000F499203FFF79CFB0E4A002313700E4AB7
:1009700013700E4A13700E4A13700E4A13700E4A0B
:10098000137010BD4A440041354400414B440041BE
:1009900000040040000C0040144000000008004229
:1009A0002AF60000B000002037010020B10000202E
:1009B000B4000020380100203501002008B5C1B284
:1009C0000248FFF79BFB012008BDC046000800421B
:1009D000024B187E4007C00F7047C0460008004217
:1009E00008B5FFF7F5FF0028FBD00248FFF78CFBA6
:1009F00008BDC0460008004208B5FFF7E9FF002324
:100A0000984205D0FFF7ECFF031C233B5A425341A9
:100A1000181C08BD70B5041C0D1C4618B44204D047
:100A20002078FFF7CBFF0134F8E7281C70BD10B524
:100A3000041CFFF7D5FF2070012010BD0B0A5840A1
:100A4000034B4000C05A0902484080B27047C0467C
:100A5000580D0000F7B50024051C0F1C261CBC42D5
:100A600020D0FFF7BDFF114BC0B21B780190002BC7
:100A70001AD1311CFFF7E2FF0D4B061C1A88002A21
:100A800004D10C4A11782A1C002907D001996A1C4C
:100A90002970802F02D11988013919800134A4B23C
:100AA000151CDCE7301C00E00120FEBD35010020F4
:100AB000B200002036010020F0B53E4E85B0002285
:100AC00003900C1C32703C4B914201D1012201E099
:100AD0003A490C801A707F231C4201D080349C4319
:100AE000FFF77EFF3378C0B2002B07D000253570AA
:100AF000FFF776FF3378C0B2AB4236D1432803D03C
:100B0000712853D01528EBD1012300930120FFF762
:100B100055FF0098FFF752FF00998025C843C0B2E7
:100B2000FFF74CFF039B00270293244A1388002BF6
:100B30001DD1214901930978002918D10198FFF7A7
:100B40003DFF391C0198FFF779FF013D071C002D7F
:100B5000EBD1000AC0B2FFF731FFF8B2FFF72EFF6A
:100B6000FFF73EFF3378002B0AD035701FE0029963
:100B7000013B09781380029B019101330293DDE769
:100B8000C0B2062807D1009B03990133DBB2803144
:100B90000093803C0391002CB8D10420FFF70EFF96
:100BA000FFF71EFF044B01251C7000E00025281CE8
:100BB00005B0F0BD3501002036010020B200002054
:100BC000F0B5384C87B0002301902370994201D1D1
:100BD000012301E0344A1180344A64261370432013
:100BE000FFF7ECFE324FFFF7F3FE002803D1002F92
:100BF00003D0013FF7E7002F03D1013E002EEED1D5
:100C00004DE00125FFF7ECFE2378002B38D1C0B270
:100C10000290012805D004283DD10620FFF7CEFE22
:100C200039E005AE0221301CFFF714FF0198802146
:100C3000FFF710FF23780390002B18D1FFF7D0FEA9
:100C40000702FFF7CDFEBFB223783F18BFB2012BDA
:100C50000DD0039B9F4207D13378AB4204D1EB43C5
:100C60007278DBB29A4204D01820FFF7A7FE002367
:100C700003E00620FFF7A2FE029B2278002A02D0A2
:100C8000002626700BE0012B05D1019A6B1C8032E7
:100C9000DDB20192B6E7054A002313700126301C2D
:100CA00007B0F0BD35010020B20000203601002061
:100CB00000350C0010B50023934203D0CC5CC45423
:100CC0000133F9E710BD0000F8B5C046F8BC08BC18
:100CD0009E467047F8B5C046F8BC08BC9E467047B3
:100CE000080000001000000020000000400000008C
:100CF000800000000001000000020000000400006D
:100D0000BD090000E1090000D1090000150A00003A
:100D10002F0A0000B90A0000C10B00007600200075
:100D20004D617920323620323031360032313A345A
:100D3000333A313100580A0D00590A0D005A002388
:100D40000A0D003E00322E30005B41726475696E00
:100D50006F3A58595A5D000000002110422063305C
:100D60008440A550C660E770088129914AA16BB103
:100D70008CC1ADD1CEE1EFF13112100273325222AB
:100D8000B5529442F772D662399318837BB35AA353
:100D9000BDD39CC3FFF3DEE362244334200401147B
:100DA000E664C774A44485546AA54BB528850995A3
:100DB000EEE5CFF5ACC58DD553367226111630064B
:100DC000D776F6669556B4465BB77AA719973887F3
:100DD000DFF7FEE79DD7BCC7C448E5588668A7780B
:100DE0004008611802282338CCC9EDD98EE9AFF943
:100DF000488969990AA92BB9F55AD44AB77A966AEB
:100E0000711A500A333A122AFDDBDCCBBFFB9EEB92
:100E1000799B588B3BBB1AABA66C877CE44CC55CBA
:100E2000222C033C600C411CAEED8FFDECCDCDDDE2
:100E30002AAD0BBD688D499D977EB66ED55EF44E8A
:100E4000133E322E511E700E9FFFBEEFDDDFFCCF32
:100E50001BBF3AAF599F788F8891A981CAB1EBA186
:100E60000CD12DC14EF16FE18010A100C230E32002
:100E70000450254046706760B9839893FBA3DAB3AA
:100E80003DC31CD37FE35EF3B1029012F322D23252
:100E90003542145277625672EAB5CBA5A89589857A
:100EA0006EF54FE52CD50DC5E234C324A0148104A2
:100EB0006674476424540544DBA7FAB79987B8974A
:100EC0005FE77EF71DC73CD7D326F2369106B016F2
:100ED00057667676154634564CD96DC90EF92FE90A
:100EE000C899E9898AB9ABA9445865480678276842
:100EF000C018E1088238A3287DCB5CDB3FEB1EFBEA
:100F0000F98BD89BBBAB9ABB754A545A376A167A91
:100F1000F10AD01AB32A923A2EFD0FED6CDD4DCDB9
:100F2000AABD8BADE89DC98D267C076C645C454CE1
:100F3000A23C832CE01CC10C1FEF3EFF5DCF7CDF89
:100F40009BAFBABFD98FF89F176E367E554E745E31
:0C0F5000932EB23ED10EF01E00000000F7
:100F5C0001000000690000004100000000000000DA
:040000030000024DAA
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F0020BD050000A9050000AD05000033
:10000000FC7F00204D020000390200003D0200008C
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000B10500001A
:100030000000000000000000B5050000B905000048
:10002000000000000000000000000000410200008D
:10003000000000000000000045020000490200002E
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:10006000000000003C17000008B5084B002B03D02F
:10005000044800E000BF0123237010BD1000002001
:1000600000000000580F000008B5084B002B03D01B
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:100090003C17000060000020580000200000000015
:10009000580F0000140000200C0000200000000099
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
@ -17,364 +17,233 @@
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0467800002070B50368041C988B97
:100140001A1C0821FF32084228D0988B174D014312
:10015000802099839872112353704021144B917120
:1001600050715E68C0202E40800506435E605E6967
:100170003540284358610F4818600F4818615D6882
:100180000E4828408025AD02284358605868800BEF
:100190008003586000235171237105E0137ADA0659
:1001A00002D5201C00F0D8FA207970BDFFFFFF8F28
:1001B000940100209400002014010020FF3F00F073
:1001C000002303714371044B016083600B780222AA
:1001D00013430B707047C0463901000038B5364BE9
:1001E0002021DA6901200A43DA61344B06241A78A7
:1001F00002431A70324B0F22197891431970197803
:10020000214319702F490C782043087019780A404F
:100210001A701A7860210A431A702B4B2B4A5A80A5
:100220005A7852B2002AFBDB294B01211A780A4383
:100230001A709A78D107FCD426480268510B1F2205
:100240001140914200D1052111408C011D8D2249A0
:100250002940214319850468A10C0A401F2A00D1B6
:100260001D221C8D1F210A408C4322431A850268DF
:100270000721D20D0A408A4200D103220A40188D7C
:100280001103164A02400A431A8519787F220A4050
:100290001A701A78042112480A431A7058621A898F
:1002A0000C218A431A811A8901218A431A8100216B
:1002B000802201F0D8F838BD0004004058440041C5
:1002C0003C44004159440041000C004006400000FD
:1002D00000500041246080003FF8FFFFFF8FFFFFC8
:1002E00094010020F7B5141C204A5F0101971D1CE2
:1002F000D319061C5869271C4000400F03301033E7
:10030000C74006D00F1C8022596812060A435A6063
:1003100009E02F1C7B1E9F41154BBF01FF18381CA5
:10032000221C01F097F8019910480835421817610E
:10033000131C5269A104920B890C92030A435A615F
:1003400059690C4A0A405A616B01F318DA790221A3
:100350000A43DA715979802252420A435A716B0179
:10036000F318DB799A07FAD5201CFEBD9401002012
:1003700014010020FF3F00F0F8B51B4E051C337838
:10038000141C002B12D1194B194A1A645A6C920B87
:1003900092035A64586C174A02405A64A2235B00C5
:1003A000EA5C40200243EA54012333704827FF37B8
:1003B000EA5D0123134014D00C4B5A6C9204920C4A
:1003C000A24202D25C6CA404A40C081C221C0849A2
:1003D00001F040F8EB5D01221343EB55002333702D
:1003E00000E01C1C201CF8BD7900002094010020B6
:1003F000D4000020FF3F00F0FF302023002900D16F
:100400001023837170470000094BFF305A69920B2B
:1004100092035A61037A0222134303728279802382
:100420005B4213438371037A9A07FCD57047C04639
:100430009401002080235B421943C9B28172704746
:1004400070B5A02303225B00C254134B134A5C6CAB
:10045000C021144089050C4346255C64FF354024C7
:1004600044550F4D30261D6490256D0046555D6B3B
:1004700015402943922559636D0080214155094D4E
:100480001D63B0256D0044555C6F22405A67B2234E
:100490005B00C15470BDC04694010020FFFFFF8F78
:1004A000D40000205401002030B5364A1E23516884
:1004B0000820994302231943516033498A69024352
:1004C0008A613248324A9082908A03439382D36889
:1004D0009807FCD52F4B012018701878C40704D555
:1004E0002C48407840B20028F7DB0120986058780B
:1004F00040B20028FBDB284C26484460587840B2C4
:100500000028FBDB82242348E4014480587840B271
:100510000028FBDB908C8024A0439084D068C50623
:10052000FCD51E4C1A48C462D4681948E506FBD5B0
:10053000848C1B4D2C438484D4681548E506FBD578
:10054000848C02252C438484D0680406FCD5104892
:10055000C0684506F8D5D068C406FCD500229A606C
:100560005A7852B2002AFBDB0E480A4A50605A7889
:1005700052B2002AFBDB00230B724B728B72CB72E0
:1005800030BDC04600400041000400400C060000A1
:1005900000080040000C004001050100B805FF7D87
:1005A000040A0000000703000EBEFEE70DBEFEE7D2
:1005B00005BEFEE702BEFEE701BEFEE70E4A0F489B
:1005C00038B5824204D10E4A0E4B93420ED10AE056
:1005D0000D4C9442F7D00023D1188842F3D9E55846
:1005E00004330D60F8E700F04DF804E09342FAD2CE
:1005F000002102C3FAE7FEE7000000205C000020B3
:10060000A00300205C00002040170000194A10B52C
:100610001188FA24013189B2174BA400A14201D0FC
:1006200011801CE000211180144900240C57604304
:100630001C88001980B204B2FF2C01DC188002E093
:10064000FF20188008700024185F002803DA0020BB
:100650001880012008708020094980028861128872
:1006600000215B5E9A4203D18022054B92025A61BF
:1006700010BDC0467A0000207C0000200000002051
:100680000044004138B580222B4B92029A605A6197
:100690002A4A1C1C117801221140294B00220029F2
:1006A0000AD11868274A904201D1196018E01A60EF
:1006B000254A013A002AFCD11A60244B1A68191CF9
:1006C000501C0DD0D8B200280AD180208002A06131
:1006D00082F30888FF2293431D4A93604B681847B2
:1006E000FFF7E2FE62B600F0E3FC00F0B7F980230A
:1006F0009B02051CA3610320FFF788FFAB68281C41
:100700009847144B002801D001221A701A78002A49
:1007100005D0002000F01EFA00F07AFAFCE71B7802
:10072000002BE8D100F038FD0028E4D0012000F0D3
:1007300011FA00F06DFAFCE7004400413804004073
:10074000FC7F00203581730748E80100002000008D
:1007500000ED00E07E000020F8B50468051C201CB8
:10076000FF30037AAD4A10210B430372AC4F13786C
:10077000AC493B705378AC4E0B7093783380D17892
:10078000338809020B4333801179A84B19805179C2
:100790001F8809020F431F809779A5490F80D279DE
:1007A0000F8812023A430A80402242719D489C4FB2
:1007B000027838789F4F12020243181CBA4200D1C7
:1007C00099E01EDC802149008A4200D121E107DC4A
:1007D000812A6AD0822A6ED0802A00D019E164E092
:1007E00081235B009A4200D1A8E000DA0DE1C0232A
:1007F0009B009A4200D10CE18F4B9A4200D104E158
:1008000007E190231B019A4242D015DCD023DB0084
:100810009A4222D088231B019A4242D0A023DB00B7
:100820009A4200D0F5E0201CFFF7EEFD31882868E1
:1008300089B2FFF7FFFDF0E0804B9A4200D1E4E07F
:1008400000DCE6E07E4B9A4200D1D2E07D4B9A423A
:1008500000D0DEE033886B71D7E033881B0A012BB0
:1008600008D10B8812222868934201D80A8892B2D4
:100870007549C6E033881B0A022B00D0C9E00B88FB
:1008800043222868934201D80A8892B26F49B8E09F
:100890003388201C2B71FFF7B7FD201CFFF7D0FD1C
:1008A000BBE0291C01C90122ABE0694900230B8090
:1008B00028680222A6E0664900220A801888502291
:1008C0001040644A10701E880F203040188018882D
:1008D000032800D99DE012781B8808335B01E418D7
:1008E000A379002A01D09B0600E0DB06DB0F0B801A
:1008F0002868022285E019887F229143554AC9B2AF
:10090000117018880F21014019803188002900D00A
:100910007FE01988002900D17BE01988032900D9DC
:1009200077E012781B8808335B01E318002A02D0B5
:1009300020225A7169E01020587166E002887F23F6
:100940009A43444BD2B21A7001880F220A400280A7
:100950003288002A5DD10288002A5AD00288032AF0
:1009600057D81B78002B21D0038808335B01E3188C
:100970009B79990649D50388202208335B01E31847
:100980001A71038808335B01E318DB795A063CD5FA
:100990000388402108335B01E318DA790A43DA71EE
:1009A0000388022208335B01E31820E00388083340
:1009B0005B01E3189B79DF0627D5038810220833F3
:1009C0005B01E3181A71038808335B01E318DB79D4
:1009D00099061AD50388202108335B01E318DA79D8
:1009E0000A43DA710388012208335B01E3181A71A4
:1009F0000BE00B8808222868934201D80A8892B23B
:100A000015490023FFF76EFC07E0201CFFF7FCFCF4
:100A100003E0201C0121FFF7EFFCF8BD940000204B
:100A2000890000207F000020800000208600002038
:100A300084000020020300000103000021200000C8
:100A4000A1210000212200009014000004000020D9
:100A500082000020880000204800002010B5054BCF
:100A6000054C2360FFF7BAFB201C2168FFF7A8FBA9
:100A7000201C10BD005000411402002007B5054B9A
:100A80000122019001A91868131CFFF72BFC01201B
:100A90000EBDC0461402002013B5054B6C4607344A
:100AA0001868211C0122FFF767FC207816BDC0469C
:100AB0001402002010B5074C201CFFF73DFB031C5F
:100AC0000020834205D022684823FF33D05C0123F5
:100AD000184010BD1402002010B5054A0C1C031C60
:100AE000191C10680123221CFFF7FCFB201C10BD01
:100AF0001402002070B5084C061C201C0D1CFFF7CA
:100B00001BFB0023984205D02068311C2A1CFFF7EC
:100B100033FC031C181C70BD14020020F8B50C4CEB
:100B2000051C201C0E1CFFF707FB0023271C341C90
:100B300098420AD0002C07D0291C221C3868FFF7E5
:100B40001BFC241A2D18F5E7331C181CF8BDC046F1
:100B500014020020012805D1054B064A1A60064BF5
:100B6000187004E0002802D1044A014B1A60704753
:100B700084020020C4140000910000201015000021
:100B800030B51A4B85B01B78002B29D0042901D130
:100B9000026804E0022901D1028800E002784900DD
:100BA00004A843180B3B5C1AA3420BD00F20104043
:100BB000092802D83025284300E037301870120980
:100BC000013BF1E701A830230370782343700A2228
:100BD00043189A700D22DA70054B04311B6801E04E
:100BE000034B1B68DB68984705B030BD90000020C0
:100BF0008402002072B6EFF30883044A136003688E
:100C000083F30888436818477047C046880200206D
:100C1000F0B58FB006A9CE4A0B1C31CA31C351CAF8
:100C200051C360CA60C3CB4CCB48A3687A255B0331
:100C30005B0F9B005B58C9490360A26892B25343A3
:100C40000A60C749C74A0B6000231360C64B1D707A
:100C50000320FFF7DBFCC54BC54D1B68281C1B6937
:100C600040219847C34B00221860C34B1D60C34B03
:100C7000C24DC04F1A60286839688842E8D2BE4B1E
:100C80001B681A78FF2A00D1F6E1232A00D0CDE1B3
:100C9000BB4E3378002B05D0B44BBA481B680221F9
:100CA000DB689847B04B1B78532B38D13B682A68D8
:100CB00093421ED9B04801322A609A1AB24B016899
:100CC0001B6801310160B14E9A4201D2326000E0EE
:100CD0003360A44832680068029000F0BBFB3368C0
:100CE00029685A182A60A44A1668F1181160A84A9F
:100CF00013702B68013B2B609F4B1A68013A1A60F6
:100D0000A34BA14A1B7811688B4206D2974A95489B
:100D100012680068C91A92699047C04675E1522B63
:100D200007D1904A914B10681B68974A5B6911681C
:100D30006AE14F2B05D18B4B934A1B6812681A70DE
:100D400063E1482B05D1874B8F4A1B6812681A80D4
:100D50005BE1572B05D1834B8B4A1B6812681A60E5
:100D600053E16F2B03D17F4B0121186807E0682BFB
:100D700008D17C4B84481B6802211B880360FFF765
:100D8000FFFE42E1772B06D1764B7F481B6804219A
:100D90001B680360F3E7472B13D17B4B1868FFF701
:100DA00029FF7C4B1B6883F3088862B67A4B1B785B
:100DB000002B00D129E16D4B06201B681B6898476A
:100DC00023E1542B04D101233370684B1B685CE092
:100DD0004E2B0BD13378002B05D1644B69481B682F
:100DE0000221DB689847002333700EE1562B50D167
:100DF0005E4D01212B686948DB6898472B68032109
:100E0000DB6867489847674E2B68301CDB68012118
:100E100098472B680D21DB68634898472B68301C86
:100E2000DB6801219847544F604B544E3B600023D0
:100E300033603A1C311C1368581C10601B780393F4
:100E4000002B03D00B6801330B60F4E72B6831688B
:100E5000DB68564898472B685248DB680121984761
:100E60000398306052483860434A1368591C116037
:100E70001A78424B002A03D01A6801321A60F3E74D
:100E80002A681968D36898472B68DB683D480221B7
:100E9000BAE03D4A582B15D12F4E314D36681368B4
:100EA0002A68B100934208D25808E0614148208086
:100EB000207DC507FCD55B18F4E72C4B3E481B682A
:100EC000DB68A0E0592B33D11268264B3B49002A3E
:100ED00002D11B680B6026E00868196863688025EA
:100EE000AB4392086360002A1DD0354B2380237DDD
:100EF000DE07FCD50023184D2D680095AD08AB42E8
:100F000002D3304D258006E09342FAD09D00465929
:100F100001334E51EFE7257DEE07FCD59D004919C1
:100F20004019D21ADFE7114B27481B68DB686AE0DB
:100F30005A2B6AD10B4B17681D680026EF19BD426A
:100F400044D02878311C00F049F90135061CF6E739
:100F5000A4140000004000413C02002034020020A4
:100F600030020020800200202C0200208402002099
:100F70004002002024020020280200203802002025
:100F800090000020041500008C0200209002002038
:100F9000200200208802002091000020E0140000C0
:100FA00009150000E21400002C150000E4140000F4
:100FB000F014000002A5FFFFF91400008C000020CF
:100FC00044A5FFFF04A5FFFFFD1400002E4D2F4890
:100FD0002B680121DB68984707230F223240111C40
:100FE00036093031092A00DD07311020C0186A4661
:100FF0008154013BF1D22B6804A8DB680821984793
:101000002B682348DB6803219847224D7A232B70F5
:10101000214B00221A60214B1B7893422CD01A4B93
:1010200001211B681E48DB68984725E0111C3039F8
:10103000C8B2194B092804D81E683201114319603F
:101040001AE0111C4139052903D81868373A010103
:1010500006E0111C6139052904D81D68573A290199
:101060000A4308E02C2A03D10E4A1E68166001E0EC
:1010700008490A7000221A600B4B1A6801321A6084
:101080000A4B1A680132F3E58402002001150000C2
:10109000031500002C0200208C020020900000208C
:1010A00007150000800200203802002028020020DE
:1010B00010B51C4B01201A78022402431A701A4BF7
:1010C0000F22197891431970197821431970174923
:1010D0000C782043087019780A401A701A78202179
:1010E0000A431A70124B04211A6A0A431A62114BFE
:1010F000114A5A805A7852B2002AFBDBC4220F48A8
:101100000F499203FEF7CCFF0E4A002313700E4ADC
:1011100013700E4A13700E4A13700E4A13700E4A63
:10112000137010BD4A440041354400414B44004116
:1011300000040040000C0040144000000008004281
:101140002AF60000940200201B03002095020020D4
:10115000980200201C0300201903002008B5C1B22A
:101160000248FEF7CBFF012008BDC0460008004240
:10117000024B187E4007C00F7047C046000800426F
:1011800008B5FFF7F5FF0028FBD00248FEF7BCFFCB
:1011900008BDC0460008004208B5FFF7E9FF00237C
:1011A000984205D0FFF7ECFF031C233B5A42534102
:1011B000181C08BD70B5041C0D1C4618B44204D0A0
:1011C0002078FFF7CBFF0134F8E7281C70BD10B57D
:1011D000041CFFF7D5FF2070012010BD0B0A5840FA
:1011E000034B4000C05A0902484080B27047C046D5
:1011F0003A150000F7B50024051C0F1C261CBC4244
:1012000020D0FFF7BDFF114BC0B21B780190002B1F
:101210001AD1311CFFF7E2FF0D4B061C1A88002A79
:1012200004D10C4A11782A1C002907D001996A1CA4
:101230002970802F02D11988013919800134A4B294
:10124000151CDCE7301C00E00120FEBD1903002066
:10125000960200201A030020F0B53E4E85B0002211
:1012600003900C1C32703C4B914201D1012201E0F1
:101270003A490C801A707F231C4201D080349C4371
:10128000FFF77EFF3378C0B2002B07D00025357002
:10129000FFF776FF3378C0B2AB4236D1432803D094
:1012A000712853D01528EBD1012300930120FFF7BB
:1012B00055FF0098FFF752FF00998025C843C0B240
:1012C000FFF74CFF039B00270293244A1388002B4F
:1012D0001DD1214901930978002918D10198FFF700
:1012E0003DFF391C0198FFF779FF013D071C002DD8
:1012F000EBD1000AC0B2FFF731FFF8B2FFF72EFFC3
:10130000FFF73EFF3378002B0AD035701FE00299BB
:10131000013B09781380029B019101330293DDE7C1
:10132000C0B2062807D1009B03990133DBB280319C
:101330000093803C0391002CB8D10420FFF70EFFEE
:10134000FFF71EFF044B01251C7000E00025281C40
:1013500005B0F0BD190300201A03002096020020FA
:10136000F0B5384C87B0002301902370994201D129
:10137000012301E0344A1180344A6426137043206B
:10138000FFF7ECFE324FFFF7F3FE002803D1002FEA
:1013900003D0013FF7E7002F03D1013E002EEED12D
:1013A0004DE00125FFF7ECFE2378002B38D1C0B2C9
:1013B0000290012805D004283DD10620FFF7CEFE7B
:1013C00039E005AE0221301CFFF714FF019880219F
:1013D000FFF710FF23780390002B18D1FFF7D0FE02
:1013E0000702FFF7CDFEBFB223783F18BFB2012B33
:1013F0000DD0039B9F4207D13378AB4204D1EB431E
:101400007278DBB29A4204D01820FFF7A7FE0023BF
:1014100003E00620FFF7A2FE029B2278002A02D0FA
:10142000002626700BE0012B05D1019A6B1C80323F
:10143000DDB20192B6E7054A002313700126301C85
:1014400007B0F0BD19030020960200201A03002007
:1014500000350C0010B50023934203D0CC5CC4547B
:101460000133F9E710BD031C8218934202D01970B2
:101470000133FAE770470000F8B5C046F8BC08BC75
:101480009E467047F8B5C046F8BC08BC9E467047FB
:1014900012010002020000409A2314000002000022
:1014A0000001000008000000100000002000000003
:1014B0004000000080000000000100000002000069
:1014C000000400005D110000811100007111000096
:1014D000B5110000CF110000591200006113000087
:1014E00076002000417072203137203230313600D2
:1014F00032323A34393A313900580A0D00590A0D5E
:10150000005A00230A0D003E00322E300000000079
:101510007D0A0000990A0000B50A0000D90A0000FF
:10152000F50A0000D90A00001D0B00005B4172643F
:1015300075696E6F3A58595A5D00000021104220BB
:1015400063308440A550C660E770088129914AA1A4
:101550006BB18CC1ADD1CEE1EFF13112100273321B
:101560005222B5529442F772D662399318837BB3F4
:101570005AA3BDD39CC3FFF3DEE3622443342004AB
:101580000114E664C774A44485546AA54BB5288544
:101590000995EEE5CFF5ACC58DD5533672261116FB
:1015A0003006D776F6669556B4465BB77AA7199794
:1015B0003887DFF7FEE79DD7BCC7C448E558866883
:1015C000A7784008611802282338CCC9EDD98EE9E4
:1015D000AFF9488969990AA92BB9F55AD44AB77A5B
:1015E000966A711A500A333A122AFDDBDCCBBFFB34
:1015F0009EEB799B588B3BBB1AABA66C877CE44C6B
:10160000C55C222C033C600C411CAEED8FFDECCD83
:10161000CDDD2AAD0BBD688D499D977EB66ED55E3A
:10162000F44E133E322E511E700E9FFFBEEFDDDFD3
:10163000FCCF1BBF3AAF599F788F8891A981CAB15F
:10164000EBA10CD12DC14EF16FE18010A100C23091
:10165000E3200450254046706760B9839893FBA34C
:10166000DAB33DC31CD37FE35EF3B1029012F322E1
:10167000D2323542145277625672EAB5CBA5A8959C
:1016800089856EF54FE52CD50DC5E234C324A01431
:1016900081046674476424540544DBA7FAB799872C
:1016A000B8975FE77EF71DC73CD7D326F236910681
:1016B000B01657667676154634564CD96DC90EF974
:1016C0002FE9C899E9898AB9ABA9445865480678D1
:1016D0002768C018E1088238A3287DCB5CDB3FEB8C
:1016E0001EFBF98BD89BBBAB9ABB754A545A376A21
:1016F000167AF10AD01AB32A923A2EFD0FED6CDD5C
:101700004DCDAABD8BADE89DC98D267C076C645C70
:10171000454CA23C832CE01CC10C1FEF3EFF5DCF6B
:101720007CDF9BAFBABFD98FF89F176E367E554EC0
:10173000745E932EB23ED10EF01E00000000000039
:101740000100000009024300020100803209040088
:10175000000102020000052400100104240200051B
:10176000240600010524010001070583030800FF8A
:1017700009040100020A0000000705810240000080
:10178000070502024000000000C20100000008003E
:0C179000690000004100000000000000A3
:04000003000005BD37
:100130007047C0462C00002030B5364A1E23516857
:100140000820994302231943516033498A690243C5
:100150008A613248324A9082908A03439382D368FC
:100160009807FCD52F4B012018701878C40704D5C8
:100170002C48407840B20028F7DB0120986058787E
:1001800040B20028FBDB284C26484460587840B237
:100190000028FBDB82242348E4014480587840B2E5
:1001A0000028FBDB908C8024A0439084D068C50697
:1001B000FCD51E4C1A48C462D4681948E506FBD524
:1001C000848C1B4D2C438484D4681548E506FBD5EC
:1001D000848C02252C438484D0680406FCD5104806
:1001E000C0684506F8D5D068C406FCD500229A60E0
:1001F0005A7852B2002AFBDB0E480A4A50605A78FD
:1002000052B2002AFBDB00230B724B728B72CB7253
:1002100030BDC04600400041000400400C06000014
:1002200000080040000C004001050100B805FF7DFA
:10023000040A0000000703000EBEFEE70DBEFEE745
:1002400005BEFEE702BEFEE701BEFEE70E4A0F480E
:1002500038B5824204D10E4A0E4B93420ED10AE0C9
:100260000D4C9442F7D00023D1188842F3D9E558B9
:1002700004330D60F8E700F04DF804E09342FAD241
:10028000002102C3FAE7FEE7000000201000002072
:10029000BC010020100000205C0F0000194A10B5BE
:1002A0001188FA24013189B2174BA400A14201D070
:1002B00011801CE000211180144900240C57604378
:1002C0001C88001980B204B2FF2C01DC188002E007
:1002D000FF20188008700024185F002803DA00202F
:1002E00018800120087080200949800288611288E6
:1002F00000215B5E9A4203D18022054B92025A6133
:1003000010BDC0462E00002030000020000000205C
:100310000044004110B5234B802292029A605A613A
:10032000214A1C1C117801221140204B0022002977
:100330000AD118681E4A904201D1196018E01A606B
:100340001C4A013A002AFCD11A601B4B1A68191C7E
:10035000501C0DD0D8B200280AD180208002A061A4
:1003600082F30888FF229343144A93604B6818472E
:10037000FFF7E2FE62B600F0CBFA80239B02A36196
:100380000320FFF78BFF0E4B1B78002BF8D100F0FA
:1003900033FB0028F4D0012000F014F800F068F8D6
:1003A000FCE7C0460044004138040040FC7F0020C8
:1003B0003581730748E801000020000000ED00E0EF
:1003C00032000020012804D1024B034A1A60034B7B
:1003D00018707047A0000020000D000039000020B8
:1003E00030B51A4B85B01B78002B29D0042901D1D8
:1003F000026804E0022901D1028800E00278490085
:1004000004A843180B3B5C1AA3420BD00F201040EA
:10041000092802D83025284300E037301870120927
:10042000013BF1E701A830230370782343700A22CF
:1004300043189A700D22DA70054B04311B6801E0F5
:10044000034B1B68DB68984705B030BD38000020BF
:10045000A000002072B6EFF30883044A136003681B
:1004600083F30888436818477047C046A4000020FB
:10047000F0B58FB006A9CE4A0B1C31CA31C351CAA0
:1004800051C360CA60C3CB4CCB48A3687A255B03D9
:100490005B0F9B005B58C9490360A26892B253434B
:1004A0000A60C749C74A0B6000231360C64B1D7022
:1004B0000320FFF7F3FEC54BC54D1B68281C1B69C5
:1004C00040219847C34B00221860C34B1D60C34BAB
:1004D000C24DC04F1A60286839688842E8D2BE4BC6
:1004E0001B681A78FF2A00D1F6E1232A00D0CDE15B
:1004F000BB4E3378002B05D0B44BBA481B680221A1
:10050000DB689847B04B1B78532B38D13B682A687F
:1005100093421ED9B04801322A609A1AB24B016840
:100520001B6801310160B14E9A4201D2326000E095
:100530003360A44832680068029000F0BBFB336867
:1005400029685A182A60A44A1668F1181160A84A46
:1005500013702B68013B2B609F4B1A68013A1A609D
:10056000A34BA14A1B7811688B4206D2974A954843
:1005700012680068C91A92699047C04675E1522B0B
:1005800007D1904A914B10681B68974A5B691168C4
:100590006AE14F2B05D18B4B934A1B6812681A7086
:1005A00063E1482B05D1874B8F4A1B6812681A807C
:1005B0005BE1572B05D1834B8B4A1B6812681A608D
:1005C00053E16F2B03D17F4B0121186807E0682BA3
:1005D00008D17C4B84481B6802211B880360FFF70D
:1005E000FFFE42E1772B06D1764B7F481B68042142
:1005F0001B680360F3E7472B13D17B4B1868FFF7A9
:1006000029FF7C4B1B6883F3088862B67A4B1B7802
:10061000002B00D129E16D4B06201B681B68984711
:1006200023E1542B04D101233370684B1B685CE039
:100630004E2B0BD13378002B05D1644B69481B68D6
:100640000221DB689847002333700EE1562B50D10E
:100650005E4D01212B686948DB6898472B680321B0
:10066000DB6867489847674E2B68301CDB680121C0
:1006700098472B680D21DB68634898472B68301C2E
:10068000DB6801219847544F604B544E3B60002378
:1006900033603A1C311C1368581C10601B7803939C
:1006A000002B03D00B6801330B60F4E72B68316833
:1006B000DB68564898472B685248DB680121984709
:1006C0000398306052483860434A1368591C1160DF
:1006D0001A78424B002A03D01A6801321A60F3E7F5
:1006E0002A681968D36898472B68DB683D4802215F
:1006F000BAE03D4A582B15D12F4E314D366813685C
:100700002A68B100934208D25808E061414820802D
:10071000207DC507FCD55B18F4E72C4B3E481B68D1
:10072000DB68A0E0592B33D11268264B3B49002AE5
:1007300002D11B680B6026E0086819686368802591
:10074000AB4392086360002A1DD0354B2380237D84
:10075000DE07FCD50023184D2D680095AD08AB428F
:1007600002D3304D258006E09342FAD09D004659D1
:1007700001334E51EFE7257DEE07FCD59D00491969
:100780004019D21ADFE7114B27481B68DB686AE083
:100790005A2B6AD10B4B17681D680026EF19BD4212
:1007A00044D02878311C00F049F90135061CF6E7E1
:1007B000E00C0000004000415800002050000020E4
:1007C0004C0000209C00002048000020A0000020D9
:1007D0005C00002040000020440000205400002065
:1007E00038000020400D0000A8000020AC000020D0
:1007F0003C000020A4000020390000201C0D000057
:10080000450D00001E0D0000490D0000200D0000E8
:100810002C0D000002A5FFFF350D00003400002064
:1008200044A5FFFF04A5FFFF390D00002E4D2F4802
:100830002B680121DB68984707230F223240111CE7
:1008400036093031092A00DD07311020C0186A4608
:100850008154013BF1D22B6804A8DB68082198473A
:100860002B682348DB6803219847224D7A232B709D
:10087000214B00221A60214B1B7893422CD01A4B3B
:1008800001211B681E48DB68984725E0111C3039A0
:10089000C8B2194B092804D81E68320111431960E7
:1008A0001AE0111C4139052903D81868373A0101AB
:1008B00006E0111C6139052904D81D68573A290141
:1008C0000A4308E02C2A03D10E4A1E68166001E094
:1008D00008490A7000221A600B4B1A6801321A602C
:1008E0000A4B1A680132F3E5A00000203D0D00001C
:1008F0003F0D000048000020A80000203800002024
:10090000430D00009C000020540000204400002003
:1009100010B51C4B01201A78022402431A701A4B9E
:100920000F221978914319701978214319701749CA
:100930000C782043087019780A401A701A78202120
:100940000A431A70124B04211A6A0A431A62114BA5
:10095000114A5A805A7852B2002AFBDBC4220F484F
:100960000F499203FFF79CFB0E4A002313700E4AB7
:1009700013700E4A13700E4A13700E4A13700E4A0B
:10098000137010BD4A440041354400414B440041BE
:1009900000040040000C0040144000000008004229
:1009A0002AF60000B000002037010020B10000202E
:1009B000B4000020380100203501002008B5C1B284
:1009C0000248FFF79BFB012008BDC046000800421B
:1009D000024B187E4007C00F7047C0460008004217
:1009E00008B5FFF7F5FF0028FBD00248FFF78CFBA6
:1009F00008BDC0460008004208B5FFF7E9FF002324
:100A0000984205D0FFF7ECFF031C233B5A425341A9
:100A1000181C08BD70B5041C0D1C4618B44204D047
:100A20002078FFF7CBFF0134F8E7281C70BD10B524
:100A3000041CFFF7D5FF2070012010BD0B0A5840A1
:100A4000034B4000C05A0902484080B27047C0467C
:100A5000580D0000F7B50024051C0F1C261CBC42D5
:100A600020D0FFF7BDFF114BC0B21B780190002BC7
:100A70001AD1311CFFF7E2FF0D4B061C1A88002A21
:100A800004D10C4A11782A1C002907D001996A1C4C
:100A90002970802F02D11988013919800134A4B23C
:100AA000151CDCE7301C00E00120FEBD35010020F4
:100AB000B200002036010020F0B53E4E85B0002285
:100AC00003900C1C32703C4B914201D1012201E099
:100AD0003A490C801A707F231C4201D080349C4319
:100AE000FFF77EFF3378C0B2002B07D000253570AA
:100AF000FFF776FF3378C0B2AB4236D1432803D03C
:100B0000712853D01528EBD1012300930120FFF762
:100B100055FF0098FFF752FF00998025C843C0B2E7
:100B2000FFF74CFF039B00270293244A1388002BF6
:100B30001DD1214901930978002918D10198FFF7A7
:100B40003DFF391C0198FFF779FF013D071C002D7F
:100B5000EBD1000AC0B2FFF731FFF8B2FFF72EFF6A
:100B6000FFF73EFF3378002B0AD035701FE0029963
:100B7000013B09781380029B019101330293DDE769
:100B8000C0B2062807D1009B03990133DBB2803144
:100B90000093803C0391002CB8D10420FFF70EFF96
:100BA000FFF71EFF044B01251C7000E00025281CE8
:100BB00005B0F0BD3501002036010020B200002054
:100BC000F0B5384C87B0002301902370994201D1D1
:100BD000012301E0344A1180344A64261370432013
:100BE000FFF7ECFE324FFFF7F3FE002803D1002F92
:100BF00003D0013FF7E7002F03D1013E002EEED1D5
:100C00004DE00125FFF7ECFE2378002B38D1C0B270
:100C10000290012805D004283DD10620FFF7CEFE22
:100C200039E005AE0221301CFFF714FF0198802146
:100C3000FFF710FF23780390002B18D1FFF7D0FEA9
:100C40000702FFF7CDFEBFB223783F18BFB2012BDA
:100C50000DD0039B9F4207D13378AB4204D1EB43C5
:100C60007278DBB29A4204D01820FFF7A7FE002367
:100C700003E00620FFF7A2FE029B2278002A02D0A2
:100C8000002626700BE0012B05D1019A6B1C8032E7
:100C9000DDB20192B6E7054A002313700126301C2D
:100CA00007B0F0BD35010020B20000203601002061
:100CB00000350C0010B50023934203D0CC5CC45423
:100CC0000133F9E710BD0000F8B5C046F8BC08BC18
:100CD0009E467047F8B5C046F8BC08BC9E467047B3
:100CE000080000001000000020000000400000008C
:100CF000800000000001000000020000000400006D
:100D0000BD090000E1090000D1090000150A00003A
:100D10002F0A0000B90A0000C10B00007600200075
:100D20004D617920323620323031360032303A355A
:100D3000393A323000580A0D00590A0D005A002382
:100D40000A0D003E00322E30005B41726475696E00
:100D50006F3A58595A5D000000002110422063305C
:100D60008440A550C660E770088129914AA16BB103
:100D70008CC1ADD1CEE1EFF13112100273325222AB
:100D8000B5529442F772D662399318837BB35AA353
:100D9000BDD39CC3FFF3DEE362244334200401147B
:100DA000E664C774A44485546AA54BB528850995A3
:100DB000EEE5CFF5ACC58DD553367226111630064B
:100DC000D776F6669556B4465BB77AA719973887F3
:100DD000DFF7FEE79DD7BCC7C448E5588668A7780B
:100DE0004008611802282338CCC9EDD98EE9AFF943
:100DF000488969990AA92BB9F55AD44AB77A966AEB
:100E0000711A500A333A122AFDDBDCCBBFFB9EEB92
:100E1000799B588B3BBB1AABA66C877CE44CC55CBA
:100E2000222C033C600C411CAEED8FFDECCDCDDDE2
:100E30002AAD0BBD688D499D977EB66ED55EF44E8A
:100E4000133E322E511E700E9FFFBEEFDDDFFCCF32
:100E50001BBF3AAF599F788F8891A981CAB1EBA186
:100E60000CD12DC14EF16FE18010A100C230E32002
:100E70000450254046706760B9839893FBA3DAB3AA
:100E80003DC31CD37FE35EF3B1029012F322D23252
:100E90003542145277625672EAB5CBA5A89589857A
:100EA0006EF54FE52CD50DC5E234C324A0148104A2
:100EB0006674476424540544DBA7FAB79987B8974A
:100EC0005FE77EF71DC73CD7D326F2369106B016F2
:100ED00057667676154634564CD96DC90EF92FE90A
:100EE000C899E9898AB9ABA9445865480678276842
:100EF000C018E1088238A3287DCB5CDB3FEB1EFBEA
:100F0000F98BD89BBBAB9ABB754A545A376A167A91
:100F1000F10AD01AB32A923A2EFD0FED6CDD4DCDB9
:100F2000AABD8BADE89DC98D267C076C645C454CE1
:100F3000A23C832CE01CC10C1FEF3EFF5DCF7CDF89
:100F40009BAFBABFD98FF89F176E367E554E745E31
:0C0F5000932EB23ED10EF01E00000000F7
:100F5C0001000000690000004100000000000000DA
:040000030000024DAA
:00000001FF

View file

@ -1,457 +0,0 @@
:10000000FCFF022055060000390600003D060000F6
:1000100041060000450600004906000000000000FF
:100020000000000000000000000000004D0600007D
:10003000000000000000000051060000E50700007D
:1000400010B5054C237833B9044B13B10448AFF312
:1000500000800123237010BD5C0000200000000020
:10006000041C000008B5064B1BB106480649AFF357
:1000700000800648036813B1054B03B1984708BDDB
:1000800000000000041C0000600000205800002058
:10009000000000001A4B1B7813F0FF0F0AD1194B18
:1000A0001A78194909780A44D2B21A704FF400122A
:1000B000164BDA61124B1A780132D2B21A70114B18
:1000C0001B78DBB2F02B04D80E4B1B78DBB2092B6C
:1000D0000AD80D4B1A785242D2B21A70094A1178D6
:1000E0001B780B44DBB21370054B1A78054B1B7859
:1000F000D2B29A4203D14FF40012044BDA61704736
:100100007800002001000020000000200080004155
:1001100010B4C36913F0020FFBD104686FF34104FC
:100120000460C36913F0010FFBD1046844F00104BB
:100130000460036813F0010FFBD1C36913F0010FD2
:10014000FBD1C36913F0020FF7D142F0804343F0B3
:1001500004030360C36913F0040FFBD14FF4403371
:1001600043608181C36913F0020FFBD1036843F040
:10017000020303605DF8044B704700BF037E13F079
:10018000010FFBD081627047037E13F0040FFBD098
:10019000438B13F0010F07D1438B13F0020F03D1F0
:1001A000438B13F0040F02D00122024B1A70806AB5
:1001B000C0B270477900002070B5044603689A8B7E
:1001C00002F0080292B232B308259D8380229A720F
:1001D000112183F80011402183F8051183F80421CF
:1001E000114A5068032666F31E705060506966F32A
:1001F0001E7050610D4810600D481061506865F325
:100200009B30506050686FF30D00506083F804110C
:100210000023237106E093F8073113F0100F01D08B
:1002200000F022FB207970BD940100209400002092
:10023000140100200160002303714371054B8360AA
:100240000B7843F002030B700268937813F0020FEF
:10025000FBD17047B901000008B5444A936943F0E7
:1002600001039361424B93F8581041F0010183F868
:10027000581093F83C1001F0F00183F83C1093F80B
:100280003C1041F0070183F83C1093F8591041F0FD
:10029000010183F8591093F83C1001F00F0183F825
:1002A0003C1093F83C1041F0700183F83C10402161
:1002B000304BC3F8A810936943F00103936102F532
:1002C000A052536813F0040FFBD14FF082431A7809
:1002D00042F001021A701A46937813F0010FFBD115
:1002E000254B1968C1F34412C1F3822311F01F0199
:1002F00003D01F2908BF092100E009211AB11F2AD4
:1003000008BF192200E019221BB1072B08BF0623E2
:1003100000E0062302F01F0242EA81111B0303F4EE
:10032000E04319434FF082431985DA7842F0030223
:10033000DA70DA7842F00C02DA701A786FF3C712CA
:100340001A701A7842F004021A700C4858621A891E
:100350006FF383021A811A8922F001021204120C2F
:100360001A810021802201F0C6FA08BD0008004071
:1003700000800041001C00408400800094010020A7
:100380002DE9F041064615461C461F46214B03EB5E
:10039000441310335B68C3F302730333012202FA80
:1003A00003F3AB4207D81B4A02EB4412536943F0F4
:1003B000004353610CE014F1000818BF4FF001082E
:1003C000154B03EB881840462A4601F08BFA41464C
:1003D000104A02EB441202F110031161526965F3F5
:1003E0000D025A605A686FF39B325A60083406EB6C
:1003F00044140223E371637943F08003637107F1CE
:10040000080106EB4111CB7913F0020FFBD028460F
:10041000BDE8F081940100201401002038B50546A4
:1004200014461B4B1B7813F0FF0F13D1194B1A4ABC
:100430001A645A6C6FF30D025A645A6C6FF39B3254
:100440005A6490F8443143F0400380F8443101226B
:100450000F4B1A7095F8473113F0010F15D00D4B63
:100460005B6CC3F30D03A34203D20A4B5C6CC4F371
:100470000D0408460849224601F034FA012385F8A4
:1004800047310022024B1A7000E00024204638BD9C
:100490007A00002094010020D400002031B190F8AF
:1004A000053143F0200380F80531704790F805319D
:1004B00043F0100380F80531704700BF094B5A69BB
:1004C0006FF30D025A61022380F8073190F805316D
:1004D00043F0800380F8053190F8073113F0020FE4
:1004E000FAD070479401002061F07F01C9B2817297
:1004F000704700BF10B4032280F84021104B596CA4
:1005000062F31E715964402180F845110D4C1C6442
:10051000302480F820415C6B62F31E745C6380229F
:1005200080F82421084C1C6380F86011596F6FF328
:100530001E71596780F864215DF8044B704700BF55
:1005400094010020D400002054010020344B1A886C
:1005500092B21A8042F20E02324B9A821A46D36845
:1005600013F0010FFBD02F4B1A7C6FF302021A74A9
:1005700003F500631A7842F001021A701A465368B4
:1005800013F0010FFBD140F20512274BDA621A4635
:10059000536813F0200FFBD14FF48272224B1A6282
:1005A000A3F5406300221A77204A9A621A4692F80D
:1005B0002C3013F0100FFAD100221D4B83F82020AD
:1005C0001A4692F82C3013F0040FFAD1184B1A7F08
:1005D00042F002021A771A4692F82C3013F0020FFA
:1005E000FAD1134B5A6A5A621A4692F82C3013F019
:1005F000080FFAD198220E4B83F820201A4613696F
:1006000013F4807FFBD040F60632074B1A621A467D
:10061000536813F0040FFBD10122064B5A71704747
:100620000040004100140040001C00400000010494
:1006300000100040000800400EBEFEE70DBEFEE7C1
:100640000DBEFEE70DBEFEE70DBEFEE705BEFEE7F2
:1006500002BEFEE710B5174B174A9A4215D0134653
:10066000164A9A4211D0134B134A9A420DD2131DC7
:10067000134CE41A24F003040434002310460F49F9
:100680005A581A500433A342FAD10E4B0E4A9A42DA
:100690000CD00BD2131D0D49C91A21F003011944C6
:1006A000043B002243F8042B8B42FBD100F010F8EE
:1006B000FEE700BF5C00002000000020081C0000D6
:1006C0005F000020A40300205C000020A70300209E
:1006D00070B5394B1B68B3F1FF3F2DD0374A384B0B
:1006E0001A60043A12F07F0F26D1364B1B7813F0B4
:1006F000010F03D00021344B196011E0324B19680F
:10070000324B994203D100222F4B1A6014E02F493B
:100710002D4B19602E4B013BFDD100212A4B196056
:10072000254B1B6883F3088822F07F02294B9A60CF
:10073000234B1B681B681847FFF708FF62B600F0E1
:10074000D1FE00F055F80546234B4FF400129A6095
:100750004022C3F88820C3F898204FF000629A60C6
:100760009A611E4B40F2E7325A60C021194A82F862
:10077000231000229A6007221A60194C0126AB68E8
:100780002846984700B12670237813F0FF0F05D054
:10079000002000F02DFB00F0C5FBFCE7237813F0F0
:1007A000FF0FECD100F016FF0028E8D0012000F088
:1007B0001FFB00F0B7FBFCE7004000000440000016
:1007C00014020020000C0040FCFF0220EF6916F02C
:1007D000808D5B0000ED00E00080004110E000E053
:1007E0007B00002008B5FFF755FC00F077FB08BD43
:1007F00010B5064C4FF082432360FFF72DFD2046D5
:100800002168FFF717FD204610BD00BF1802002029
:10081000F0B5C1B007460E461546084601F073F81C
:100820004000831C8DF8003003238DF801303378AD
:1008300073B16D08012D0DDD6C463146012224F89F
:10084000023F013211F8013F2BB1AA42F7DB02E06F
:10085000012200E001223846694652000023FFF7DA
:100860008FFD41B0F0BD00BFF0B583B0064604680F
:10087000102384F80731A04B1A78A04D2A705A78BB
:100880009F490A7098789F4A1080108880B2DF785C
:1008900040EA0720108018799B4A1080108880B2A7
:1008A0005F7940EA072010809879984A1080108874
:1008B00080B2DB7940EA03231380402384F80431BB
:1008C0000A782B7843EA022340F20232934200F086
:1008D0002D811EDCB3F5807F00F0598109DC812B6E
:1008E00000F0C880822B00F0CD80802B40F0F0819A
:1008F000B8E0B3F5817F00F05381C0F24D81B3F5CC
:10090000407F00F0EF8040F20132934200F0EF8030
:10091000DEE1B3F5106F00F093800BDCB3F5D06F20
:100920001FD0B3F5086F00F09580B3F5A06F40F0CD
:10093000CF817BE042F22102934200F0AF8105DCDF
:1009400040F60132934200F02281C1E142F2A1124D
:10095000934200F0A78142F22122934200F0B1813C
:10096000B6E1684B1B88C3F30723012B0ED1306817
:10097000664B1B889BB2122B9DBF644B1A8892B2A8
:10098000122263490023FFF7FBFCA5E15D4B1B88A6
:10099000C3F30723022B0ED130685C4B1B889BB23C
:1009A000432B9DBF594B1A8892B2432259490023C9
:1009B000FFF7E6FC90E1534B1B88C3F30723032B9F
:1009C0002FD1504B1B88DBB2012B15D013B1022B5A
:1009D0001AD021E0504B1868019030684B4B1B88AF
:1009E0009BB2042B9DBF494B1A8892B2042201A9E5
:1009F0000023FFF7C5FC6FE1444B1A883068474974
:100A0000D2B2FFF705FF67E1404B1A8830684449CE
:100A1000D2B2FFF7FDFE5FE120460121FFF73EFD68
:100A20005AE120460121FFF739FD55E12046FFF745
:100A300045FD344B1988306889B2FFF755FD4BE10D
:100A4000304B1B8833712046FFF738FD2046FFF7F7
:100A500051FD41E1314651F8040B01220023FFF71B
:100A60008FFC39E12F4900230B8030680222FFF709
:100A700087FC31E12B4900230B8030680222FFF70D
:100A80007FFC29E10022274B1A801F4B198801F0B7
:100A90005001254A11701A8802F00F021A801B8833
:100AA0009BB2032B19D8204B1B7813F0FF0F164B6A
:100AB0001B889BB203F1080304EB4314A27914BF13
:100AC000C2F34012C2F30012164B1A803068154967
:100AD00002220023FFF754FCFEE020460121FFF72D
:100AE000DDFCF9E020460121FFF7D8FCF4E02046C8
:100AF000FFF7E4FCF0E000BF94000020830000203A
:100B0000860000207C000020800000207E00002065
:100B10004C190000040000203019000034190000B6
:100B20004019000084000020820000206B4B1988CF
:100B300089B221F07F01C9B2694A11701A8802F0A6
:100B40000F021A80674B1B889BB2DBB9634B1B8873
:100B50009BB2BBB1614B1B889BB2032B12D8604B7D
:100B60001B7813F0FF0F5D4B1B889BB203F108034A
:100B700004EB431314BF202210225A712046FFF7C2
:100B80009DFCA9E020460121FFF788FCA4E0204657
:100B90000121FFF783FC9FE02046FFF78FFC9BE0DD
:100BA0004E4B198889B221F07F01C9B24C4A1170AD
:100BB0001A8802F00F021A804A4B1B889BB2002B46
:100BC00067D1464B1B889BB2002B62D0434B1B88DE
:100BD0009BB2032B5DD8424B1B7813F0FF0F2AD03A
:100BE0003E4B1B889BB2083304EB43139B7913F0F5
:100BF000200F4AD0394B1A8892B2083204EB4212C5
:100C0000202111711B889BB2083304EB4313DB795D
:100C100013F0400F39D0314B1A8892B2083204EBEE
:100C200042124021D1711B889BB2083304EB43135D
:100C300002221A7129E0294B1B889BB2083304EB6E
:100C400043139B7913F0100F1FD0244B1A8892B2D4
:100C5000083204EB4212102111711B889BB2083339
:100C600004EB4313DB7913F0200F0ED01B4B1A88D3
:100C700092B2083204EB42122021D1711B889BB240
:100C8000083304EB431301221A712046FFF716FCC8
:100C900022E020460121FFF701FC1DE02046FFF77E
:100CA0000DFC19E03068104B1B889BB2082B9DBFD0
:100CB0000D4B1A8892B208220C490023FFF760FB03
:100CC0000AE0084B1B8873712046FFF7F7FB03E02F
:100CD00020460121FFF7E2FB03B0F0BD80000020B9
:100CE000820000207C0000207E00002048000020C0
:100CF00000B583B002A941F8040D054B1868012224
:100D00001346FFF73DFB012003B05DF804FB00BF75
:100D10001802002000B583B0054B18680DF10701DB
:100D20000122FFF77BFB9DF8070003B05DF804FB91
:100D30001802002008B50648FFF73EFA30B1044B10
:100D40001B6893F8470100F0010008BD002008BDB2
:100D50001802002010B503460C46044A10681946D4
:100D600022460123FFF70CFB204610BD180200208D
:100D700038B505460C460648FFF71EFA30B1044B5D
:100D8000186829462246FFF749FB38BD002038BDC8
:100D900018020020F8B505460F460B48FFF70CFA7D
:100DA00058B167B13C46084E306829462246FFF7E5
:100DB00035FB0544241AF7D103E00020F8BD38467E
:100DC000F8BD3846F8BD00BF1802002008B5C3685A
:100DD0000846114698474FF00062034B5A6164225F
:100DE000024B1A8008BD00BF008000419000002027
:100DF000012806D1054A064B1A600122054B1A70DC
:100E0000704710B9044A024B1A60704780190000FD
:100E10008802002092000020D819000070B584B02C
:100E200004460A46244B1B7813F0FF0F34D00429E4
:100E300001D1036836E0022901D1038832E003784A
:100E40004E0004AC34440B3C86BB0CE003F00F05B1
:100E5000092D94BF45F03005373565701B09013009
:100E6000013CB042F2D330238DF8043078238DF862
:100E700005300132520004AB13440A2103F80C1C64
:100E800004AB1E440D2306F8093C0C4B186801A95D
:100E90000232FFF79BFF0CE0084B18682146FFF772
:100EA00095FF06E0560004AC34440B3C013C0020A6
:100EB000CCE704B070BD00BF8C0000208802002089
:100EC00072B6EFF30882044B1A60036883F3088854
:100ED00043681847704700BF8C0200200E4B1B88E8
:100EE0009BB24BB10C4A1388013B9BB213801BB9D8
:100EF0004FF00062094B9A61094B1B889BB24BB1C2
:100F0000074A1388013B9BB213801BB94022034B55
:100F1000C3F89820704700BF900000200080004177
:100F20008E0000202DE9F0438BB002AC894D0FCD2F
:100F30000FC495E80F0084E80F00874A9368C3F355
:100F400002430AA901EB830353F8203C83490B6059
:100F5000926892B282490A6002FB03F381490B60F6
:100F60000022814B1A607A22804B1A707A4C7B4D9A
:100F70007F4B1B681B697F4840219847034630B16F
:100F800040217D4AC2F8941064217C4A11807C4A39
:100F9000136078497B4A116000217B4A1160002B65
:100FA000E6D0784B1B681B78FF2B00F06682232B62
:100FB00040F00482754B1B7813F0FF0F05D06C4B8B
:100FC000186873490222FFF701FF684B1B78532B07
:100FD00044D16B4B1B686C4A126893421FD9694815
:100FE0000168013101600132674802609A1A694B59
:100FF00018688242684B34BF1A601860664E5A4BBC
:101000001868326800F06EFC33685F4A1168194452
:1010100011605C4A116819441160604A13705A4BA0
:101020001A68013A1A60574B1A68013A1A605B4B0A
:101030001B78584A11688B420ED24D4A1268926949
:1010400049480068C91A904730B140224A4BC3F85A
:1010500094206422494B1A8000BF9DE1522B0FD18E
:10106000434B1B685B69404A10684A4A11689847BD
:101070004FF00062404B5A616422494B1A808BE169
:101080004F2B05D1384B1B68424A12681A7083E116
:10109000482B05D1344B1B683E4A12681A807BE10D
:1010A000572B05D1304B1A683A4B1B68136073E11C
:1010B0006F2B05D12C4B18680121FFF7AFFE6BE1B8
:1010C000682B08D13348284B1B681B88036002211A
:1010D000FFF7A4FE60E1772B08D1234B1B681B6848
:1010E0002C4803600421FFF799FE55E1472B14D1EA
:1010F000284B1868FFF7E4FE2A4B1B6883F3088827
:1011000062B6294B1B7813F0FF0F00F04581184B96
:101110001B681B68062098473EE1542B09D1012229
:101120001A4B1A70124B186819490222FFF74EFE2B
:1011300032E14E2B3AD1154B1B7813F0FF0F05D13E
:101140000B4B186812490222FFF740FE00220F4B9A
:101150001A7021E1601900000040004140020020A7
:1011600038020020340200208402002030020020D7
:101170008802002044020020008000418E000020F0
:10118000280200202C0200203C0200208C000020BD
:10119000A0190000900200209402002024020020E8
:1011A000900000208C02002092000020562B57D186
:1011B000994E306899490122FFF708FE3068984936
:1011C0000322FFF703FE974F306839460122FFF7ED
:1011D000FDFD306894490D22FFF7F8FD306839466F
:1011E0000122FFF7F3FD914B0021914A1160591C38
:1011F000904A11601B78002B00F04D818C490B68E0
:1012000001330B601368581C10601B78002BF6D15B
:10121000814F874E386885493268FFF7D7FD3868B7
:1012200080490122FFF7D2FD00233360824A814BBF
:101230001A6041E10B6801330B601368581C1060A1
:101240001B78002BF6D1744E30687C49784B1A68B5
:10125000FFF7BCFD30687A490222FFF7B7FD9BE03B
:10126000582B1DD1774B1A68774B19688A4210D2D8
:101270002E6836014AF20150638A13F0010FFBD049
:101280006261A080638A13F0010FFBD032448A426E
:10129000F2D3614B18686D490322FFF797FD7BE09D
:1012A000592B44D1674B186820B9694B1A68694BB0
:1012B0001A6035E0674B1F68654B1E6823889BB238
:1012C000238080082CD04AF215584FF0000EF146CA
:1012D0004AF2035CA4F80480638A13F0010FFBD088
:1012E0002B68032B0DD970B172464B46B958B150DB
:1012F00001332968B3EB910F06D204328342F5D152
:1013000002E0734600E073466661A4F804C0628A96
:1013100012F0010FFBD09A0016441744C01AD9D11D
:101320003D4B18684C490322FFF750FD34E05A2B1F
:1013300032D1474B1E68434B1B685BB106EB030879
:10134000002716F8010B394600F068F907464645B4
:10135000F7D100E00027304B186840490122FFF721
:1013600035FD3A460DF107030DF1FF3002F00F0194
:1013700012090929CCBF3731303103F801198342F2
:10138000F4D1254E306869460822FFF71FFD30680A
:1013900033490322FFF71AFD7A22324B1A700022DA
:1013A000284B1A60304B1B7813F0FF0F65D01A4B97
:1013B00018682E490122FFF709FD5EE0A3F1300213
:1013C000D2B2092A06D81F4A303B116843EA0111FC
:1013D000116052E0A3F14102D2B2052A06D8194A9F
:1013E000373B116843EA0111116046E0A3F1610245
:1013F000D2B2052A06D8134A573B116843EA0111B5
:1014000011603AE02C2B33D10E4B1A6810490A6058
:1014100000221A6031E000BF88020020A4190000F9
:101420009C190000A8190000F4190000AC19000074
:101430003C0200202C020020B9190000B81900005D
:10144000A01900009002002034020020C4190000FE
:101450008402002088000020C8190000CC19000078
:10146000D0190000300200208C000020D4190000A8
:10147000134A13700022134B1A60134A1368013386
:101480001360124A116801311160114A12689342C7
:10149000FFF487AD6CE50F4F0B4E38680E4932688C
:1014A000FFF794FC38680D490122FFF78FFC0023F9
:1014B00033600B4A054B1A600349044ABAE600BF81
:1014C00030020020900200203C0200202C0200206C
:1014D0002802002088020020AC190000A819000092
:1014E000B919000008B5234B4022C3F89C204322C1
:1014F000C3F88C20A3F5A0535A6942F480525A6174
:101500001D4B93F84B2042F0010283F84B2093F8D7
:10151000352002F00F0283F8352093F8352042F091
:10152000200283F8352093F84A2042F0010283F824
:101530004A2093F8352002F0F00283F8352093F822
:10154000352042F0020283F835200C484FF22A6120
:101550004FF44412FEF7DCFD0023094A1370094AD8
:101560001370094A1370094A1370094A1370094A23
:10157000137008BD001C0040008000410030004096
:101580009802002022030020990200209C020020E3
:10159000230300202003002008B5C1B20248FEF753
:1015A000EDFD012008BD00BF00300040024B187E59
:1015B000C0F38000704700BF0030004008B5FFF75F
:1015C000F5FF0028FBD00248FEF7DEFD08BD00BF96
:1015D0000030004008B5FFF7E9FF30B1FFF7EEFF3C
:1015E000232814BF0020012008BD002008BD00BF33
:1015F00070B504460E4631B1451814F8010BFFF7DB
:10160000CBFFAC42F9D1304670BD00BF10B50446E7
:10161000FFF7D4FF2070012010BD00BF80EA112029
:10162000034B33F8103083EA012080B2704700BFCB
:10163000041A00002DE9F84F0646884649B30024F5
:101640002746DFF860A0DFF86090DFF860B0FFF7B2
:10165000B5FFC5B29AF80030F3B928463946FFF70E
:10166000DDFF0746B9F8003013B99BF800305BB1D5
:10167000731C3570B8F1800F02BFB9F8002002F179
:10168000FF32A9F800201E460134A4B24445DED141
:1016900005E00020BDE8F88F0120BDE8F88F38464E
:1016A000BDE8F88F200300209A02002021030020CB
:1016B0002DE9F04F83B001900022454B1A70009144
:1016C00019B90122434B1A700DE0434B009A1A805E
:1016D0000022404B1A70009B13F07F0F03D0803321
:1016E00023F07F0300933A4C0025FFF767FF237830
:1016F0004BB12570FFF762FFC0B2237823B10024FD
:10170000334B1C705FE0C0B2432821D0712859D000
:101710001528EAD11CE000222D4B1A7053E0C0B20C
:10172000062809D10BF1010B5FFA8BFB009A803A76
:101730000092019B80330193009A7AB90420FFF74D
:101740002BFFFFF73BFF0022224B1A7001243AE0E7
:101750004FF0010BDFF88080DFF878900120FFF771
:101760001BFF5846FFF718FF6FEA0B00C0B2FFF7E8
:1017700013FF019E80240027BA46B8F8003013B941
:1017800099F800202AB13578013BA8F800300136DD
:1017900000E055462846FFF7FFFE28463946FFF78A
:1017A0003DFF0746013CE8D1C0F30720FFF7F4FEF8
:1017B000F8B2FFF7F1FEFFF701FF054B1B78002B96
:1017C000ADD0A8E70024204603B0BDE8F08F00BFED
:1017D00020030020210300209A0200202DE9F0437D
:1017E00083B0074600223B4B1A7019B901223A4BCD
:1017F0001A7004E0394A11800022374B1A706425B0
:101800004FF04308364E4046FFF7C6FE344600E030
:10181000013CFFF7CBFE10B9002CF9D100E014B960
:10182000013DF0D151E001262A4C0225FFF7C6FE0A
:1018300022781AB10025274B1D7046E0C3B2012B58
:1018400002D0042B34D036E001A82946FFF7F2FE7F
:1018500038468021FFF7EEFE8046237883BBFFF7F2
:10186000ADFE00021FFA80F9FFF7A8FE484480B2DF
:101870002378012B24D0804509D19DF80430B34250
:1018800005D1F3439DF80520DBB29A4203D018201E
:10189000FFF782FE14E00620FFF77EFE23781BB1DF
:1018A00000250C4B1D7010E00136F6B28037BDE705
:1018B0000620FFF771FE0022074B1A70012504E095
:1018C000044B1B78002BF6D0EAE7284603B0BDE8AE
:1018D000F08300BF20030020210300209A02002093
:1018E00000350C0010B50023934203D0CC5CC454E7
:1018F0000133F9E710BD02440346934202D003F8D6
:10190000011BFAE77047034613F8012B002AFBD1AD
:10191000181A013870470000F8B500BFF8BC08BCC1
:101920009E467047F8B500BFF8BC08BC9E4670479D
:101930000403090441726475696E6F204C4C4300C6
:101940004D6574726F204D340000000012010002DA
:10195000020000409A232000000201020001000062
:1019600008000000100000002000000040000000FF
:1019700080000000000100000002000000040000E0
:1019800099150000BD150000AD150000F11500000F
:101990000D160000B1160000DD170000322E3000D9
:1019A0000A0D000076000000200000004E6F762037
:1019B000203620323031370031313A30393A33383D
:1019C00000000000580A0D00590A0D005A000000DE
:1019D000230A0D003E000000F10C0000150D000070
:1019E000350D0000550D0000710D0000550D000073
:1019F000950D00005B41726475696E6F3A58595AD3
:101A00005D00000000002110422063308440A5509A
:101A1000C660E770088129914AA16BB18CC1ADD134
:101A2000CEE1EFF13112100273325222B5529442DC
:101A3000F772D662399318837BB35AA3BDD39CC384
:101A4000FFF3DEE36224433420040114E664C77428
:101A5000A44485546AA54BB528850995EEE5CFF5D4
:101A6000ACC58DD55336722611163006D776F6667C
:101A70009556B4465BB77AA719973887DFF7FEE724
:101A80009DD7BCC7C448E5588668A7784008611848
:101A900002282338CCC9EDD98EE9AFF94889699974
:101AA0000AA92BB9F55AD44AB77A966A711A500A1C
:101AB000333A122AFDDBDCCBBFFB9EEB799B588BC4
:101AC0003BBB1AABA66C877CE44CC55C222C033C68
:101AD000600C411CAEED8FFDECCDCDDD2AAD0BBD14
:101AE000688D499D977EB66ED55EF44E133E322EBC
:101AF000511E700E9FFFBEEFDDDFFCCF1BBF3AAF64
:101B0000599F788F8891A981CAB1EBA10CD12DC1C1
:101B10004EF16FE18010A100C230E3200450254057
:101B200046706760B9839893FBA3DAB33DC31CD3B7
:101B30007FE35EF3B1029012F322D23235421452A7
:101B400077625672EAB5CBA5A89589856EF54FE503
:101B50002CD50DC5E234C324A014810466744764F7
:101B600024540544DBA7FAB79987B8975FE77EF757
:101B70001DC73CD7D326F2369106B0165766767647
:101B8000154634564CD96DC90EF92FE9C899E98923
:101B90008AB9ABA94458654806782768C018E10897
:101BA0008238A3287DCB5CDB3FEB1EFBF98BD89BF7
:101BB000BBAB9ABB754A545A376A167AF10AD01AE7
:101BC000B32A923A2EFD0FED6CDD4DCDAABD8BAD43
:101BD000E89DC98D267C076C645C454CA23C832C37
:101BE000E01CC10C1FEF3EFF5DCF7CDF9BAFBABF97
:101BF000D98FF89F176E367E554E745E932EB23E87
:081C0000D10EF01E00000000EF
:101C080001140000090243000201008032090400A7
:101C1800000102020000052400100104240200054E
:101C2800240600010524010001070583030800FFBD
:101C380009040100020A00000007058102400000B3
:101C4800070502024000000000C201000000080071
:0C1C5800650000004100000000000000DA
:04000003000006559E
:00000001FF

View file

@ -1,165 +0,0 @@
# Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
# Copyright (c) 2015 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
# -----------------------------------------------------------------------------
# Paths
ifeq ($(OS),Windows_NT)
# Are we using mingw/msys/msys2/cygwin?
ifeq ($(TERM),xterm)
T=$(shell cygpath -u $(LOCALAPPDATA))
MODULE_PATH?=$(T)/Arduino15/packages/arduino
RM=rm
SEP=/
else
MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
RM=rm
SEP=\\
endif
else
UNAME_S := $(shell uname -s)
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/
RM=rm
SEP=/
endif
endif
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
BUILD_PATH=build
# -----------------------------------------------------------------------------
# Tools
CC=$(ARM_GCC_PATH)gcc
OBJCOPY=$(ARM_GCC_PATH)objcopy
NM=$(ARM_GCC_PATH)nm
SIZE=$(ARM_GCC_PATH)size
# -----------------------------------------------------------------------------
# Compiler options
CFLAGS_EXTRA=-D$(BOARD_CHIP) -DBOARD_ID_$(BOARD_ID)
CFLAGS=-mthumb -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500
ifdef DEBUG
CFLAGS+=-g3 -O1 -DDEBUG=1
else
CFLAGS+=-Os -DDEBUG=0
endif
ELF=$(BOARD_ID)_sam_ba.elf
BIN=$(BOARD_ID)_sam_ba.bin
HEX=$(BOARD_ID)_sam_ba.hex
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.5.0/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS-Atmel/1.1.0/CMSIS/Device/ATMEL/"
# -----------------------------------------------------------------------------
# Linker options
LDFLAGS=-mthumb -mcpu=cortex-m4 -Wall -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all
LDFLAGS+=-Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols --specs=nano.specs --specs=nosys.specs
# -----------------------------------------------------------------------------
# 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
OBJECTS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.o))
DEPS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.d))
ifneq "test$(AVRSTUDIO_EXE_PATH)" "test"
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
else
AS_BUILD=
AS_CLEAN=
endif
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_$(BOARD_ID).ld -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)
$(BIN): $(ELF)
@echo ----------------------------------------------------------
@echo Creating flash binary
"$(OBJCOPY)" -O binary $(BUILD_PATH)/$< $@
$(HEX): $(ELF)
@echo ----------------------------------------------------------
@echo Creating flash binary
"$(OBJCOPY)" -O ihex $(BUILD_PATH)/$< $@
$(BUILD_PATH)/%.o: %.c
@echo ----------------------------------------------------------
@echo Compiling $< to $@
"$(CC)" $(CFLAGS) $(CFLAGS_EXTRA) $(INCLUDES) $< -o $@
@echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$(BUILD_PATH):
@echo ----------------------------------------------------------
@echo Creating build folder
-mkdir $(BUILD_PATH)
print_info:
@echo ----------------------------------------------------------
@echo Compiling bootloader using
@echo BASE PATH = $(MODULE_PATH)
@echo GCC PATH = $(ARM_GCC_PATH)
# @echo OS = $(OS)
# @echo SHELL = $(SHELL)
# @echo TERM = $(TERM)
# "$(CC)" -v
# env
copy_for_atmel_studio: $(BIN) $(HEX)
@echo ----------------------------------------------------------
@echo Atmel Studio detected, copying ELF to project root for debug
cp $(BUILD_PATH)/$(ELF) .
clean_for_atmel_studio:
@echo ----------------------------------------------------------
@echo Atmel Studio detected, cleaning ELF from project root
-$(RM) ./$(ELF)
clean: $(AS_CLEAN)
@echo ----------------------------------------------------------
@echo Cleaning project
-$(RM) $(BIN)
-$(RM) $(HEX)
-$(RM) $(BUILD_PATH)/*.*
-rmdir $(BUILD_PATH)
.phony: print_info $(BUILD_PATH)

View file

@ -1,86 +0,0 @@
# Metro M4 Bootloader
## 1- Prerequisites
The project build is based on Makefile system.
Makefile is present at project root and try to handle multi-platform cases.
Multi-plaform GCC is provided by ARM here: https://launchpad.net/gcc-arm-embedded/+download
Atmel Studio contains both make and ARM GCC toolchain. You don't need to install them in this specific use case.
### Windows
* Native command line
Make binary can be obtained here: http://gnuwin32.sourceforge.net/packages/make.htm
* Cygwin/MSys/MSys2/Babun/etc...
It is available natively in all distributions.
* Atmel Studio
An Atmel Studio **7** Makefile-based project is present at project root, just open samd21_sam_ba.atsln file in AS7.
### Linux
Make is usually available by default.
### OS X
Make is available through XCode package.
## 2- Selecting available SAM-BA interfaces
By default both USB and UART are made available, but this parameter can be modified in sam_ba_monitor.h, line 31:
Set the define SAM_BA_INTERFACE to
* SAM_BA_UART_ONLY for only UART interface
* SAM_BA_USBCDC_ONLY for only USB CDC interface
* SAM_BA_BOTH_INTERFACES for enabling both the interfaces
## 3- Behaviour
This bootloader implements the double-tap on Reset button.
By quickly pressing this button two times, the board will reset and stay in bootloader, waiting for communication on either USB or USART.
The USB port in use is the USB Native port, close to the Reset button.
The USART in use is the one available on pins D0/D1, labelled respectively RX/TX. Communication parameters are a baudrate at 115200, 8bits of data, no parity and 1 stop bit (8N1).
## 4- Description
**Pinmap**
The following pins are used by the program :
PA25 : input/output (USB DP)
PA24 : input/output (USB DM)
PA23 : input (USART RX)
PA22 : output (USART TX)
The application board shall avoid driving the PA25, PA24, PB23 and PB22 signals while the boot program is running (after a POR for example).
**Clock system**
CPU runs at 48MHz from Generic Clock Generator 0 on DFLL48M.
Generic Clock Generator 1 is using external 32kHz oscillator and is the source of DFLL48M.
USB and USART are using Generic Clock Generator 0 also.
**Memory Mapping**
Bootloader code will be located at 0x0 and executed before any applicative code.
Applications compiled to be executed along with the bootloader will start at 0x2000 (see linker script bootloader_samdx1.ld).
Before jumping to the application, the bootloader changes the VTOR register to use the interrupt vectors of the application @0x2000.<- not required as application code is taking care of this.
## 5- How to build
If not specified the makefile builds for **Metro M4**:
```
make
```

View file

@ -1,82 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 "Feather M4"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x9A
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x22
/*
* 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 (HSRAM_ADDR + HSRAM_SIZE - 4)
#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 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define GPIO(port, pin) ((((port)&0x7u) << 5) + ((pin)&0x1Fu))
#define BOOK_USART_MASK APBAMASK
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX MCLK_APBAMASK_SERCOM0
#define BOOT_GCLK_ID_CORE SERCOM0_GCLK_ID_CORE
#define BOOT_GCLK_ID_SLOW SERCOM0_GCLK_ID_SLOW
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_UNUSED
#define BOOT_USART_PAD2 PINMUX_UNUSED
#define BOOT_USART_PAD1 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD0 PINMUX_PA11C_SERCOM0_PAD3
/* 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)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,82 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 "Metro M4"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x9A
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x20
/*
* 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 (HSRAM_ADDR + HSRAM_SIZE - 4)
#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 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define GPIO(port, pin) ((((port)&0x7u) << 5) + ((pin)&0x1Fu))
#define BOOK_USART_MASK APBAMASK
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX MCLK_APBAMASK_SERCOM0
#define BOOT_GCLK_ID_CORE SERCOM0_GCLK_ID_CORE
#define BOOT_GCLK_ID_SLOW SERCOM0_GCLK_ID_SLOW
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_UNUSED
#define BOOT_USART_PAD2 PINMUX_UNUSED
#define BOOT_USART_PAD1 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD0 PINMUX_PA11C_SERCOM0_PAD3
/* 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)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (21)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (6)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,63 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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_DRIVER_LED_
#define _BOARD_DRIVER_LED_
#include <sam.h>
#include "board_definitions.h"
#if defined(BOARD_LED_PORT)
inline void LED_init(void) { PORT->Group[BOARD_LED_PORT].DIRSET.reg = (1<<BOARD_LED_PIN); }
inline void LED_on(void) { PORT->Group[BOARD_LED_PORT].OUTSET.reg = (1<<BOARD_LED_PIN); }
inline void LED_off(void) { PORT->Group[BOARD_LED_PORT].OUTCLR.reg = (1<<BOARD_LED_PIN); }
inline void LED_toggle(void) { PORT->Group[BOARD_LED_PORT].OUTTGL.reg = (1<<BOARD_LED_PIN); }
#else
inline void LED_init(void) { }
inline void LED_on(void) { }
inline void LED_off(void) { }
inline void LED_toggle(void) { }
#endif
void LED_pulse();
#if defined(BOARD_LEDRX_PORT)
inline void LEDRX_init(void) { PORT->Group[BOARD_LEDRX_PORT].DIRSET.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_on(void) { PORT->Group[BOARD_LEDRX_PORT].OUTCLR.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_off(void) { PORT->Group[BOARD_LEDRX_PORT].OUTSET.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_toggle(void) { PORT->Group[BOARD_LEDRX_PORT].OUTTGL.reg = (1<<BOARD_LEDRX_PIN); }
#else
inline void LEDRX_init(void) { }
inline void LEDRX_on(void) { }
inline void LEDRX_off(void) { }
inline void LEDRX_toggle(void) { }
#endif
#if defined(BOARD_LEDTX_PORT)
inline void LEDTX_init(void) { PORT->Group[BOARD_LEDTX_PORT].DIRSET.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_on(void) { PORT->Group[BOARD_LEDTX_PORT].OUTCLR.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_off(void) { PORT->Group[BOARD_LEDTX_PORT].OUTSET.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_toggle(void) { PORT->Group[BOARD_LEDTX_PORT].OUTTGL.reg = (1<<BOARD_LEDTX_PIN); }
#else
inline void LEDTX_init(void) { }
inline void LEDTX_on(void) { }
inline void LEDTX_off(void) { }
inline void LEDTX_toggle(void) { }
#endif
#endif // _BOARD_DRIVER_LED_

View file

@ -1,104 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include "board_driver_serial.h"
bool uart_drv_error_flag = false;
void uart_basic_init(Sercom *sercom, uint16_t baud_val, enum uart_pad_settings pad_conf)
{
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Disable the SERCOM UART module */
sercom->USART.CTRLA.bit.ENABLE = 0;
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.SWRST);
/* Perform a software reset */
sercom->USART.CTRLA.bit.SWRST = 1;
/* Wait for synchronization */
while(sercom->USART.CTRLA.bit.SWRST);
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.SWRST || sercom->USART.SYNCBUSY.bit.ENABLE);
/* Update the UART pad settings, mode and data order settings */
sercom->USART.CTRLA.reg = pad_conf | SERCOM_USART_CTRLA_MODE(1) | SERCOM_USART_CTRLA_DORD;
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.CTRLB);
/* Enable transmit and receive and set data size to 8 bits */
sercom->USART.CTRLB.reg = SERCOM_USART_CTRLB_RXEN | SERCOM_USART_CTRLB_TXEN | SERCOM_USART_CTRLB_CHSIZE(0);
/* Load the baud value */
sercom->USART.BAUD.reg = baud_val;
///* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Enable SERCOM UART */
sercom->USART.CTRLA.bit.ENABLE = 1;
}
void uart_disable(Sercom *sercom)
{
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Disable SERCOM UART */
sercom->USART.CTRLA.bit.ENABLE = 0;
}
void uart_write_byte(Sercom *sercom, uint8_t data)
{
/* Wait for Data Register Empty flag */
while(!sercom->USART.INTFLAG.bit.DRE);
/* Write the data to DATA register */
sercom->USART.DATA.reg = (uint16_t)data;
}
uint8_t uart_read_byte(Sercom *sercom)
{
/* Wait for Receive Complete flag */
while(!sercom->USART.INTFLAG.bit.RXC);
/* Check for errors */
if (sercom->USART.STATUS.bit.PERR || sercom->USART.STATUS.bit.FERR || sercom->USART.STATUS.bit.BUFOVF)
/* Set the error flag */
uart_drv_error_flag = true;
/* Return the read data */
return((uint8_t)sercom->USART.DATA.reg);
}
void uart_write_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
{
/* Do the following for specified length */
do {
/* Wait for Data Register Empty flag */
while(!sercom->USART.INTFLAG.bit.DRE);
/* Send data from the buffer */
sercom->USART.DATA.reg = (uint16_t)*ptr++;
} while (length--);
}
void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
{
/* Do the following for specified length */
do {
/* Wait for Receive Complete flag */
while(!sercom->USART.INTFLAG.bit.RXC);
/* Check for errors */
if (sercom->USART.STATUS.bit.PERR || sercom->USART.STATUS.bit.FERR || sercom->USART.STATUS.bit.BUFOVF)
/* Set the error flag */
uart_drv_error_flag = true;
/* Store the read data to the buffer */
*ptr++ = (uint8_t)sercom->USART.DATA.reg;
} while (length--);
}

View file

@ -1,89 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 UART_DRIVER_H
#define UART_DRIVER_H
#include <stdio.h>
#include <stdbool.h>
#include <sam.h>
#define PINMUX_UNUSED 0xFFFFFFFF
/* SERCOM UART available pad settings */
enum uart_pad_settings {
UART_RX_PAD0_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(0) | SERCOM_USART_CTRLA_TXPO(1),
UART_RX_PAD1_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_TXPO(1),
UART_RX_PAD2_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(2),
UART_RX_PAD3_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(3),
UART_RX_PAD1_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(1),
UART_RX_PAD3_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1),
};
/**
* \brief Initializes the UART
*
* \param Pointer to SERCOM instance
* \param Baud value corresponding to the desired baudrate
* \param SERCOM pad settings
*/
void uart_basic_init(Sercom *sercom, uint16_t baud_val, enum uart_pad_settings pad_conf);
/**
* \brief Disables UART interface
*
* \param Pointer to SERCOM instance
*/
void uart_disable(Sercom *sercom);
/**
* \brief Sends a single byte through UART interface
*
* \param Pointer to SERCOM instance
* \param Data to send
*/
void uart_write_byte(Sercom *sercom, uint8_t data);
/**
* \brief Reads a single character from UART interface
*
* \param Pointer to SERCOM instance
* \return Data byte read
*/
uint8_t uart_read_byte(Sercom *sercom);
/**
* \brief Sends buffer on UART interface
*
* \param Pointer to SERCOM instance
* \param Pointer to data to send
* \param Number of bytes to send
*/
void uart_write_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length);
/**
* \brief Reads data on UART interface
*
* \param Pointer to SERCOM instance
* \param Pointer to store read data
* \param Number of bytes to read
*/
void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length);
#endif

View file

@ -1,359 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <string.h>
#include "board_driver_usb.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#define NVM_USB_PAD_TRANSN_POS 32
#define NVM_USB_PAD_TRANSN_SIZE 5
#define NVM_USB_PAD_TRANSP_POS 37
#define NVM_USB_PAD_TRANSP_SIZE 5
#define NVM_USB_PAD_TRIM_POS 42
#define NVM_USB_PAD_TRIM_SIZE 3
__attribute__((__aligned__(4))) UsbDeviceDescriptor usb_endpoint_table[MAX_EP]; // Initialized to zero in USB_Init
__attribute__((__aligned__(4))) uint8_t udd_ep_out_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
__attribute__((__aligned__(4))) uint8_t udd_ep_in_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
static volatile bool read_job = false;
/*----------------------------------------------------------------------------
* \brief
*/
P_USB_CDC USB_Open(P_USB_CDC pCdc, Usb *pUsb)
{
pCdc->pUsb = pUsb;
pCdc->currentConfiguration = 0;
pCdc->currentConnection = 0;
pCdc->IsConfigured = USB_IsConfigured;
// pCdc->Write = USB_Write;
// pCdc->Read = USB_Read;
pCdc->pUsb->HOST.CTRLA.bit.ENABLE = true;
while( pCdc->pUsb->HOST.SYNCBUSY.reg & USB_SYNCBUSY_ENABLE ); //wait for sync
return pCdc;
}
/**
* \brief Load USB calibration value from NVM
*/
static void USB_load_calib(void)
{
Usb * hw = USB;
uint32_t pad_transn
= (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRANSN_POS / 32)) >> (NVM_USB_PAD_TRANSN_POS % 32))
& ((1 << NVM_USB_PAD_TRANSN_SIZE) - 1);
uint32_t pad_transp
= (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRANSP_POS / 32)) >> (NVM_USB_PAD_TRANSP_POS % 32))
& ((1 << NVM_USB_PAD_TRANSP_SIZE) - 1);
uint32_t pad_trim = (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRIM_POS / 32)) >> (NVM_USB_PAD_TRIM_POS % 32))
& ((1 << NVM_USB_PAD_TRIM_SIZE) - 1);
if (pad_transn == 0 || pad_transn == 0x1F) {
pad_transn = 9;
}
if (pad_transp == 0 || pad_transp == 0x1F) {
pad_transp = 25;
}
if (pad_trim == 0 || pad_trim == 0x7) {
pad_trim = 6;
}
hw->DEVICE.PADCAL.reg = USB_PADCAL_TRANSN(pad_transn) | USB_PADCAL_TRANSP(pad_transp) | USB_PADCAL_TRIM(pad_trim);
hw->DEVICE.QOSCTRL.bit.CQOS = 3;
hw->DEVICE.QOSCTRL.bit.DQOS = 3;
}
/*----------------------------------------------------------------------------
* \brief Initializes USB
*/
void USB_Init(void)
{
uint32_t pad_transn, pad_transp, pad_trim;
/* Enable USB clock */
MCLK->APBBMASK.bit.USB_ = 1;
/* 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));
/* ----------------------------------------------------------------------------------------------
* Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
*
*/
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
while(GCLK->SYNCBUSY.bit.GENCTRL0)
{
/* Wait for synchronization */
}
/* Reset */
USB->DEVICE.CTRLA.bit.SWRST = 1;
while (USB->DEVICE.SYNCBUSY.bit.SWRST)
{
/* Sync wait */
}
USB_load_calib();
/* Set the configuration */
/* Set mode to Device mode */
USB->HOST.CTRLA.bit.MODE = 0;
/* Enable Run in Standby */
USB->HOST.CTRLA.bit.RUNSTDBY = true;
/* Set the descriptor address */
USB->HOST.DESCADD.reg = (uint32_t)(&usb_endpoint_table[0]);
/* Set speed configuration to Full speed */
USB->DEVICE.CTRLB.bit.SPDCONF = USB_DEVICE_CTRLB_SPDCONF_FS_Val;
/* Attach to the USB host */
USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
/* Initialize endpoint table RAM location to a known value 0 */
memset((uint8_t *)(&usb_endpoint_table[0]), 0, sizeof(usb_endpoint_table));
}
uint32_t USB_Write(Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num)
{
uint32_t data_address;
uint8_t buf_index;
/* Set buffer index */
buf_index = (ep_num == 0) ? 0 : 1;
/* Check for requirement for multi-packet or auto zlp */
if (length >= (1 << (usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.SIZE + 3)))
{
/* Update the EP data address */
data_address = (uint32_t) pData;
/* Enable auto zlp */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.AUTO_ZLP = true;
}
else
{
/* Copy to local buffer */
memcpy(udd_ep_in_cache_buffer[buf_index], pData, length);
/* Update the EP data address */
data_address = (uint32_t) &udd_ep_in_cache_buffer[buf_index];
}
/* Set the buffer address for ep data */
usb_endpoint_table[ep_num].DeviceDescBank[1].ADDR.reg = data_address;
/* Set the byte count as zero */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.BYTE_COUNT = length;
/* Set the multi packet size as zero for multi-packet transfers where length > ep size */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.MULTI_PACKET_SIZE = 0;
/* Clear the transfer complete flag */
pUsb->DEVICE.DeviceEndpoint[ep_num].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
/* Set the bank as ready */
pUsb->DEVICE.DeviceEndpoint[ep_num].EPSTATUSSET.bit.BK1RDY = true;
/* Wait for transfer to complete */
while ( (pUsb->DEVICE.DeviceEndpoint[ep_num].EPINTFLAG.bit.TRCPT1) == 0 );
return length;
}
/*----------------------------------------------------------------------------
* \brief Read available data from Endpoint OUT
*/
uint32_t USB_Read(Usb *pUsb, char *pData, uint32_t length)
{
uint32_t packetSize = 0;
if (!read_job)
{
/* Set the buffer address for ep data */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[USB_EP_OUT-1];
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = 0;
/* Start the reception by clearing the bank 0 ready bit */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSCLR.bit.BK0RDY = true;
/* set the user flag */
read_job = true;
}
/* Check for Transfer Complete 0 flag */
if ( pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0 )
{
/* Set packet size */
packetSize = SAM_BA_MIN(usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT, length);
/* Copy read data to user buffer */
memcpy(pData, udd_ep_out_cache_buffer[USB_EP_OUT-1], packetSize);
/* Clear the Transfer Complete 0 flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0;
/* Clear the user flag */
read_job = false;
}
return packetSize;
}
uint32_t USB_Read_blocking(Usb *pUsb, char *pData, uint32_t length)
{
if (read_job)
{
/* Stop the reception by setting the bank 0 ready bit */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSSET.bit.BK0RDY = true;
/* Clear the user flag */
read_job = false;
}
/* Set the buffer address for ep data */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = ((uint32_t)pData);
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
/* Set the multi packet size as zero for multi-packet transfers where length > ep size */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = length;
/* Clear the bank 0 ready flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSCLR.bit.BK0RDY = true;
/* Wait for transfer to complete */
while (!( pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0 ));
/* Clear Transfer complete 0 flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0;
return length;
}
/*----------------------------------------------------------------------------
* \brief Test if the device is configured and handle enumeration
*/
uint8_t USB_IsConfigured(P_USB_CDC pCdc)
{
Usb *pUsb = pCdc->pUsb;
/* Check for End of Reset flag */
if (pUsb->DEVICE.INTFLAG.reg & USB_DEVICE_INTFLAG_EORST)
{
/* Clear the flag */
pUsb->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_EORST;
/* Set Device address as 0 */
pUsb->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | 0;
/* Configure endpoint 0 */
/* Configure Endpoint 0 for Control IN and Control OUT */
pUsb->DEVICE.DeviceEndpoint[0].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(1) | USB_DEVICE_EPCFG_EPTYPE1(1);
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_BK0RDY;
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
/* Configure control OUT Packet size to 64 bytes */
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.SIZE = 3;
/* Configure control IN Packet size to 64 bytes */
usb_endpoint_table[0].DeviceDescBank[1].PCKSIZE.bit.SIZE = 3;
/* Configure the data buffer address for control OUT */
usb_endpoint_table[0].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[0];
/* Configure the data buffer address for control IN */
usb_endpoint_table[0].DeviceDescBank[1].ADDR.reg = (uint32_t)&udd_ep_in_cache_buffer[0];
/* Set Multipacket size to 8 for control OUT and byte count to 0*/
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = 8;
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK0RDY;
// Reset current configuration value to 0
pCdc->currentConfiguration = 0;
}
else
{
if (pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_RXSTP)
{
sam_ba_usb_CDC_Enumerate(pCdc);
}
}
return pCdc->currentConfiguration;
}
/*----------------------------------------------------------------------------
* \brief Stall the control endpoint
*/
void USB_SendStall(Usb *pUsb, bool direction_in)
{
/* Check the direction */
if (direction_in)
{
/* Set STALL request on IN direction */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.STALLRQ1 = 1;
}
else
{
/* Set STALL request on OUT direction */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.STALLRQ0 = 1;
}
}
/*----------------------------------------------------------------------------
* \brief Send zero length packet through the control endpoint
*/
void USB_SendZlp(Usb *pUsb)
{
/* Set the byte count as zero */
usb_endpoint_table[0].DeviceDescBank[1].PCKSIZE.bit.BYTE_COUNT = 0;
/* Clear the transfer complete flag */
pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
/* Set the bank as ready */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.BK1RDY = true;
/* Wait for transfer to complete */
while (!( pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.bit.TRCPT1 ));
}
/*----------------------------------------------------------------------------
* \brief Set USB device address obtained from host
*/
void USB_SetAddress(Usb *pUsb, uint16_t wValue)
{
pUsb->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | wValue;
}
/*----------------------------------------------------------------------------
* \brief Configure USB device
*/
void USB_Configure(Usb *pUsb)
{
/* Configure BULK OUT endpoint for CDC Data interface*/
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(3);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.SIZE = 3;
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_BK0RDY;
/* Configure the data buffer */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[1];
/* Configure BULK IN endpoint for CDC Data interface */
pUsb->DEVICE.DeviceEndpoint[USB_EP_IN].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE1(3);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_IN].DeviceDescBank[1].PCKSIZE.bit.SIZE = 3;
pUsb->DEVICE.DeviceEndpoint[USB_EP_IN].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
/* Configure the data buffer */
usb_endpoint_table[USB_EP_IN].DeviceDescBank[1].ADDR.reg = (uint32_t)&udd_ep_in_cache_buffer[1];
/* Configure INTERRUPT IN endpoint for CDC COMM interface*/
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE1(4);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_COMM].DeviceDescBank[1].PCKSIZE.bit.SIZE = 0;
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
}

View file

@ -1,45 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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_DRIVER_USB_H_
#define _BOARD_DRIVER_USB_H_
#include "sam_ba_cdc.h"
extern UsbDeviceDescriptor usb_endpoint_table[MAX_EP];
extern uint8_t udd_ep_out_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
extern uint8_t udd_ep_in_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
P_USB_CDC USB_Open(P_USB_CDC pCdc, Usb *pUsb);
void USB_Init(void);
uint32_t USB_Write(Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num);
uint32_t USB_Read(Usb *pUsb, char *pData, uint32_t length);
uint32_t USB_Read_blocking(Usb *pUsb, char *pData, uint32_t length);
uint8_t USB_IsConfigured(P_USB_CDC pCdc);
void USB_SendStall(Usb *pUsb, bool direction_in);
void USB_SendZlp(Usb *pUsb);
void USB_SetAddress(Usb *pUsb, uint16_t wValue);
void USB_Configure(Usb *pUsb);
#endif // _BOARD_DRIVER_USB_H_

View file

@ -1,145 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <sam.h>
#include "board_definitions.h"
/**
* \brief system_init() configures the needed clocks and according Flash Read Wait States.
* 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 3
* 3) Put Generic Clock Generator 3 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.
*/
// Constants for Clock generators
#define GENERIC_CLOCK_GENERATOR_MAIN (0u)
#define GENERIC_CLOCK_GENERATOR_XOSC32K (3u)
#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)
void board_init(void)
{
/* Set 1 Flash Wait State for 48MHz */
NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_RWS(0);
/* ----------------------------------------------------------------------------------------------
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator)
*/
OSC32KCTRL->XOSC32K.reg = OSC32KCTRL_XOSC32K_ENABLE | OSC32KCTRL_XOSC32K_EN32K | OSC32KCTRL_XOSC32K_EN32K | OSC32KCTRL_XOSC32K_CGM_XT | OSC32KCTRL_XOSC32K_XTALEN;
while( (OSC32KCTRL->STATUS.reg & OSC32KCTRL_STATUS_XOSC32KRDY) == 0 ){
/* Wait for oscillator to be ready */
}
OSC32KCTRL->RTCCTRL.bit.RTCSEL = OSC32KCTRL_RTCCTRL_RTCSEL_ULP1K;
/* 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
*/
GCLK->CTRLA.bit.SWRST = 1;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_SWRST ){
/* wait for reset to complete */
}
/* ----------------------------------------------------------------------------------------------
* 2) Put XOSC32K as source of Generic Clock Generator 3
*/
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_XOSC32K].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_XOSC32K) | //generic clock gen 3
GCLK_GENCTRL_GENEN;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL3 ){
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 3) Put Generic Clock Generator 3 as source for Generic Clock Gen 0 (DFLL48M reference)
*/
GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSCULP32K) | GCLK_GENCTRL_GENEN;
/* ----------------------------------------------------------------------------------------------
* 4) Enable DFLL48M clock
*/
/* DFLL Configuration in Open Loop mode */
OSCCTRL->DFLLCTRLA.reg = 0;
//GCLK->PCHCTRL[OSCCTRL_GCLK_ID_DFLL48].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK3_Val);
OSCCTRL->DFLLMUL.reg = OSCCTRL_DFLLMUL_CSTEP( 0x1 ) |
OSCCTRL_DFLLMUL_FSTEP( 0x1 ) |
OSCCTRL_DFLLMUL_MUL( 0 );
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLMUL )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLCTRLB.reg = 0;
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLCTRLB )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLCTRLA.reg |= OSCCTRL_DFLLCTRLA_ENABLE;
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_ENABLE )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLVAL.reg = OSCCTRL->DFLLVAL.reg;
while( OSCCTRL->DFLLSYNC.bit.DFLLVAL );
OSCCTRL->DFLLCTRLB.reg = OSCCTRL_DFLLCTRLB_WAITLOCK |
OSCCTRL_DFLLCTRLB_CCDIS | OSCCTRL_DFLLCTRLB_USBCRM ;
while ( !OSCCTRL->STATUS.bit.DFLLRDY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
*/
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_MAIN].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL) |
GCLK_GENCTRL_IDC |
GCLK_GENCTRL_OE |
GCLK_GENCTRL_GENEN;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0 )
{
/* Wait for synchronization */
}
/* Turn on the digital interface clock */
//MCLK->APBAMASK.reg |= MCLK_APBAMASK_GCLK;
/*
* Now that all system clocks are configured, we can set CLKDIV .
* These values are normally the ones present after Reset.
*/
MCLK->CPUDIV.reg = MCLK_CPUDIV_DIV_DIV1;
}

View file

@ -1,160 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <sam.h>
struct ConstVectors
{
/* Stack pointer */
void* pvStack;
/* Cortex-M handlers */
void* pfnReset_Handler;
void* pfnNMI_Handler;
void* pfnHardFault_Handler;
void* pfnMemManage_Handler;
void* pfnBusFault_Handler;
void* pfnUsageFault_Handler;
void* pvReservedM9;
void* pvReservedM8;
void* pvReservedM7;
void* pvReservedM6;
void* pfnSVC_Handler;
void* pfnDebugMon_Handler;
void* pvReservedM3;
void* pfnPendSV_Handler;
void* pfnSysTick_Handler;
};
/* Symbols exported from linker script */
extern uint32_t __etext ;
extern uint32_t __data_start__ ;
extern uint32_t __data_end__ ;
extern uint32_t __bss_start__ ;
extern uint32_t __bss_end__ ;
extern uint32_t __StackTop;
extern int main(void);
extern void __libc_init_array(void);
/* Exception Table */
__attribute__ ((section(".isr_vector")))
const struct ConstVectors exception_table =
{
/* Configure Initial Stack Pointer, using linker-generated symbols */
.pvStack = (void*) (&__StackTop),
.pfnReset_Handler = (void*) Reset_Handler,
.pfnNMI_Handler = (void*) NMI_Handler,
.pfnHardFault_Handler = (void*) HardFault_Handler,
.pfnMemManage_Handler = (void*) MemManage_Handler,
.pfnBusFault_Handler = (void*) BusFault_Handler,
.pfnUsageFault_Handler = (void*) UsageFault_Handler,
.pvReservedM9 = (void*) (0UL), /* Reserved */
.pvReservedM8 = (void*) (0UL), /* Reserved */
.pvReservedM7 = (void*) (0UL), /* Reserved */
.pvReservedM6 = (void*) (0UL), /* Reserved */
.pfnSVC_Handler = (void*) SVC_Handler,
.pfnDebugMon_Handler = (void*) (0UL),
.pvReservedM3 = (void*) (0UL), /* Reserved */
.pfnPendSV_Handler = (void*) PendSV_Handler,
.pfnSysTick_Handler = (void*) SysTick_Handler,
};
/**
* \brief This is the code that gets called on processor reset.
* Initializes the device and call the main() routine.
*/
void Reset_Handler( void )
{
uint32_t *pSrc, *pDest;
/* Initialize the initialized data section */
pSrc = &__etext;
pDest = &__data_start__;
if ( (&__data_start__ != &__data_end__) && (pSrc != pDest) )
{
for (; pDest < &__data_end__ ; pDest++, pSrc++ )
{
*pDest = *pSrc ;
}
}
/* Clear the zero section */
if ( &__bss_start__ != &__bss_end__ )
{
for ( pDest = &__bss_start__ ; pDest < &__bss_end__ ; pDest++ )
{
*pDest = 0ul ;
}
}
// board_init(); // will be done in main() after app check
/* Initialize the C library */
// __libc_init_array();
main();
while (1);
}
void NMI_Handler(void)
{
__BKPT(14);
while (1);
}
void HardFault_Handler(void)
{
__BKPT(13);
while (1);
}
void MemManage_Handler(void)
{
__BKPT(13);
while (1);
}
void BusFault_Handler(void)
{
__BKPT(13);
while (1);
}
void UsageFault_Handler(void)
{
__BKPT(13);
while (1);
}
void SVC_Handler(void)
{
__BKPT(5);
while (1);
}
void PendSV_Handler(void)
{
__BKPT(2);
while (1);
}

View file

@ -1,222 +0,0 @@
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
/* Linker script to configure memory regions.
* Need modifying for a specific board.
* FLASH.ORIGIN: starting address of flash
* FLASH.LENGTH: length of flash
* RAM.ORIGIN: starting address of RAM bank 0
* RAM.LENGTH: length of RAM bank 0
*/
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x4000 /* First 16KB used by bootloader */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000-0x0004 /* 4 bytes used by bootloader to keep data between resets */
}
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
* __sketch_vectors_ptr
*/
ENTRY(Reset_Handler)
SECTIONS
{
. = ORIGIN(FLASH);
.vectors :
{
KEEP(*(.isr_vector))
} > FLASH
.text :
{
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/
/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/
__etext = .;
PROVIDE(__sketch_vectors_ptr = ORIGIN(FLASH) + LENGTH(FLASH));
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
} > RAM
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}

View file

@ -1,222 +0,0 @@
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
/* Linker script to configure memory regions.
* Need modifying for a specific board.
* FLASH.ORIGIN: starting address of flash
* FLASH.LENGTH: length of flash
* RAM.ORIGIN: starting address of RAM bank 0
* RAM.LENGTH: length of RAM bank 0
*/
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x4000 /* First 16KB used by bootloader */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000-0x0004 /* 4 bytes used by bootloader to keep data between resets */
}
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
* __sketch_vectors_ptr
*/
ENTRY(Reset_Handler)
SECTIONS
{
. = ORIGIN(FLASH);
.vectors :
{
KEEP(*(.isr_vector))
} > FLASH
.text :
{
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/
/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/
__etext = .;
PROVIDE(__sketch_vectors_ptr = ORIGIN(FLASH) + LENGTH(FLASH));
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
} > RAM
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}

View file

@ -1,20 +0,0 @@
#!/bin/bash -ex
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/
BOARD_ID=arduino_mkrfox1200 NAME=samd21_sam_ba_arduino_mkrfox1200 make clean all
mv -v samd21_sam_ba_arduino_mkrfox1200.* ../mkrfox1200/
echo Done building bootloaders!

View file

@ -1,235 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <stdio.h>
#include <sam.h>
#include "sam_ba_monitor.h"
#include "sam_ba_serial.h"
#include "board_definitions.h"
#include "board_driver_led.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 volatile bool main_b_cdc_enable = false;
/**
* \brief Check the application startup condition
*
*/
static void check_start_application(void)
{
// LED_init();
// LED_off();
#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)
*/
if (__sketch_vectors_ptr == 0xFFFFFFFF)
{
/* Stay in bootloader */
return;
}
/*
* Load the sketch Reset Handler address
* __sketch_vectors_ptr is exported from linker script and point on first 32b word of sketch vector table
* First 32b word is sketch stack
* Second 32b word is sketch entry point: Reset_Handler()
*/
pulSketch_Start_Address = &__sketch_vectors_ptr ;
pulSketch_Start_Address++ ;
/*
* Test vector table address of sketch @ &__sketch_vectors_ptr
* Stay in SAM-BA if this function is not aligned enough, ie not valid
*/
if ( ((uint32_t)(&__sketch_vectors_ptr) & ~SCB_VTOR_TBLOFF_Msk) != 0x00)
{
/* Stay in bootloader */
return;
}
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0xf01669efUL
//if (PM->RCAUSE.bit.POR)
if( RSTC->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 SAMD51 default 48Mhz clock @ reset.
*/
for (uint32_t i=0; i<6000000; 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]));
volatile bool boot_en;
// Enable the input mode in Boot GPIO Pin
boot_port->DIRCLR.reg = BOOT_PIN_MASK;
boot_port->PINCFG[BOOT_LOAD_PIN & 0x1F].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN;
boot_port->OUTSET.reg = BOOT_PIN_MASK;
// Read the BOOT_LOAD_PIN status
boot_en = (boot_port->IN.reg) & BOOT_PIN_MASK;
// Check the bootloader enable condition
if (!boot_en)
{
// Stay in bootloader
return;
}
#endif
*/
// LED_on();
/* 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
# define DEBUG_PIN_HIGH port_pin_set_output_level(BOOT_LED, 1)
# define DEBUG_PIN_LOW port_pin_set_output_level(BOOT_LED, 0)
#else
# define DEBUG_PIN_HIGH do{}while(0)
# define DEBUG_PIN_LOW do{}while(0)
#endif
/**
* \brief SAMDx1 SAM-BA Main loop.
* \return Unused (ANSI-C compatibility).
*/
int main(void)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
P_USB_CDC pCdc;
#endif
DEBUG_PIN_HIGH;
/* Jump in application if condition is satisfied */
check_start_application();
/* We have determined we should stay in the monitor. */
/* System initialization */
board_init();
__enable_irq();
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == 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
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 (pCdc->IsConfigured(pCdc) != 0)
{
main_b_cdc_enable = true;
}
/* Check if a USB enumeration has succeeded and if comm port has been opened */
if (main_b_cdc_enable)
{
sam_ba_monitor_init(SAM_BA_INTERFACE_USBCDC);
/* SAM-BA on USB loop */
while( 1 )
{
sam_ba_monitor_run();
}
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
/* Check if a '#' has been received */
if (!main_b_cdc_enable && serial_sharp_received())
{
sam_ba_monitor_init(SAM_BA_INTERFACE_USART);
/* SAM-BA on Serial loop */
while(1)
{
sam_ba_monitor_run();
}
}
#endif
}
}
void SysTick_Handler(void)
{
LED_pulse();
sam_ba_monitor_sys_tick();
}

View file

@ -1,98 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include "sam_ba_cdc.h"
#include "board_driver_usb.h"
usb_cdc_line_coding_t line_coding=
{
115200, // baudrate
0, // 1 Stop Bit
0, // None Parity
8 // 8 Data bits
};
#define pCdc (&sam_ba_cdc)
int cdc_putc(/*P_USB_CDC pCdc,*/ int value)
{
/* Send single byte on USB CDC */
USB_Write(pCdc->pUsb, (const char *)&value, 1, USB_EP_IN);
return 1;
}
int cdc_getc(/*P_USB_CDC pCdc*/void)
{
uint8_t rx_char;
/* Read singly byte on USB CDC */
USB_Read(pCdc->pUsb, (char *)&rx_char, 1);
return (int)rx_char;
}
bool cdc_is_rx_ready(/*P_USB_CDC pCdc*/void)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Return transfer complete 0 flag status */
return (pCdc->pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0);
}
uint32_t cdc_write_buf(/*P_USB_CDC pCdc,*/ void const* data, uint32_t length)
{
/* Send the specified number of bytes on USB CDC */
USB_Write(pCdc->pUsb, (const char *)data, length, USB_EP_IN);
return length;
}
uint32_t cdc_read_buf(/*P_USB_CDC pCdc,*/ void* data, uint32_t length)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Read from USB CDC */
return USB_Read(pCdc->pUsb, (char *)data, length);
}
uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Blocking read till specified number of bytes is received */
// XXX: USB_Read_blocking is not reliable
// return USB_Read_blocking(pCdc, (char *)data, length);
char *dst = (char *)data;
uint32_t remaining = length;
while (remaining)
{
uint32_t readed = USB_Read(pCdc->pUsb, (char *)dst, remaining);
remaining -= readed;
dst += readed;
}
return length;
}

View file

@ -1,91 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 _SAM_BA_USB_CDC_H_
#define _SAM_BA_USB_CDC_H_
#include <stdint.h>
#include "sam_ba_usb.h"
typedef struct
{
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} usb_cdc_line_coding_t;
/* CDC Class Specific Request Code */
#define GET_LINE_CODING 0x21A1
#define SET_LINE_CODING 0x2021
#define SET_CONTROL_LINE_STATE 0x2221
extern usb_cdc_line_coding_t line_coding;
/**
* \brief Sends a single byte through USB CDC
*
* \param Data to send
* \return number of data sent
*/
int cdc_putc(/*P_USB_CDC pCdc,*/ int value);
/**
* \brief Reads a single byte through USB CDC
*
* \return Data read through USB
*/
int cdc_getc(/*P_USB_CDC pCdc*/);
/**
* \brief Checks if a character has been received on USB CDC
*
* \return \c 1 if a byte is ready to be read.
*/
bool cdc_is_rx_ready(/*P_USB_CDC pCdc*/);
/**
* \brief Sends buffer on USB CDC
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t cdc_write_buf(/*P_USB_CDC pCdc,*/ void const* data, uint32_t length);
/**
* \brief Gets data on USB CDC
*
* \param data pointer
* \param number of data to read
* \return number of data read
*/
uint32_t cdc_read_buf(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
/**
* \brief Gets specified number of bytes on USB CDC
*
* \param data pointer
* \param number of data to read
* \return number of data read
*/
uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
#endif // _SAM_BA_USB_CDC_H_

View file

@ -1,552 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include "sam.h"
#include <string.h>
#include "sam_ba_monitor.h"
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#include "board_driver_usb.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#include "board_driver_led.h"
const char RomBOOT_Version[] = SAM_BA_VERSION;
const char RomBOOT_ExtendedCapabilities[] = "[Arduino:XYZ]";
/* Provides one common interface to handle both USART and USB-CDC */
typedef struct
{
/* send one byte of data */
int (*put_c)(int value);
/* Get one byte */
int (*get_c)(void);
/* Receive buffer not empty */
bool (*is_rx_ready)(void);
/* Send given data (polling) */
uint32_t (*putdata)(void const* data, uint32_t length);
/* Get data from comm. device */
uint32_t (*getdata)(void* data, uint32_t length);
/* Send given data (polling) using xmodem (if necessary) */
uint32_t (*putdata_xmd)(void const* data, uint32_t length);
/* Get data from comm. device using xmodem (if necessary) */
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
/* Initialize structures with function pointers from supported interfaces */
const t_monitor_if uart_if =
{
.put_c = serial_putc,
.get_c = serial_getc,
.is_rx_ready = serial_is_rx_ready,
.putdata = serial_putdata,
.getdata = serial_getdata,
.putdata_xmd = serial_putdata_xmd,
.getdata_xmd = serial_getdata_xmd
};
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == 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 =
{
.put_c = cdc_putc,
.get_c = cdc_getc,
.is_rx_ready = cdc_is_rx_ready,
.putdata = cdc_write_buf,
.getdata = cdc_read_buf,
.putdata_xmd = cdc_write_buf,
.getdata_xmd = cdc_read_buf_xmd
};
#endif
/* The pointer to the interface object use by the monitor */
t_monitor_if * ptr_monitor_if;
/* b_terminal_mode mode (ascii) or hex mode */
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
//Selects the requested interface for future actions
if (com_interface == SAM_BA_INTERFACE_USART)
{
ptr_monitor_if = (t_monitor_if*) &uart_if;
b_sam_ba_interface_usart = true;
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
if (com_interface == SAM_BA_INTERFACE_USBCDC)
{
ptr_monitor_if = (t_monitor_if*) &usbcdc_if;
}
#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 emission by USART
*
* \param *data Data pointer
* \param length Length of the data
*/
void sam_ba_putdata_term(uint8_t* data, uint32_t length)
{
uint8_t temp, buf[12], *data_ascii;
uint32_t i, int_value;
if (b_terminal_mode)
{
if (length == 4)
int_value = *(uint32_t *) data;
else if (length == 2)
int_value = *(uint16_t *) data;
else
int_value = *(uint8_t *) data;
data_ascii = buf + 2;
data_ascii += length * 2 - 1;
for (i = 0; i < length * 2; i++)
{
temp = (uint8_t) (int_value & 0xf);
if (temp <= 0x9)
*data_ascii = temp | 0x30;
else
*data_ascii = temp + 0x37;
int_value >>= 4;
data_ascii--;
}
buf[0] = '0';
buf[1] = 'x';
buf[length * 2 + 2] = '\n';
buf[length * 2 + 3] = '\r';
sam_ba_putdata(ptr_monitor_if, buf, length * 2 + 4);
}
else
sam_ba_putdata(ptr_monitor_if, data, length);
return;
}
volatile uint32_t sp;
void call_applet(uint32_t address)
{
uint32_t app_start_address;
__disable_irq();
sp = __get_MSP();
/* Rebase the Stack Pointer */
__set_MSP(*(uint32_t *) address);
/* Load the Reset Handler address of the application */
app_start_address = *(uint32_t *)(address + 4);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(app_start_address));
}
uint32_t current_number;
uint32_t i, length;
uint8_t command, *ptr_data, *ptr, data[SIZEBUFMAX];
uint8_t j;
uint32_t u32tmp;
uint32_t PAGE_SIZE, PAGES, MAX_FLASH;
// Prints a 32-bit integer in hex.
static void put_uint32(uint32_t n)
{
char buff[8];
int i;
for (i=0; i<8; i++)
{
int d = n & 0XF;
n = (n >> 4);
buff[7-i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
sam_ba_putdata( ptr_monitor_if, buff, 8);
}
static void sam_ba_monitor_loop(void)
{
length = sam_ba_getdata(ptr_monitor_if, data, SIZEBUFMAX);
ptr = data;
for (i = 0; i < length; i++, ptr++)
{
if (*ptr == 0xff) continue;
if (*ptr == '#')
{
if (b_terminal_mode)
{
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
if (command == 'S')
{
//Check if some data are remaining in the "data" buffer
if(length>i)
{
//Move current indexes to next avail data (currently ptr points to "#")
ptr++;
i++;
//We need to add first the remaining data of the current buffer already read from usb
//read a maximum of "current_number" bytes
if ((length-i) < current_number)
{
u32tmp=(length-i);
}
else
{
u32tmp=current_number;
}
memcpy(ptr_data, ptr, u32tmp);
i += u32tmp;
ptr += u32tmp;
j = u32tmp;
}
//update i with the data read from the buffer
i--;
ptr--;
//Do we expect more data ?
if(j<current_number)
sam_ba_getdata_xmd(ptr_monitor_if, ptr_data, current_number-j);
__asm("nop");
}
else if (command == 'R')
{
sam_ba_putdata_xmd(ptr_monitor_if, ptr_data, current_number);
}
else if (command == 'O')
{
*ptr_data = (char) current_number;
}
else if (command == 'H')
{
*((uint16_t *) ptr_data) = (uint16_t) current_number;
}
else if (command == 'W')
{
*((int *) ptr_data) = current_number;
}
else if (command == 'o')
{
sam_ba_putdata_term(ptr_data, 1);
}
else if (command == 'h')
{
current_number = *((uint16_t *) ptr_data);
sam_ba_putdata_term((uint8_t*) &current_number, 2);
}
else if (command == 'w')
{
current_number = *((uint32_t *) ptr_data);
sam_ba_putdata_term((uint8_t*) &current_number, 4);
}
else if (command == 'G')
{
call_applet(current_number);
/* Rebase the Stack Pointer */
__set_MSP(sp);
__enable_irq();
if (b_sam_ba_interface_usart) {
ptr_monitor_if->put_c(0x6);
}
}
else if (command == 'T')
{
b_terminal_mode = 1;
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
else if (command == 'N')
{
if (b_terminal_mode == 0)
{
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
b_terminal_mode = 0;
}
else if (command == 'V')
{
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++;
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++;
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__TIME__), i);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
else if (command == 'X')
{
// Syntax: X[ADDR]#
// Erase the flash memory starting from ADDR to the end of flash.
//block size 16 pages
uint32_t dst_addr = current_number; // starting address
while (dst_addr < MAX_FLASH)
{
while (NVMCTRL->STATUS.bit.READY == 0);
// Execute "EB" Erase Block
NVMCTRL->ADDR.reg = dst_addr;
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB;
while (NVMCTRL->STATUS.bit.READY == 0);
dst_addr += PAGE_SIZE * 16; // Skip a block
}
// Notify command completed
sam_ba_putdata( ptr_monitor_if, "X\n\r", 3);
}
else if (command == 'Y')
{
// This command writes the content of a buffer in SRAM into flash memory.
// Syntax: Y[ADDR],0#
// Set the starting address of the SRAM buffer.
// Syntax: Y[ROM_ADDR],[SIZE]#
// Write the first SIZE bytes from the SRAM buffer (previously set) into
// flash memory starting from address ROM_ADDR
static uint32_t *src_buff_addr = NULL;
if (current_number == 0)
{
// Set buffer address
src_buff_addr = (uint32_t*)ptr_data;
}
else
{
// Write to flash
uint32_t size = current_number/4;
uint32_t *src_addr = src_buff_addr;
uint32_t *dst_addr = (uint32_t*)ptr_data;
// Set automatic page write
NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_WMODE(NVMCTRL_CTRLA_WMODE_AP);
// Do writes in pages
while (size)
{
// Execute "PBC" Page Buffer Clear
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC;
while (NVMCTRL->STATUS.bit.READY == 0)
;
// Fill page buffer
uint32_t i;
for (i=0; i<(PAGE_SIZE/4) && i<size; i++)
{
dst_addr[i] = src_addr[i];
}
// Execute "WP" Write Page
NVMCTRL->ADDR.reg = ((uint32_t)dst_addr);
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WP;
while (NVMCTRL->STATUS.bit.READY == 0)
;
// Advance to next page
dst_addr += i;
src_addr += i;
size -= i;
}
}
// Notify command completed
sam_ba_putdata( ptr_monitor_if, "Y\n\r", 3);
}
else if (command == 'Z')
{
// This command calculate CRC for a given area of memory.
// It's useful to quickly check if a transfer has been done
// successfully.
// Syntax: Z[START_ADDR],[SIZE]#
// Returns: Z[CRC]#
uint8_t *data = (uint8_t *)ptr_data;
uint32_t size = current_number;
uint16_t crc = 0;
uint32_t i = 0;
for (i=0; i<size; i++)
crc = serial_add_crc(*data++, crc);
// Send response
sam_ba_putdata( ptr_monitor_if, "Z", 1);
put_uint32(crc);
sam_ba_putdata( ptr_monitor_if, "#\n\r", 3);
}
command = 'z';
current_number = 0;
if (b_terminal_mode)
{
sam_ba_putdata( ptr_monitor_if, ">", 1);
}
}
else
{
if (('0' <= *ptr) && (*ptr <= '9'))
{
current_number = (current_number << 4) | (*ptr - '0');
}
else if (('A' <= *ptr) && (*ptr <= 'F'))
{
current_number = (current_number << 4) | (*ptr - 'A' + 0xa);
}
else if (('a' <= *ptr) && (*ptr <= 'f'))
{
current_number = (current_number << 4) | (*ptr - 'a' + 0xa);
}
else if (*ptr == ',')
{
ptr_data = (uint8_t *) current_number;
current_number = 0;
}
else
{
command = *ptr;
current_number = 0;
}
}
}
}
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.
*/
void sam_ba_monitor_run(void)
{
uint32_t pageSizes[] = { 8, 16, 32, 64, 128, 256, 512, 1024 };
PAGE_SIZE = pageSizes[NVMCTRL->PARAM.bit.PSZ];
PAGES = NVMCTRL->PARAM.bit.NVMP;
MAX_FLASH = PAGE_SIZE * PAGES;
ptr_data = NULL;
command = 'z';
while (1)
{
sam_ba_monitor_loop();
}
}

View file

@ -1,72 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 _MONITOR_SAM_BA_H_
#define _MONITOR_SAM_BA_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
#endif
/* Selects USB as the communication interface of the monitor */
#define SAM_BA_INTERFACE_USBCDC 0
/* Selects USART as the communication interface of the monitor */
#define SAM_BA_INTERFACE_USART 1
/* Selects USB as the communication interface of the monitor */
#define SIZEBUFMAX 64
/**
* \brief Initialize the monitor
*
*/
void sam_ba_monitor_init(uint8_t com_interface);
/**
* \brief System tick function of the SAM-BA Monitor
*
*/
void sam_ba_monitor_sys_tick(void);
/**
* \brief Main function of the SAM-BA Monitor
*
*/
void sam_ba_monitor_run(void);
/**
* \brief
*
*/
void sam_ba_putdata_term(uint8_t* data, uint32_t length);
/**
* \brief
*
*/
void call_applet(uint32_t address);
#endif // _MONITOR_SAM_BA_H_

View file

@ -1,529 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <sam.h>
#include "board_definitions.h"
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
/* Local reference to current Usart instance in use with this driver */
//struct usart_module usart_sam_ba;
/* Variable to let the main task select the appropriate communication interface */
volatile uint8_t b_sharp_received;
/* RX and TX Buffers + rw pointers for each buffer */
volatile uint8_t buffer_rx_usart[USART_BUFFER_SIZE];
volatile uint8_t idx_rx_read;
volatile uint8_t idx_rx_write;
volatile uint8_t buffer_tx_usart[USART_BUFFER_SIZE];
volatile uint8_t idx_tx_read;
volatile uint8_t idx_tx_write;
/* Test for timeout in AT91F_GetChar */
uint8_t error_timeout;
uint16_t size_of_data;
uint8_t mode_of_transfer;
#define BOOT_USART_PAD(n) BOOT_USART_PAD##n
#define GPIO_PIN(n) (((n)&0x1Fu) << 0)
#define GPIO_PORT(n) ((n) >> 5)
/**
* \brief Open the given USART
*/
void serial_open(void)
{
uint32_t port;
uint32_t pin;
GCLK->PCHCTRL[BOOT_GCLK_ID_CORE].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
GCLK->PCHCTRL[BOOT_GCLK_ID_SLOW].reg = GCLK_PCHCTRL_GEN_GCLK3_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
MCLK->BOOK_USART_MASK.reg |= BOOT_USART_BUS_CLOCK_INDEX ;
/* Configure the port pins for SERCOM_USART */
if (BOOT_USART_PAD0 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD0 & 0x200000) >> 21;
pin = (BOOT_USART_PAD0 >> 16);
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD0 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD1 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD1 & 0x200000) >> 21;
pin = BOOT_USART_PAD1 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD1 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD2 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD2 & 0x200000) >> 21;
pin = BOOT_USART_PAD2 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD2 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD3 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD3 & 0x200000) >> 21;
pin = BOOT_USART_PAD3 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD3 & 0xFF) << (4 * (pin & 0x01u));
}
/* Baud rate 115200 - clock 48MHz -> BAUD value-63018 */
uart_basic_init(BOOT_USART_MODULE, 63018, BOOT_USART_PAD_SETTINGS);
//Initialize flag
b_sharp_received = false;
idx_rx_read = 0;
idx_rx_write = 0;
idx_tx_read = 0;
idx_tx_write = 0;
error_timeout = 0;
}
/**
* \brief Close communication line
*/
void serial_close(void)
{
uart_disable(BOOT_USART_MODULE);
}
/**
* \brief Puts a byte on usart line
* The type int is used to support printf redirection from compiler LIB.
*
* \param value Value to put
*
* \return \c 1 if function was successfully done, otherwise \c 0.
*/
int serial_putc(int value)
{
uart_write_byte(BOOT_USART_MODULE, (uint8_t)value);
return 1;
}
int serial_getc(void)
{
uint16_t retval;
//Wait until input buffer is filled
while(!(serial_is_rx_ready()));
retval = (uint16_t)uart_read_byte(BOOT_USART_MODULE);
//usart_read_wait(&usart_sam_ba, &retval);
return (int)retval;
}
int serial_sharp_received(void)
{
if (serial_is_rx_ready())
{
if (serial_getc() == SHARP_CHARACTER)
return (true);
}
return (false);
}
bool serial_is_rx_ready(void)
{
return (BOOT_USART_MODULE->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_RXC);
}
int serial_readc(void)
{
int retval;
retval = buffer_rx_usart[idx_rx_read];
idx_rx_read = (idx_rx_read + 1) & (USART_BUFFER_SIZE - 1);
return (retval);
}
//Send given data (polling)
uint32_t serial_putdata(void const* data, uint32_t length)
{
uint32_t i;
uint8_t* ptrdata;
ptrdata = (uint8_t*) data;
for (i = 0; i < length; i++)
{
serial_putc(*ptrdata);
ptrdata++;
}
return (i);
}
//Get data from comm. device
uint32_t serial_getdata(void* data, uint32_t length)
{
uint8_t* ptrdata;
ptrdata = (uint8_t*) data;
*ptrdata = serial_getc();
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
//*----------------------------------------------------------------------------
static uint16_t getbytes(uint8_t *ptr_data, uint16_t length)
{
uint16_t crc = 0;
uint16_t cpt;
uint8_t c;
for (cpt = 0; cpt < length; ++cpt)
{
c = serial_getc();
if (error_timeout)
return 1;
crc = serial_add_crc(c, crc);
//crc = (crc << 8) ^ xcrc16tab[(crc>>8) ^ c];
if (size_of_data || mode_of_transfer)
{
*ptr_data++ = c;
if (length == PKTLEN_128)
size_of_data--;
}
}
return crc;
}
//*----------------------------------------------------------------------------
//* \brief Used by Xup to send packets.
//*----------------------------------------------------------------------------
static int putPacket(uint8_t *tmppkt, uint8_t sno)
{
uint32_t i;
uint16_t chksm;
uint8_t data;
chksm = 0;
serial_putc(SOH);
serial_putc(sno);
serial_putc((uint8_t) ~(sno));
for (i = 0; i < PKTLEN_128; i++)
{
if (size_of_data || mode_of_transfer)
{
data = *tmppkt++;
size_of_data--;
}
else
data = 0x00;
serial_putc(data);
//chksm = (chksm<<8) ^ xcrc16tab[(chksm>>8)^data];
chksm = serial_add_crc(data, chksm);
}
/* An "endian independent way to extract the CRC bytes. */
serial_putc((uint8_t) (chksm >> 8));
serial_putc((uint8_t) chksm);
return (serial_getc()); /* Wait for ack */
}
//*----------------------------------------------------------------------------
//* \brief Called when a transfer from target to host is being made (considered
//* an upload).
//*----------------------------------------------------------------------------
//Send given data (polling) using xmodem (if necessary)
uint32_t serial_putdata_xmd(void const* data, uint32_t length)
{
uint8_t c, sno = 1;
uint8_t done;
uint8_t * ptr_data = (uint8_t *) data;
error_timeout = 0;
if (!length)
mode_of_transfer = 1;
else
{
size_of_data = length;
mode_of_transfer = 0;
}
if (length & (PKTLEN_128 - 1))
{
length += PKTLEN_128;
length &= ~(PKTLEN_128 - 1);
}
/* Startup synchronization... */
/* Wait to receive a NAK or 'C' from receiver. */
done = 0;
while (!done) {
c = (uint8_t) serial_getc();
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
c = (uint8_t) serial_getc();
if (error_timeout)
{
error_timeout = 0;
return (0);
}
}
switch (c)
{
case NAK:
done = 1;
// ("CSM");
break;
case 'C':
done = 1;
// ("CRC");
break;
case 'q': /* ELS addition, not part of XMODEM spec. */
return (0);
default:
break;
}
}
done = 0;
sno = 1;
while (!done)
{
c = (uint8_t) putPacket((uint8_t *) ptr_data, sno);
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
}
switch (c)
{
case ACK:
++sno;
length -= PKTLEN_128;
ptr_data += PKTLEN_128;
// ("A");
break;
case NAK:
// ("N");
break;
case CAN:
case EOT:
default:
done = 0;
break;
}
if (!length)
{
serial_putc(EOT);
serial_getc(); /* Flush the ACK */
break;
}
// ("!");
}
mode_of_transfer = 0;
// ("Xup_done.");
return (1);
// return(0);
}
/*----------------------------------------------------------------------------
* \brief Used by serial_getdata_xmd to retrieve packets.
*/
static uint8_t getPacket(uint8_t *ptr_data, uint8_t sno)
{
uint8_t seq[2];
uint16_t crc, xcrc;
getbytes(seq, 2);
xcrc = getbytes(ptr_data, PKTLEN_128);
if (error_timeout)
return (false);
/* An "endian independent way to combine the CRC bytes. */
crc = (uint16_t) serial_getc() << 8;
crc += (uint16_t) serial_getc();
if (error_timeout == 1)
return (false);
if ((crc != xcrc) || (seq[0] != sno) || (seq[1] != (uint8_t) (~sno)))
{
serial_putc(CAN);
return (false);
}
serial_putc(ACK);
return (true);
}
//*----------------------------------------------------------------------------
//* \brief Called when a transfer from host to target is being made (considered
//* an download).
//*----------------------------------------------------------------------------
//Get data from comm. device using xmodem (if necessary)
uint32_t serial_getdata_xmd(void* data, uint32_t length)
{
uint32_t timeout;
char c;
uint8_t * ptr_data = (uint8_t *) data;
uint32_t b_run, nbr_of_timeout = 100;
uint8_t sno = 0x01;
uint32_t data_transfered = 0;
//Copied from legacy source code ... might need some tweaking
uint32_t loops_per_second = CPU_FREQUENCY/60;
error_timeout = 0;
if (length == 0)
mode_of_transfer = 1;
else
{
size_of_data = length;
mode_of_transfer = 0;
}
/* Startup synchronization... */
/* Continuously send NAK or 'C' until sender responds. */
// ("Xdown");
while (1)
{
serial_putc('C');
timeout = loops_per_second;
while (!(serial_is_rx_ready()) && timeout)
timeout--;
if (timeout)
break;
if (!(--nbr_of_timeout))
return (0);
// return -1;
}
b_run = true;
// ("Got response");
while (b_run != false)
{
c = (char) serial_getc();
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
// return (-1);
}
switch (c)
{
case SOH: /* 128-byte incoming packet */
// ("O");
b_run = getPacket(ptr_data, sno);
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
// return (-1);
}
if (b_run == true)
{
++sno;
ptr_data += PKTLEN_128;
data_transfered += PKTLEN_128;
}
break;
case EOT: // ("E");
serial_putc(ACK);
b_run = false;
break;
case CAN: // ("C");
case ESC: /* "X" User-invoked abort */
default:
b_run = false;
break;
}
// ("!");
}
mode_of_transfer = 0;
return (true);
// return(b_run);
}

View file

@ -1,143 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 _SAM_BA_SERIAL_H_
#define _SAM_BA_SERIAL_H_
#include <stdint.h>
#include <stdbool.h>
/* USART buffer size (must be a power of two) */
#define USART_BUFFER_SIZE (128)
/* Define the default time-out value for USART. */
#define USART_DEFAULT_TIMEOUT (1000)
/* Xmodem related defines */
/* CRC16 polynomial */
#define CRC16POLY (0x1021)
#define SHARP_CHARACTER '#'
/* X/Ymodem protocol: */
#define SOH (0x01)
//#define STX (0x02)
#define EOT (0x04)
#define ACK (0x06)
#define NAK (0x15)
#define CAN (0x18)
#define ESC (0x1b)
#define PKTLEN_128 (128)
/**
* \brief Open the given USART
*/
void serial_open(void);
/**
* \brief Stops the USART
*/
void serial_close(void);
/**
* \brief Puts a byte on usart line
*
* \param value Value to put
*
* \return \c 1 if function was successfully done, otherwise \c 0.
*/
int serial_putc(int value);
/**
* \brief Waits and gets a value on usart line
*
* \return value read on usart line
*/
int serial_getc(void);
/**
* \brief Returns true if the SAM-BA Uart received the sharp char
*
* \return Returns true if the SAM-BA Uart received the sharp char
*/
int serial_sharp_received(void);
/**
* \brief This function checks if a character has been received on the usart line
*
* \return \c 1 if a byte is ready to be read.
*/
bool serial_is_rx_ready(void);
/**
* \brief Gets a value on usart line
*
* \return value read on usart line
*/
int serial_readc(void);
/**
* \brief Send buffer on usart line
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t serial_putdata(void const* data, uint32_t length); //Send given data (polling)
/**
* \brief Gets data from usart line
*
* \param data pointer
* \param number of data to get
* \return value read on usart line
*/
uint32_t serial_getdata(void* data, uint32_t length); //Get data from comm. device
/**
* \brief Send buffer on usart line using Xmodem protocol
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t serial_putdata_xmd(void const* data, uint32_t length); //Send given data (polling) using xmodem (if necessary)
/**
* \brief Gets data from usart line using Xmodem protocol
*
* \param data pointer
* \param number of data to get
* \return value read on usart line
*/
uint32_t serial_getdata_xmd(void* data, uint32_t length); //Get data from comm. device using xmodem (if necessary)
/**
* \brief Compute the CRC
*
* \param Char to add to CRC
* \param Previous CRC
* \return The new computed CRC
*/
unsigned short serial_add_crc(char c, unsigned short crc);
#endif // _SAM_BA_SERIAL_H_

View file

@ -1,436 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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
*/
#include <stdint.h>
#include <string.h>
#include "board_definitions.h"
#include "sam_ba_usb.h"
#include "board_driver_usb.h"
#include "sam_ba_cdc.h"
/* This data array will be copied into SRAM as its length is inferior to 64 bytes,
* and so can stay in flash.
*/
static __attribute__((__aligned__(4)))
const char devDescriptor[] =
{
/* Device descriptor */
0x12, // bLength
0x01, // bDescriptorType
0x00, // bcdUSB L
0x02, // bcdUSB H
0x02, // bDeviceClass: CDC class code
0x00, // bDeviceSubclass: CDC class sub code
0x00, // bDeviceProtocol: CDC Device protocol
0x40, // bMaxPacketSize0
USB_VID_LOW, // idVendor L
USB_VID_HIGH, // idVendor H
USB_PID_LOW, // idProduct L
USB_PID_HIGH, // idProduct H
0x00, // bcdDevice L, here matching SAM-BA version
0x02, // bcdDevice H
STRING_INDEX_MANUFACTURER, // iManufacturer
STRING_INDEX_PRODUCT, // iProduct
0x00, // SerialNumber, should be based on product unique ID
0x01 // bNumConfigs
};
/* This data array will be consumed directly by USB_Write() and must be in SRAM.
* We cannot send data from product internal flash.
*/
static __attribute__((__aligned__(4)))
char cfgDescriptor[] =
{
/* ============== CONFIGURATION 1 =========== */
/* Configuration 1 descriptor */
0x09, // CbLength
0x02, // CbDescriptorType
0x43, // CwTotalLength 2 EP + Control
0x00,
0x02, // CbNumInterfaces
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
/* Communication Class Interface Descriptor Requirement */
0x09, // bLength
0x04, // bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x01, // bNumEndpoints
0x02, // bInterfaceClass
0x02, // bInterfaceSubclass
0x00, // bInterfaceProtocol
0x00, // iInterface
/* Header Functional Descriptor */
0x05, // bFunction Length
0x24, // bDescriptor type: CS_INTERFACE
0x00, // bDescriptor subtype: Header Func Desc
0x10, // bcdCDC:1.1
0x01,
/* ACM Functional Descriptor */
0x04, // bFunctionLength
0x24, // bDescriptor Type: CS_INTERFACE
0x02, // bDescriptor Subtype: ACM Func Desc
0x00, // bmCapabilities
/* Union Functional Descriptor */
0x05, // bFunctionLength
0x24, // bDescriptorType: CS_INTERFACE
0x06, // bDescriptor Subtype: Union Func Desc
0x00, // bMasterInterface: Communication Class Interface
0x01, // bSlaveInterface0: Data Class Interface
/* Call Management Functional Descriptor */
0x05, // bFunctionLength
0x24, // bDescriptor Type: CS_INTERFACE
0x01, // bDescriptor Subtype: Call Management Func Desc
0x00, // bmCapabilities: D1 + D0
0x01, // bDataInterface: Data Class Interface 1
/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x83, // bEndpointAddress, Endpoint 03 - IN
0x03, // bmAttributes INT
0x08, // wMaxPacketSize
0x00,
0xFF, // bInterval
/* Data Class Interface Descriptor Requirement */
0x09, // bLength
0x04, // bDescriptorType
0x01, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
0x0A, // bInterfaceClass
0x00, // bInterfaceSubclass
0x00, // bInterfaceProtocol
0x00, // iInterface
/* First alternate setting */
/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x81, // bEndpointAddress, Endpoint 01 - IN
0x02, // bmAttributes BULK
USB_EP_IN_SIZE, // wMaxPacketSize
0x00,
0x00, // bInterval
/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - OUT
0x02, // bmAttributes BULK
USB_EP_OUT_SIZE, // wMaxPacketSize
0x00,
0x00 // bInterval
};
#ifndef STRING_MANUFACTURER
# define STRING_MANUFACTURER "Arduino LLC"
#endif
#ifndef STRING_PRODUCT
# define STRING_PRODUCT "Arduino Zero"
#endif
USB_CDC sam_ba_cdc;
/*----------------------------------------------------------------------------
* \brief This function is a callback invoked when a SETUP packet is received
*/
void sam_ba_usb_CDC_Enumerate(P_USB_CDC pCdc)
{
Usb *pUsb = pCdc->pUsb;
static volatile uint8_t bmRequestType, bRequest, dir;
static volatile uint16_t wValue, wIndex, wLength, wStatus;
/* Clear the Received Setup flag */
pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_RXSTP;
/* Read the USB request parameters */
bmRequestType = udd_ep_out_cache_buffer[0][0];
bRequest = udd_ep_out_cache_buffer[0][1];
wValue = (udd_ep_out_cache_buffer[0][2] & 0xFF);
wValue |= (udd_ep_out_cache_buffer[0][3] << 8);
wIndex = (udd_ep_out_cache_buffer[0][4] & 0xFF);
wIndex |= (udd_ep_out_cache_buffer[0][5] << 8);
wLength = (udd_ep_out_cache_buffer[0][6] & 0xFF);
wLength |= (udd_ep_out_cache_buffer[0][7] << 8);
/* Clear the Bank 0 ready flag on Control OUT */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK0RDY;
/* Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1 */
switch ((bRequest << 8) | bmRequestType)
{
case STD_GET_DESCRIPTOR:
if (wValue>>8 == STD_GET_DESCRIPTOR_DEVICE)
{
/* Return Device Descriptor */
USB_Write(pCdc->pUsb, devDescriptor, SAM_BA_MIN(sizeof(devDescriptor), wLength), USB_EP_CTRL);
}
else if (wValue>>8 == STD_GET_DESCRIPTOR_CONFIGURATION)
{
/* Return Configuration Descriptor */
USB_Write(pCdc->pUsb, cfgDescriptor, SAM_BA_MIN(sizeof(cfgDescriptor), wLength), USB_EP_CTRL);
}
else if (wValue>>8 == STD_GET_DESCRIPTOR_STRING)
{
switch ( wValue & 0xff )
{
case STRING_INDEX_LANGUAGES: {
uint16_t STRING_LANGUAGE[2] = { (STD_GET_DESCRIPTOR_STRING<<8) | 4, 0x0409 };
USB_Write(pCdc->pUsb, (const char*)STRING_LANGUAGE, SAM_BA_MIN(sizeof(STRING_LANGUAGE), wLength), USB_EP_CTRL);
}
break;
case STRING_INDEX_MANUFACTURER:
USB_SendString(pCdc->pUsb, STRING_MANUFACTURER, wLength );
break;
case STRING_INDEX_PRODUCT:
USB_SendString(pCdc->pUsb, STRING_PRODUCT, wLength );
break;
default:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
}
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_ADDRESS:
/* Send ZLP */
USB_SendZlp(pUsb);
/* Set device address to the newly received address from host */
USB_SetAddress(pCdc->pUsb, wValue);
break;
case STD_SET_CONFIGURATION:
/* Store configuration */
pCdc->currentConfiguration = (uint8_t)wValue;
/* Send ZLP */
USB_SendZlp(pUsb);
/* Configure the 3 needed endpoints */
USB_Configure(pUsb);
break;
case STD_GET_CONFIGURATION:
/* Return current configuration value */
USB_Write(pCdc->pUsb, (char *) &(pCdc->currentConfiguration), sizeof(pCdc->currentConfiguration), USB_EP_CTRL);
break;
case STD_GET_STATUS_ZERO:
wStatus = 0;
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
break;
case STD_GET_STATUS_INTERFACE:
wStatus = 0;
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
break;
case STD_GET_STATUS_ENDPOINT:
wStatus = 0;
dir = wIndex & 80;
wIndex &= 0x0F;
if (wIndex <= 3)
{
if (dir)
{
wStatus = (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.reg & USB_DEVICE_EPSTATUSSET_STALLRQ1) ? 1 : 0;
}
else
{
wStatus = (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.reg & USB_DEVICE_EPSTATUSSET_STALLRQ0) ? 1 : 0;
}
/* Return current status of endpoint */
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_FEATURE_ZERO:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
case STD_SET_FEATURE_INTERFACE:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case STD_SET_FEATURE_ENDPOINT:
dir = wIndex & 0x80;
wIndex &= 0x0F;
if ((wValue == 0) && wIndex && (wIndex <= 3))
{
/* Set STALL request for the endpoint */
if (dir)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ1;
}
else
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ0;
}
/* Send ZLP */
USB_SendZlp(pUsb);
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_INTERFACE:
case STD_CLEAR_FEATURE_ZERO:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
case STD_CLEAR_FEATURE_INTERFACE:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case STD_CLEAR_FEATURE_ENDPOINT:
dir = wIndex & 0x80;
wIndex &= 0x0F;
if ((wValue == 0) && wIndex && (wIndex <= 3))
{
if (dir)
{
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.bit.STALLRQ1)
{
// Remove stall request
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ1;
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.bit.STALL1)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL1;
// The Stall has occurred, then reset data toggle
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSSET_DTGLIN;
}
}
}
else
{
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.bit.STALLRQ0)
{
// Remove stall request
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ0;
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.bit.STALL0)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL0;
// The Stall has occurred, then reset data toggle
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSSET_DTGLOUT;
}
}
}
/* Send ZLP */
USB_SendZlp(pUsb);
}
else
{
USB_SendStall(pUsb, true);
}
break;
// handle CDC class requests
case SET_LINE_CODING:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case GET_LINE_CODING:
/* Send current line coding */
USB_Write(pCdc->pUsb, (char *) &line_coding, SAM_BA_MIN(sizeof(usb_cdc_line_coding_t), wLength), USB_EP_CTRL);
break;
case SET_CONTROL_LINE_STATE:
/* Store the current connection */
pCdc->currentConnection = wValue;
/* Send ZLP */
USB_SendZlp(pUsb);
break;
default:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
}
}
/*----------------------------------------------------------------------------
* \brief
*/
P_USB_CDC usb_init(void)
{
sam_ba_cdc.pUsb = USB;
/* Initialize USB */
USB_Init();
/* Get the default CDC structure settings */
USB_Open(&sam_ba_cdc, sam_ba_cdc.pUsb);
return &sam_ba_cdc;
}
/*----------------------------------------------------------------------------
* \brief Send a USB descriptor string.
*
* The input string is plain ASCII but is sent out as UTF-16 with the correct 2-byte prefix.
*/
uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t maxLength)
{
uint8_t string_descriptor[255]; // Max USB-allowed string length
uint16_t* unicode_string=(uint16_t*)(string_descriptor+2); // point on 3 bytes of descriptor
int resulting_length;
string_descriptor[0] = (strlen(ascii_string)<<1) + 2;
string_descriptor[1] = STD_GET_DESCRIPTOR_STRING;
for ( resulting_length = 1 ; *ascii_string && (resulting_length<maxLength>>1) ; resulting_length++ )
{
*unicode_string++ = (uint16_t)(*ascii_string++);
}
return USB_Write(pUsb, (const char*)string_descriptor, resulting_length<<1, USB_EP_CTRL);
}

View file

@ -1,103 +0,0 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. 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 CDC_ENUMERATE_H
#define CDC_ENUMERATE_H
#include <sam.h>
#include <stdbool.h>
#define USB_EP_CTRL (0u)
#define USB_EP_OUT (2u)
#define USB_EP_OUT_SIZE (0x40u)
#define USB_EP_IN (1u)
#define USB_EP_IN_SIZE (0x40u)
#define USB_EP_COMM (3u)
#define MAX_EP (4u)
/* USB standard request code */
#define STD_GET_STATUS_ZERO (0x0080u)
#define STD_GET_STATUS_INTERFACE (0x0081u)
#define STD_GET_STATUS_ENDPOINT (0x0082u)
#define STD_CLEAR_FEATURE_ZERO (0x0100u)
#define STD_CLEAR_FEATURE_INTERFACE (0x0101u)
#define STD_CLEAR_FEATURE_ENDPOINT (0x0102u)
#define STD_SET_FEATURE_ZERO (0x0300u)
#define STD_SET_FEATURE_INTERFACE (0x0301u)
#define STD_SET_FEATURE_ENDPOINT (0x0302u)
#define STD_SET_ADDRESS (0x0500u)
#define STD_GET_DESCRIPTOR (0x0680u)
#define STD_SET_DESCRIPTOR (0x0700u)
#define STD_GET_CONFIGURATION (0x0880u)
#define STD_SET_CONFIGURATION (0x0900u)
#define STD_GET_INTERFACE (0x0A81u)
#define STD_SET_INTERFACE (0x0B01u)
#define STD_SYNCH_FRAME (0x0C82u)
#define STD_GET_DESCRIPTOR_DEVICE (1u)
#define STD_GET_DESCRIPTOR_CONFIGURATION (2u)
#define STD_GET_DESCRIPTOR_STRING (3u)
#define STD_GET_DESCRIPTOR_INTERFACE (4u)
#define STD_GET_DESCRIPTOR_ENDPOINT (5u)
#define STD_GET_DESCRIPTOR_DEVICE_QUALIFIER (6u)
#define STD_GET_DESCRIPTOR_OTHER_SPEED_CONFIGURATION (7u)
#define STD_GET_DESCRIPTOR_INTERFACE_POWER1 (8u)
#define FEATURE_ENDPOINT_HALT (0u)
#define FEATURE_DEVICE_REMOTE_WAKEUP (1u)
#define FEATURE_TEST_MODE (2u)
#define STRING_INDEX_LANGUAGES (0x00u)
#define STRING_INDEX_MANUFACTURER (0x01u)
#define STRING_INDEX_PRODUCT (0x02u)
#define SAM_BA_MIN(a, b) (((a) < (b)) ? (a) : (b))
typedef struct _USB_CDC
{
// Private members
Usb *pUsb;
uint8_t currentConfiguration;
uint8_t currentConnection;
// Public Methods:
uint8_t (*IsConfigured)(struct _USB_CDC *pCdc);
// uint32_t (*Write) (Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num);
// uint32_t (*Read) (Usb *pUsb, char *pData, uint32_t length);
} USB_CDC, *P_USB_CDC;
/**
* \brief Initializes the USB module
*
* \return Pointer to the USB CDC structure
*/
P_USB_CDC usb_init(void);
void sam_ba_usb_CDC_Enumerate(P_USB_CDC pCdc);
uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t maxLength);
extern USB_CDC sam_ba_cdc;
#endif // CDC_ENUMERATE_H

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">
<ProjectComponents />
</Store>

View file

@ -1,300 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>7.0</ProjectVersion>
<ToolchainName>com.Atmel.ARMGCC.C</ToolchainName>
<ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
<avrdevice>ATSAMD51J19A</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>samd21_sam_ba</AssemblyName>
<Name>samd51_sam_ba</Name>
<RootNamespace>samd21_sam_ba</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress>0x20000000</RamSnippetAddress>
<UncachedRange />
<preserveEEPROM>true</preserveEEPROM>
<OverrideVtorValue>exception_table</OverrideVtorValue>
<BootSegment>2</BootSegment>
<eraseonlaunchrule>0</eraseonlaunchrule>
<ExternalProgrammingToolCommand />
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.27.3" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
<avrtool>com.atmel.avrdbg.tool.edbg</avrtool>
<avrtoolserialnumber>00000000EZE000006352</avrtoolserialnumber>
<avrdeviceexpectedsignature>0x60060005</avrdeviceexpectedsignature>
<avrtoolinterface>SWD</avrtoolinterface>
<com_atmel_avrdbg_tool_atmelice>
<ToolOptions>
<InterfaceProperties>
<SwdClock>0</SwdClock>
</InterfaceProperties>
<InterfaceName>SWD</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>
<ToolNumber>J41800001895</ToolNumber>
<ToolName>Atmel-ICE</ToolName>
</com_atmel_avrdbg_tool_atmelice>
<avrtoolinterfaceclock>2000000</avrtoolinterfaceclock>
<com_atmel_avrdbg_tool_edbg>
<ToolOptions>
<InterfaceProperties>
<SwdClock>2000000</SwdClock>
</InterfaceProperties>
<InterfaceName>SWD</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.edbg</ToolType>
<ToolNumber>00000000EZE000006352</ToolNumber>
<ToolName>EDBG</ToolName>
</com_atmel_avrdbg_tool_edbg>
<UseGdb>True</UseGdb>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
</ArmGcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=1 all</BuildTarget>
<CleanTarget>clean</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'featherm4' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=1 all BOARD_ID=FEATHER_M4 BOARD_CHIP=__SAMD51G19A__</BuildTarget>
<CleanTarget>clean BOARD_ID=FEATHER_M4</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
<OutputPath>bin\featherm4\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'metrom4' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=0 all BOARD_ID=METRO_M4 BOARD_CHIP=__SAMD51J19A__</BuildTarget>
<CleanTarget>clean BOARD_ID=METRO_M4</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
<OutputPath>bin\metrom4\</OutputPath>
<OutputFileName>METRO_M4_sam_ba</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
</PropertyGroup>
<ItemGroup>
<Compile Include="board_definitions.h">
<SubType>compile</SubType>
<Link>board_definitions.h</Link>
</Compile>
<Compile Include="board_definitions_feather_m4.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="board_definitions_metro_m4.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="board_driver_led.c">
<SubType>compile</SubType>
<Link>board_driver_led.c</Link>
</Compile>
<Compile Include="board_driver_led.h">
<SubType>compile</SubType>
<Link>board_driver_led.h</Link>
</Compile>
<Compile Include="board_driver_serial.c">
<SubType>compile</SubType>
<Link>board_driver_serial.c</Link>
</Compile>
<Compile Include="board_driver_serial.h">
<SubType>compile</SubType>
<Link>board_driver_serial.h</Link>
</Compile>
<Compile Include="board_driver_usb.c">
<SubType>compile</SubType>
<Link>board_driver_usb.c</Link>
</Compile>
<Compile Include="board_driver_usb.h">
<SubType>compile</SubType>
<Link>board_driver_usb.h</Link>
</Compile>
<Compile Include="board_init.c">
<SubType>compile</SubType>
<Link>board_init.c</Link>
</Compile>
<Compile Include="board_startup.c">
<SubType>compile</SubType>
<Link>board_startup.c</Link>
</Compile>
<Compile Include="main.c">
<SubType>compile</SubType>
<Link>main.c</Link>
</Compile>
<Compile Include="sam_ba_cdc.c">
<SubType>compile</SubType>
<Link>sam_ba_cdc.c</Link>
</Compile>
<Compile Include="sam_ba_cdc.h">
<SubType>compile</SubType>
<Link>sam_ba_cdc.h</Link>
</Compile>
<Compile Include="sam_ba_monitor.c">
<SubType>compile</SubType>
<Link>sam_ba_monitor.c</Link>
</Compile>
<Compile Include="sam_ba_monitor.h">
<SubType>compile</SubType>
<Link>sam_ba_monitor.h</Link>
</Compile>
<Compile Include="sam_ba_serial.c">
<SubType>compile</SubType>
<Link>sam_ba_serial.c</Link>
</Compile>
<Compile Include="sam_ba_serial.h">
<SubType>compile</SubType>
<Link>sam_ba_serial.h</Link>
</Compile>
<Compile Include="sam_ba_usb.c">
<SubType>compile</SubType>
<Link>sam_ba_usb.c</Link>
</Compile>
<Compile Include="sam_ba_usb.h">
<SubType>compile</SubType>
<Link>sam_ba_usb.h</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="bootloader_FEATHER_M4.ld">
<SubType>compile</SubType>
</None>
<None Include="bootloader_METRO_M4.ld">
<SubType>compile</SubType>
</None>
<None Include="Makefile">
<SubType>compile</SubType>
<Link>Makefile</Link>
</None>
<None Include="README.md">
<SubType>compile</SubType>
<Link>README.md</Link>
</None>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

BIN
bootloaders/mkr1000/samd21_sam_ba_arduino_mkr1000.bin Normal file → Executable file

Binary file not shown.

View file

@ -1,403 +1,376 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F0020E9050000D5050000D9050000AF
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
: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
: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
: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
:101450000200004041234E00000200000001000095
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004E6F7620323420323031350031313A33CC
:1014B000343A303800580A0D00590A0D005A0023FA
: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

BIN
bootloaders/mkr1000/samd21_sam_ba_genuino_mkr1000.bin Normal file → Executable file

Binary file not shown.

View file

@ -1,403 +1,376 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F0020E9050000D5050000D9050000AF
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
: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
: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
:101450000200004041234E02000200000001000093
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004E6F7620323420323031350031313A33CC
:1014B000353A313600580A0D00590A0D005A0023FA
: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

@ -1,404 +0,0 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B5203DA6170477800002001000020B1
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
: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
: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
:00000001FF

View file

@ -1,502 +0,0 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
: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
:00000001FF

View file

@ -1,502 +0,0 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D41E000008B5084B002B03D090
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D41E000060000020580000200000000076
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
: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
:00000001FF

View file

@ -1,404 +0,0 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B5203DA6170477800002001000020B1
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
: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
: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
:00000001FF

View file

@ -1,502 +0,0 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
: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
:00000001FF

View file

@ -1,403 +0,0 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B2197080201249400008601178B7
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B52001A607047780000200100002075
:10010000000000209C44004110B5C3699C07FCD44A
: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
: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
:00000001FF

View file

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "Bootloader_D21", "Bootloader_D21.cproj", "{7ABD2862-543D-4184-845E-8DC3E340E2CC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Release|ARM = Release|ARM
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7ABD2862-543D-4184-845E-8DC3E340E2CC}.Debug|ARM.ActiveCfg = Debug|ARM
{7ABD2862-543D-4184-845E-8DC3E340E2CC}.Debug|ARM.Build.0 = Debug|ARM
{7ABD2862-543D-4184-845E-8DC3E340E2CC}.Release|ARM.ActiveCfg = Release|ARM
{7ABD2862-543D-4184-845E-8DC3E340E2CC}.Release|ARM.Build.0 = Release|ARM
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

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